《基于Python的全栈自动化测试》之 数据驱动ddt

数据驱动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)

注意添加测试套件的方式必须用导入测试类或模块的方式!!!

END!!!

发布了44 篇原创文章 · 获赞 23 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/waitan2018/article/details/85935013