python模块篇08-unittest
一、unittest一些重要概念 TestCase 测试用例是测试的最小单位,它检查特定输入集合的特定响应,unittest提供一个基类TestCase,它可以用来创建测试用例。 TestSuite 测试套件是测试用例的集合,可以是一个或者多个,用来聚集需要一起执行的测试。 TestLoader TestLoader是用来加载TestCase到TestSuite中的 TestRunner 测试用例的执行者,并提供结果给用户或返回值来指示测试执行结果。 setUp: 测试用例执行前初始化工作 tearDown 测试用例执行后清理工作 def suite(): #方法1 suite = unittest.TestSuite(unittest.makeSuite(UcenterApi,\'test\')) suite = unittest.TestSuite((suite,)) #或者直接return suite #方法2 # suite = unittest.TestSuite() # suite.addTest(UcenterApi(\'test_auth\')) # suite.addTest(UcenterApi(\'test_query_by_id\')) #方法2拓展 # tests = [\'test_auth\',\'test_query_by_id\'] # suite = unittest.TestSuite(map(UcenterApi,tests)) return suite if __name__ == "__main__": now = datetime.datetime.now().strftime("%Y-%m-%d_%H%M%S") report_name = "api_result_%s.html" % now report_path = "/tmp/Test_Report" mysuite = suite() runner = unittest.TextTestRunner(verbosity=2) runner.run(mysuite) runner参数: - verbosity:更精细的输出级别 - stream:运行结果输出到文件 - failfast:如果失败停止后面的测试 二、命令行界面 运行测试 可以用命令行运行指定的测试模块、类或指定的测试方法 python -m unittest -v ucenter_api ucenter_api2 #指定多个model python -m unittest -v test_module.TestClass #指定类 python -m unittest -v ucenter_api.UcenterApi.test_auth #指定方法 支持的参数: -v , --verbose #详细输出 -b,--buffer #标准输出 -f,--failfast #在第一个错误或故障时停止测试运行 测试发现 找到指定目录下所有测试模块,只有匹配到文件名才能被加载。 python -m unittest discover -s /Users/jinlong/Desktop/daling_test -p "*_api.py" 支持的参数: -s , --start-directorydirectory #执行发现的起始目录(directory),默认是当前目录(.) -p,--pattern pattern #匹配测试文件的模式(pattern),默认是test*.py 三、跳过测试&预期失败 unittest支持跳过单个测试甚至整个测试类。此外,它支持将测试标记为“预期失败”,这是一个被破坏并将失败的测试,但不应被视为失败 TestResult 跳过测试方法 @unittest.skip(\'test skipping\') @unittest.skipIf(float(requests.__version__[0:4]) == 2.2,\'not supported in this lib version:2.2\') @unittest.skipUnless(sys.platform.startswith("Darwin"), "requires osX") def test_auth(self): pass 跳过测试类 @unittest.skip(\'class skipping\') class UcenterApi(unittest.TestCase): 预期失败 将测试标记为预期是失败的,如果测试失败则不计为失败。 @unittest.expectedFailure def test_query_by_id(self): pass 四、断言 方法 检查一下: assertEqual(a, b) a == b assertNotEqual(a, a != b assertTrue(x) bool(x) is True assertFalse(x) bool(x) is False assertIs(a, b) a is b assertIsNot(a, b) a is not b assertIsNone(x) x is None assertIsNotNone(x) x is not None assertIn(a, b) a in b assertNotIn(a, b) a not in b assertIsInstance(a, b) isinstance(a, b) assertNotIsInstance(a, b) not isinstance(a, b) 代码实例 # -*- coding: utf-8 -*- __author__ = \'jinlong\' import unittest class AssertionTest(unittest.TestCase): def setUp(self): self.test_is = "assertIs" self.test_none = None def test_assertion(self): self.assertEqual(1,1,u"参数不相等") self.assertNotEqual(1,2) self.assertTrue(True) or self.assertTrue(1==1) self.assertFalse(False) or self.assertFalse(1==2) self.assertIs(self.test_is,self.test_is) self.assertIsNone(self.test_none) self.assertIn("a","abc") self.assertNotIn("ad", "abc") self.assertIsInstance(\'str\',str) def tearDown(self): pass if __name__ == "__main__": unittest.main() 五、关于测试报告 HTMLTestRunner: HTMLTestRunner是Python标准库的unittest模块的扩展。它生成易于使用的HTML测试报告. 使用方法:将下载下来的饿HTMLTestRunner.py放到python环境的site-packages目录下,就可以引用使用了。 with open(filename,"wb") as fp: runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=\'LC_API_Result\',description=\'LC_Report\') runner.run(mysuite)
版权声明:本文为wang1001原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。