学习笔记-Python unittest(单元测试)+ddt(数据驱动)

1.概念

1.1 unittest (单元测试)

Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作。**

1.2 ddt(数据驱动)

DDT是 “Data-Driven Tests”的缩写,DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据),file_data(可以从json或者yaml中获取测试数据)

1.3 unittest常见的几个概念:

  • TestCase 也就是测试用例

  • TestSuite多个测试用例集合在一起,就是TestSuite

  • TestLoader是用来加载TestCaseTestSuite中的

  • TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

1.4 实例

import unittest,warnings
from ddt import ddt,data
from public.driven.ddtTool import ddtTool
from public.logTool import logTool

@ddt
class test_AD(unittest.TestCase):
    dd = ddtTool()
    datadict = dd.read_excel('AD')

    @classmethod
    def setUpClass(cls):

        log = logTool()
        log.info('{}[AD_START]{}'.format('>' * 30, '<' * 30))
        # 取消警告
        warnings.simplefilter("ignore", ResourceWarning)

    @data(*datadict)
    def test_AD(self, data):
        '''获取数据类接口'''
        dd = ddtTool()
        dd.send_requests(data)

    @classmethod
    def tearDownClass(cls):
        log = logTool()
        log.info('{}[AD_END]{}'.format('>' * 30, '<' * 30))


if __name__ == '__main__':
    unittest.main()
  • datadict是一个字典,通过@data将多个参数解析成单个参数传入函数send_requests(data)中
  • setUpClass,tearDownClass是在执行用例之前初始化一遍,所有的用例执行完后再进行清理工作,并且在setUpClasstearDownClass的上面添加@classmethod装饰器,如果某个用例的元素定位或者其他出错,不影响整个用例的执行工作;但要注意的是不要忽略了用例直接的相互影响,所以用这种模式要考虑到用例之前的耦合,尽可能不要让前个用例的测试环境影响后一个用例的执行

1.5 执行测试用例示例

import unittest,os,time
from public.pathTool import htmlreport_path,cases_path,root_path
from BeautifulReport.BeautifulReport import BeautifulReport
from HTMLTestRunner.HTMLTestRunner import HTMLTestRunner
class reportTool:
    def get_dir_cases(self,dir):
        '''
        根据指定目录获取匹配的测试用例
        :param casedir: 测试用例目录
        :return: 测试用例集
        '''
        path = os.path.join(cases_path,'{}/'.format(dir))
        suit = unittest.defaultTestLoader.discover(path,pattern='*.py')
        return suit

    def get_all_cases(self):
        '''获取根目录下所有测试用例'''
        path = cases_path
        suit = unittest.defaultTestLoader.discover(path,pattern='*.py',top_level_dir=None)
        return suit

    def reportTool(self,suit):
        '''初始化报告样式'''
        # 用时间作为测试报告文件名的一部分
        current_time = time.strftime("%Y%m%d_%H_%M_%S")
        BeautifulReport(suit).report(filename='{}'.format(current_time), description='终端接口测试报告',
                                            log_path=htmlreport_path)

你可能感兴趣的:(学习笔记-Python unittest(单元测试)+ddt(数据驱动))