unittest系列之加载和测试运行测试用例的方式及ddt数据驱动

332 阅读2分钟

1.用例执行顺序规则

以ASCII码的大小顺序执行

2.加载和测试运行测试用例的方式

2.1 main方法

unittest.main()

2.2 通过测试套件加载运行

2.2.1 一次性加载一个

import unittest
​
from testcases.test_detail import TestDetail
from testcases.test_show import TestShow
​
if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(TestShow("test_show"))
    suite.addTest(TestDetail("test_good_detail"))
    unittest.main(defaultTest="suite")

2.2.2 一次性加载多个

if __name__ == '__main__':
    suite = unittest.TestSuite()
    cases = [TestShow("test_show"), TestDetail("test_good_detail")]
    suite.addTests(cases)
    unittest.main(defaultTest="suite")

2.3 加载一个目录下的所有测试用例

import unittest
​
if __name__ == '__main__':
    suite = unittest.defaultTestLoader.discover('./testcases', pattern='test_*.py')
    unittest.main(defaultTest="suite")

3.unittest.main()底层参数详解

main = TestProgram
def __init__(self, module='__main__', defaultTest=None, argv=None,
                testRunner=None, testLoader=loader.defaultTestLoader,
                exit=True, verbosity=1, failfast=None, catchbreak=None,
                buffer=None, warnings=None, *, tb_locals=False):

module='main':测试用例所在的路径,默认为当前路径main

defaultTest:待执行的测试用例名称,默认执行所有用例

argv:接收外部传递给程序的参数

testRunner:测试运行器

testLoader:测试加载器

exit:是否在测试完成之后退出程序

verbosity:显示信息的详细程度,

取值为<=0时只显示用例总数和全局结果

取值为1时显示用例总数和全局结果,且标记每个用例的执行结果(具体标记见4.运行结果)

取值>=2时显示用例总数和全局结果,并输出每个用例的详细结果

failfast:是否在测试失败是终止测试

4.ddt数据驱动

ddt,即data driver test,它可以完美的应用于unittest框架实现数据驱动

ddt是通过装饰器的方式来完成的,主要有以下几个装饰器

@ddt 类装饰器,申明当前类使用ddt框架

@data 函数装饰器,用于给测试用例传递数据

@unpack 函数装饰器,将数据解包,一般用于元组和列表

@file_data 函数装饰器,可以读取json或yaml文件

ddt数据驱动中,测试用例的执行次数是由@data()传参的个数决定的。传入一个值执行一次,传入多个值执行多次

如果传入的是多个元组(或列表),那么可以使用@unpack解包元组和列表,但要注意解包数量要和元组(列表)中的值的个数保持一致

如果传入的是多个字典,则可使用@unpack解包,但是用例中的名称和个数必须和字典的key保持一致