PyUint测试框架:unittest
unittest是python的内置模块,支持自动化测试,测试用例间可共享setUp(测试前的初始化)以及测试后的清理工作terDown,可以将测试用例合并为集合执行,然后输出测试报告
1 基本概念
- TestCase:所有测试用例的基类
- TestLoad:加载测试用例,返回TestSuite(测试套件)
- TestSuite:创建测试套件
- TextTestRunner:运行测试用例
- TextTestResult:测试结果(包含 运行多少,错误多少,失败多少)
2 使用方法:
- import语句引入unittest模块;
- 创建测试用例类,继承TestCase;
- 在setUp()方法中进行测试前的初始化工作,并在tearDown()方法中执行测试后的清除工作,setUp()和tearDown()都是TestCase类中定义的方法,每个测试用例都会执行一遍(setUpClass(),和tearDownClass(),必须使用@classmethod 装饰器, 所有case运行之前只运行一次)
- 测试用例的名字必须以test开头,小写以_下划线分割;
- 一个测试用例只测试一个方面,测试目的和测试内容应很明确。通过调用assertEqual、assertRaises等断言方法判断程序执行结果和预期值是否相符;
- 调用unittest.main()启动自测,main()方法使用TestLoader类来搜索所有包含在该模块中的测试方法,并自动执行它们。
- 构建测试集合
- 脚本自测unittest.main()
if __name__ == "__main__": unittest.main()
-
使用addTest()构建测试用例的方法:
if __name__ == "__main__": suiteTest = unittest.TestSuite() #创建Testsuite对象 suiteTest.addTest(MyTestCase("testCase1")) #将用例加入到Testsuite suiteTest.addTest(MyTestCase("testCase2")) #将用例加入到Testsuite
-
使用unittest.TestLoader()构建测试用例的几种方法:
- loadTestsFromTestCase(testCaseClass):testCaseClass必须是TestCase的子类(或孙类也行)
- loadTestsFromModule(module, pattern=None):test case所在的module
批量运行测试用例:- discover(start_dir,pattern='test*py',top level dir=None):找到指定目录下所有测试模块,并可递归查到子目录下的测试模块,只有匹配到文件名才能被加载。
如果启动的不是顶层目录,那么顶层目录必须单独指定。·start_dir:要测试的模块名或测试用例目录。·patern=-test*.py:表示用例文件名的匹配原则。此处匹配文件名以“test”开头的“.py”类型的文件,星号“*”表示任意多个字符。·top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,默认为None。eg:使用unittest.Testloader().discover('.')在当前目录下寻找所有符合条件的测试用例组成集合"." 代表当前目录if __name__ == "__main__": testsuite = unittest.Testloader().discover('.') unittest.TextTestRunner(verbosity=2).run(testsuite)
注意:unittest使用discover加载层级目录时,首先需要注意,存放case的子目录需为python package,即存在__init__.py文件,否则拉取不到子目录下的case