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模块使用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用模块化代码片段中的LeakCanary检测内存泄漏?
CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段