框架:unittest+python+ddt
一、DDT数据驱动
1.为什么需要数据驱动
比如测试数据有多组,代码只有一份,DDT数据驱动可以实现不同数据运行同一份代码
数据驱动测试:
1)避免编写重复代码
2)数据与测试脚本分离
3)通过使用数据驱动测试,来验证多组数据测试场景
4)通常来说,多用于单元测试和接口测试
2.驱动模式介绍
数据驱动:Data-Driven Tests(DDT)即数据驱动测试,可以实现不同数据运行同一个测试用例。ddt本质其实就是装饰器,一组数据一个场景。
关键字驱动(核心:把业务逻辑封装成关键字login,只需要调用login)
混合驱动模式(关键字驱动+数据驱动):市场主流
行为驱动测试:用中文描述测试用例
3.DDT是通过装饰器的形式来调用的。
装饰器:完成一种特定功能的函数(事务),在python里面装饰器是以@开头,并且装饰器有两种:类装饰器、函数装饰器。
ddt里面有哪些装饰器:
@ddt(申明当前类使用ddt框架)
@data(函数装饰器,用于给测试用例传递数据)
@unpack(函数装饰器,将传输的数据包解包)一般作用于元组tuple和列表list。
@file_data(函数装饰器,可直接读取yaml/json文件)
4.实战 @ddt,@data
安装
@ddt
class TestLogin(MyUnit):
@data(10)
#传输 10
@unpack
#给list或元组解包
def test_01_login(self,args):
print(args)
python数据类型:数字(int,float,complex)字符串、列表list、元组tuple、集合、字典dict
总结:当传单个值,所有类型都可以传,用例执行1次。
如果data传入多个值的时候,那么有几个值执行几个
@data((1,23),( "liyou","lili")) #传输元组
@unpack #给list或元组解包
def test_01_login(self,args1,args2):
print(args1,args2)
@data({"name":"李老师","age":"18"},( "name":"王老师","age":"19")) #传输字典
@unpack #给list或元组解包
def test_01_login(self,name,age):
print(name,age)
@unpack
如果是数字或者字符串,那么不需要解包
如果是元组和列表的话,那么可以通过@unpack,但是参数的个数必须和解完包后的值的个数一样
如果是集合,无法解包
如果是字典,可以解包,但是参数的名字和个数必须和字典的键保持一致
在common模块,添加excel_util.py文件
#读取excel文件
def read_excel(self):
#xlrd,openpyxl
#加载excel工作簿
wb = openpyxl.load_workbook(self.get_object_path()+“data/login_data.xlsx”)
#获得sheet对象
all_list = []
sheet=wb[‘login’]
#获得excel的行数和列数
#
print(sheet.max_row,sheet.max_column)
#循环
for rows in range(2,sheet.max_row+1):
tmp_list = []
for cols in range(2,sheet.max_column+1):
tmp_list.append(sheet.cell(rows,cols).value)
all_list.append(tmp_list)
return all_list
在数据驱动中使用
@data(*ExcelUtil().read_excel()) #*号表示解析掉[]
@unpack #给list或元组解包
def test_01_login(self,username,passwd):
“””测试用i1″””
print(“用例1—————–“)
global driver
driver=self.driver
url = ‘https://shop.szmachong.com/?s=user/logininfo.html’
login_page = LoginPage(driver,url)
login_page.open_url()
login_page.input_account(username)
login_page.input_pwd(passwd)
login_page.click_bt()
sleep(2)
login_page.checkSucess()
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/244656.html