python-ddt模块使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-ddt模块使用相关的知识,希望对你有一定的参考价值。

一.数据驱动测试框架DDT的使用


背景介绍:
DDT全程为Data Driver Test数据驱动测试,是由测试数据驱动测试用例的执行,加入ddt框架,可以实现用例的重复执行以及代码的重复使用,减少工作量。数据代码分离为主流设计思路,在常见的测试体系中可以使用xml文件、excel文件、json文件来管理测试数据,通过代码自动读取,来驱动用例的执行,ddt测试框架基于这种设计思路上,实现了方便使用,简单易懂的效果

二.使用方法

DDT由几个关键部分组成:
1.装饰类
2.普通装饰器
3.参数拆分

在导入ddt框架后,可以使用装饰类ddt,来装饰自定义的测试用例,被ddt装饰的类可以直接使用ddt测试框架
装饰器ddt.data,使用data装饰unittest中的测试方法,该方法可以读取到data中设定的测试数据,来驱动用例的执行

unpack的使用,当test_*()方法需要传入多个参数时,需要通过列表或者元组来设定参数,则需要通过unpack方法来解析参数,例如:

info = [(1, 2), (3, 4)]

@data(*info)
@unpack
# 下边用例会执行两次
def test_add(self, num1, num2):
logger.info(num1 + num2)

下边是我的unnitest结合ddt,进行数据驱动的代码实现,其中
1.myexcel模块是我调用openpyxl模块封装实现的excel基础操作类,博客链接:https://blog.51cto.com/10808695/2542382
2.myddt是我基于ddt源码进行修改适配后的文件,后续分享
3.myloggin是我基于loggin模块进行封装实现的日志信息输出类,后续分享

import unittest
# from ddt import ddt, data
from myddt import ddt, data,unpack
from myunnitest import Register
from mylogging.mylogger import logger
from myexcel.handle_excel import Handle
import os

@ddt
class RegisterTest(unittest.TestCase):
    #1.读取测试数据
    cur_path = os.path.dirname(__file__)
    case_path = os.path.join(os.path.dirname(cur_path), "resource\login_case.xlsx")
    logger.info(case_path)
    handle = Handle(case_path, "Sheet1")
    cases = handle.get_all_caseinfo()
    print(cases)

    @classmethod
    def setUpClass(cls):
        pass

    @classmethod
    def tearDownClass(cls):
        pass

    def setUp(self):
        pass

    def tearDown(self):
        pass

    """解包"""
    @data(*cases)
    def test_reister_success(self, case):
        re = Register.register(case["username"], case["passwd1"], case["passwd2"])
        logger.info(re)
        # 接口返回json,excel里读取出来的数据是字符串格式,所以需要 eval函数将两个数据转化一致
        self.assertEqual(re, eval(case["expected"]), "error 参数有误")

    info = [(1, 2), (3, 4)]

    @data(*info)
    @unpack
    # 下边用例会执行两次
    def test_add(self, num1, num2):
        logger.info(num1 + num2)
if __name__ == ‘__main__‘:
    unittest.main()

以上是关于python-ddt模块使用的主要内容,如果未能解决你的问题,请参考以下文章

python-ddt处理测试类数据

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

如何有条件地将 C 代码片段编译到我的 Perl 模块?

CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段

如何将字符串数据从活动发送到片段?

nodejs常用代码片段