数据驱动ddt:
前面我们讲了,在测试用例中采用 超继承unittest.TectCase的 __init__() 方法来接收和初始化参数,在执行模块传入参数:
超继承unittest.TectCase的 __init__() 方法:↓↓↓
执行模块中传入参数:↓↓↓
实际上还有一种更常见的用 数据驱动ddt 来进行传参:
1. 首先要导入ddt模块的ddt、data
2.用 @ddt 装饰测试类,用 @data 装饰测试用例
3.读取参数 + 接收参数
import unittest
from ddt import ddt,data # 修饰器
from class_13.job.assignment_1229.common.do_excel import DoExcel
from class_13.job.assignment_1229.test_case.math import Math
'''1.用 @ddt 装饰测试类'''
@ddt
class TestMath(unittest.TestCase):
'''2.读取参数'''
doexcel = DoExcel('test_data.xlsx', 'Sheet')
data_1 = doexcel.get_excel()
'''3.用 @data 装饰测试用例
4.用 动态参数* 来接收参数(接收的是列表,然后被 动态参数* 拆解为一个个的字典,依次传入测试用例中)'''
@data(*data_1)
def test_sub(self,data_1):
'''5.在用例内部读取字典中的values作为参数'''
result = Math().sub(data_1['a'], data_1['b'])
try:
self.assertEqual(result, data_1['expect'])
test_result = 'PASS'
except AssertionError:
test_result = 'FAILED'
raise
finally:
self.doexcel.write_excel(data_1['case_id'], result, test_result)
然后在执行模块中的只需要导入测试类然后执行就行了:
import unittest
import HTMLTestRunnerNew
from class_13.job.assignment_1229.test_case.test_math import TestMath
suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(TestMath))
'''注意注意注意:
使用ddt的话必须采用 从测试类 或测试模块导入到 suite,
不能直接使用suite.addTest()测试用例名导入'''
with open(r'E:\Pycharm\PyProjects\lemon\class_13\job\assignment_1229\test_report\测试报告.html', 'wb') as file:
runner = HTMLTestRunnerNew.HTMLTestRunner(stream=file,
title='测试报告.html',
verbosity=2,
description='第一次执行测试报告',
tester='ChenXun')
runner.run(suite)
注意添加测试套件的方式必须用导入测试类或模块的方式!!!