Python+unittest学习笔记
-
unittest.TestCase:通过继承TestCase类,我们可以创建一个test,或者一组tests
-
unittest.TestSuite() 测试套件,使用时要将test case装载到测试套件里
-
test fixtures:setup + test case + teardown,每个test case执行的时候都会运行setUp→test_case→tearDown,因此setUp和tearDown 可以用来做环境的初始化,例如:一个有关数据操作的类,setUp放链接数据库,tearDown放关闭数据库链接
-
unittest.main():使用它可以方便的将一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行他们。执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。
-
TestLoader 测试用例加载器,其包括多个加载测试用例的方法。返回一个测试套件
-
unittest.defaultTestLoader(): 通过该类下面的discover()方法可自动根据测试目录start_dir匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover。用法如下:
discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
- addTest():方法是将测试用例添加到测试套件中,如下方,是将test_baidu模块下的BaiduTest类下的test_baidu测试用例添加到测试套件。
suite = unittest.TestSuite()
suite.addTest(test_baidu.BaiduTest('test_baidu'))
加载测试套件
-
loadTestsFromModule(self, module) 根据给定的模块实例来获取测试用例套件
-
loadTestsFromName(self, name, module=None) 根据给定的字符串来获取测试用例套件,字符串可以是模块名,测试类名,测试类中的测试方法名,或者一个可调用的是实例对象
这个实例对象返回一个测试用例或一个测试套件 -
loadTestsFromNames(self, names, module=None) 和上面功能相同,只不过接受的是字符串列表
-
loadTestsFromTestCase(self, testCaseClass) 根据给定的测试类,获取其中的所有测试方法,并返回一个测试套件
运行
- run():方法是运行测试套件的测试用例,入参为suite测试套件。
runner = unittest.TextTestRunner()
runner.run(suite)
- 所有的test case 都要以 test开头
实例:
创建测试报告
#定义一个测试套件
s=unittest.TestSuite()
#将test_api 模块放在测试套件s中
ul=unittest.TestLoader()
s.addTest(ul.loadTestsFromModule(test_api))
#测试报告
now = time.strftime('%Y_%m_%d_%H_%M_%S')
html_report_path = '/Users/xiaolongxia/PycharmProjects/api_test/HtmlTestReport' + '/' + now + '.html'
# wb:以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
fp = open(html_report_path,'wb')
runner = HTMLTestRunner(fp,title='API 测试报告')
runner.run(s)