自动化脚本开发
- 线性脚本
- 模块化驱动测试
- 数据驱动测试
- 关键字驱动
线性脚本
线性脚本:脚本能顺序地执行一个业务,代码的可维护性、复用性较差,维护成本高
需求1:通过线性测试把业务场景实现
1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
2、点击其中的免费注册按钮(验证注册跳转功能)
3、输入正常的用户名
4、输入正常的邮箱
5、输入正常的密码
6、输入正常的确认密码
7、勾选协议
8、点击注册按钮(验证是否能注册成功)
veryRegTrue .py
from selenium import webdriver
import time
driver = webdriver.Chrome()
#1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
driver.get("http://47.105.47.131/verydows/")
#写一句隐形等待
driver.implicitly_wait(10)
#2、点击其中的免费注册按钮(验证注册跳转功能)
driver.find_element_by_link_text("免费注册").click()
#需要对免费注册的跳转功能进行验证,怎么验证?
#通过跳转页面的URL地址断言
expectURL = 'http://47.105.47.131/verydows/index.php?c=user&a=register'
actualURL = driver.current_url
if expectURL==actualURL:
print("跳转正确,免费注册跳转功能成功")
else:
print("跳转失败,免费注册跳转功能失败")
# 3、输入正常的用户名
driver.find_element_by_id('username').send_keys("sz1902_002")
# 4、输入正常的邮箱
driver.find_element_by_id('password').send_keys('123456')
# 6、输入正常的确认密码
driver.find_element_by_id('repassword').send_keys('123456')
#7、勾选协议
#8、点击注册按钮(验证是否能注册成功)
driver.find_element_by_link_text("立即注册").click()
#延时5秒钟,让其跳过中间页面,能正显示出用户信息页面
time.sleep(5)
expectRegURL = 'http://47.105.47.131/verydows/index.php?c=user&a=index'
actualRegURL = driver.current_url
#断言注册是否成功
if expectRegURL==actualRegURL:
print("跳转到用户信息页面,注册成功,正向注册测试用例通过")
else:
print("未能跳转到用户信息页面,注册失败,正向注册测试用例失败")
#关闭浏览器对象
driver.quit()
需求2:通过线性测试实现登录业务场景
1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
2、点击其中的登陆按钮(验证登陆按钮跳转功能)
3、输入正常的用户名
4、输入正常的密码
5、点击登陆( 验证是否能登陆成功)
veryLoginTrue .py
from selenium import webdriver
import time
driver = webdriver.Chrome()
#1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
driver.get("http://47.105.47.131/verydows/")
#写一句隐形等待
driver.implicitly_wait(10)
# 2、点击其中的登陆按钮
driver.find_element_by_link_text('登陆').click()
#(验证登陆按钮跳转功能)
expectUrl = 'http://47.105.47.131/verydows/index.php?c=user&a=login'
actualUrl = driver.current_url
if expectUrl==actualUrl:
print("跳转成功")
else:
print("跳转失败")
# 3、输入正常的用户名(已经注册成功的用户名-->sz1902_002)
driver.find_element_by_id('username').send_keys('sz1902_002')
# 4、输入正常的密码(与登陆用户名一致的密码)
driver.find_element_by_id('password').send_keys('123456')
# 5、点击登陆
driver.find_element_by_xpath('//*[@id="login-form"]/div/a').click()
#再点击登陆之后需要等待5秒,跳过中间界面
time.sleep(5)
#( 验证是否能登陆成功)
expectLoginUrl = 'http://47.105.47.131/verydows/index.php?c=user&a=index'
actualLoginUrl = driver.current_url
if expectLoginUrl==actualLoginUrl:
print("跳转登陆成功页面,正向的登录用例通过")
else:
print("未能跳转登陆成功页面,正向的登录用例失败")
driver.quit()
模块化驱动测试
模块化驱动测试:主要脚本的可维护性角度进行改进,把重复的操作独立成公共模块,即把脚本中重复性的代码提取出来,写入公共模块(方法、类里面实现),当用例执行过程中需要用到这一模块时则被调用,
最大限度的消除了重复,提高了测试用例的可维护、复用性。
需求1:将登录、退出功能整理在一个模块中,并且分别设计为方法,供其他模块调用
LoginModel .py
from selenium import webdriver
import time
#登录系统的方法
def verylogin(driver):
#1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
driver.get("http://47.105.47.131/verydows/")
#写一句隐形等待
driver.implicitly_wait(10)
# 2、点击其中的登陆按钮
driver.find_element_by_link_text('登陆').click()
#(验证登陆按钮跳转功能)
expectUrl = 'http://47.105.47.131/verydows/index.php?c=user&a=login'
actualUrl = driver.current_url
if expectUrl==actualUrl:
print("跳转成功")
else:
print("跳转失败")
# 3、输入正常的用户名(已经注册成功的用户名-->sz1902_002)
driver.find_element_by_id('username').send_keys('sz1902_002')
# 4、输入正常的密码(与登陆用户名一致的密码)
driver.find_element_by_id('password').send_keys('123456')
# 5、点击登陆
driver.find_element_by_xpath('//*[@id="login-form"]/div/a').click()
#再点击登陆之后需要等待5秒,跳过中间界面
time.sleep(5)
#( 验证是否能登陆成功)
expectLoginUrl = 'http://47.105.47.131/verydows/index.php?c=user&a=index'
actualLoginUrl = driver.current_url
if expectLoginUrl==actualLoginUrl:
print("跳转登陆成功页面,正向的登录用例通过")
else:
print("未能跳转登陆成功页面,正向的登录用例失败")
#退出登陆的 方法
def veryLogout(driver):
driver.find_element_by_xpath('//*[@id="top-userbar"]/a').click()
driver.find_element_by_link_text('退出').click()
#关闭浏览器的方法
def veryquit(driver):
driver.quit()
而这种功能的模块,可以独立放在一个Public文件夹下,供其他模块调用
maintest .py
from selenium import webdriver
import time
import os
import sys # 将公共模块导入系统路径列表
path1 = os.path.dirname(__file__)
path2 = os.path.dirname(path1)+r'/public'
path = sys.path
path.append(path2)
import Loginmodel
driver = webdriver.Chrome()
Loginmodel.verylogin(driver)
#xxxxxxxxx
Loginmodel.veryLogout(driver)
Loginmodel.veryquit(driver)
数据驱动测试
数据驱动测试:通过数据的改变来驱动自动化测试的执行,解决代码的复用性问题(一个脚本通过数据驱动就可以覆盖多个手动测试用例),其实就是参数化技术
- 列表中存列表
- 列表中存字典
- csv文件存储数据
需求1:使用列表的方式参数化用户名,通过线性测试把业务场景实现
1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
2、点击其中的免费注册按钮(验证注册跳转功能)
3、输入正常的用户名(一次跑三条用例)
4、输入正常的邮箱
5、输入正常的密码
6、输入正常的确认密码
7、勾选协议
8、点击注册按钮(验证是否能注册成功)
veryRegTruePara .py
from selenium import webdriver
import time
driver = webdriver.Chrome()
#1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
driver.get("http://47.105.47.131/verydows/")
#写一句隐形等待
driver.implicitly_wait(10)
#2、点击其中的免费注册按钮(验证注册跳转功能)
driver.find_element_by_link_text("免费注册").click()
# 3、输入正常的用户名
driver.find_element_by_id('username').send_keys(item[0])
# 4、输入正常的邮箱
driver.find_element_by_id('email').send_keys(item[1])
# 5、输入正常的密码
driver.find_element_by_id('password').send_keys('123456')
# 6、输入正常的确认密码
driver.find_element_by_id('repassword').send_keys('123456')
#7、勾选协议
#8、点击注册按钮(验证是否能注册成功)
driver.find_element_by_link_text("立即注册").click()
#延时5秒钟,让其跳过中间页面,能正显示出用户信息页面
time.sleep(5)
expectRegURL = 'http://47.105.47.131/verydows/index.php?c=user&a=index'
actualRegURL = driver.current_url
#断言注册是否成功
if expectRegURL==actualRegURL:
print("跳转到用户信息页面,注册成功,正向注册测试用例通过")
else:
print("未能跳转到用户信息页面,注册失败,正向注册测试用例失败")
#关闭浏览器对象
driver.quit()
需求2:通过字典的方式参数化用户名反向测试用例(不能包括重复注册情况,要单独再写脚本)
1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
2、点击其中的免费注册按钮
3、输入异常的用户名(一次跑五条用例)
空-->请设置用户名
abcd-->用户名不符合格式要求
abcdabcdabcda-->用户名不符合格式要求
12abcd->用户名不符合格式要求
sfd#$12-->用户名不符合格式要求
6、输入正常的确认密码:123456
7、勾选协议
8、点击注册按钮(验证是否能注册成功)
veryUserLoginFalse1 .py
from selenium import webdriver
import time
data=[{'username':'','email':'sz1902_000@qq.com','pw':'123456','expect':'请设置用户名'},
{'username':'abcd','email':'sz1902_000@qq.com','pw':'123456','expect':'用户名不符合格式要求'},
{'username':'abcdabcdabcdabcda','email':'sz1902_000@qq.com','pw':'123456','expect':'用户名不符合格式要求'},
{'username':'12abcd','email':'sz1902_000@qq.com','pw':'123456','expect':'用户名不符合格式要求'},
{'username':'sfd#$12','email':'sz1902_000@qq.com','pw':'123456','expect':'用户名不符合格式要求'}]
for item in data:
driver = webdriver.Chrome()
#1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
driver.get("http://47.105.47.131/verydows/")
#写一句隐形等待
driver.implicitly_wait(10)
#2、点击其中的免费注册按钮(验证注册跳转功能)
driver.find_element_by_link_text("免费注册").click()
# 3、输入正常的用户名
driver.find_element_by_id('username').send_keys(item['username'])
# 4、输入正常的邮箱
driver.find_element_by_id('email').send_keys(item['email'])
# 5、输入正常的密码
driver.find_element_by_id('password').send_keys(item['pw'])
# 6、输入正常的确认密码
driver.find_element_by_id('repassword').send_keys(item['pw'])
#7、勾选协议
#8、点击注册按钮(验证是否能注册成功)
driver.find_element_by_link_text("立即注册").click()
#延时5秒钟,让其跳过中间页面,能正显示出用户信息页面
time.sleep(5)
expect = driver.find_element_by_xpath('//*[@id="register-form"]/div/dl[1]/dd/span/font').text
#//*[@id="register-form"]/div/dl[1]/dd/span/font
actual = item['expect']
#断言注册是否成功
if expect==actual:
print("提示信息正确,反向注册测试用例通过")
else:
print("提示信息不正确,反向注册测试用例失败")
#关闭浏览器对象
driver.quit()
需求3:通过读取csv文件的方式参数化用户名反向测试用例(不能包括重复注册情况,要单独再写脚本)
1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
2、点击其中的免费注册按钮
3、输入异常的用户名(一次跑五条用例)
空-->请设置用户名
abcd-->用户名不符合格式要求
abcdabcdabcda-->用户名不符合格式要求
12abcd->用户名不符合格式要求
sfd#$12-->用户名不符合格式要求
6、输入正常的确认密码:123456
7、勾选协议
8、点击注册按钮(验证是否能注册成功)
veryUserLoginFalse2 .py
from selenium import webdriver
import time
import os
import csv
#path = os.path.dirname(__file__)+r"/users.csv"]
path = os.path.dirname(os.path.dirname(__file__))+r'/test_data/users.csv'
with open(path,'r') as f:
data = csv.reader(f)
for item in data:
driver = webdriver.Chrome()
#1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
driver.get("http://47.105.47.131/verydows/")
#写一句隐形等待
driver.implicitly_wait(10)
#2、点击其中的免费注册按钮(验证注册跳转功能)
driver.find_element_by_link_text("免费注册").click()
# 3、输入正常的用户名
driver.find_element_by_id('username').send_keys(item[0])
# 4、输入正常的邮箱
driver.find_element_by_id('email').send_keys(item[1])
# 5、输入正常的密码
driver.find_element_by_id('password').send_keys(item[2])
# 6、输入正常的确认密码
driver.find_element_by_id('repassword').send_keys(item[3])
#7、勾选协议
#8、点击注册按钮(验证是否能注册成功)
driver.find_element_by_link_text("立即注册").click()
#延时5秒钟,让其跳过中间页面,能正显示出用户信息页面
time.sleep(5)
expect = driver.find_element_by_xpath('//*[@id="register-form"]/div/dl[1]/dd/span/font').text
#//*[@id="register-form"]/div/dl[1]/dd/span/font
actual = item[4]
#断言注册是否成功
if expect==actual:
print("提示信息正确,反向注册测试用例通过")
else:
print("提示信息不正确,反向注册测试用例失败")
#关闭浏览器对象
driver.quit()
关键字驱动
关键字驱动:通过“关键字”的改变引起测试结果的改变,市面上的关键字驱动工具有UTF(关键字视图及专家视图),Selenium IDE、Katalon Recoder等,提供给用户独立的图形用户界面,降低脚本的编写难度