• 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()

  • 相关阅读:
    升/降压转换器 (Buck-boost)
    升压转换器 (Boost)
    降压转换器 (Buck)
    线性稳压器 (LDO)
    电源管理组件选择指南
    AC/DC 反激 (Flyback) 控制器
    SEPIC 单端初级电感转换器 稳压器 -- Zeta 转换器
    LT3759 宽输入电压范围升压 / 负输出 / SEPIC 控制器 可在输入电压低至 1.6V 的情况下工作
    LT1961 升压型稳压器造就了兼具升压和降压能力的扁平状SEPIC
    Level-shifting nixes need for dual power supply
  • 原文地址:https://www.cnblogs.com/wuxiaoxia/p/16154176.html
Copyright © 2020-2023  润新知