其他分享
首页 > 其他分享> > unittest框架之DDT驱动

unittest框架之DDT驱动

作者:互联网

框架: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()

 

标签:框架,unittest,list,解包,DDT,驱动,login,元组,data
来源: https://www.cnblogs.com/wuxiaoxia/p/16154176.html