ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

unittest框架之DDT驱动

2022-04-16 21:02:05  阅读:242  来源: 互联网

标签:框架 unittest list 解包 DDT 驱动 login 元组 data


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有