本文共 2912 字,大约阅读时间需要 9 分钟。
在开始编写测试用例之前,了解unittest模块的基础结构是必不可少的。unittest模块通过定义了一系列类来封装测试功能,包括TestCase、TestSuite、TestLoader和TestRunner等。
TestCase(测试用例):这是最基本的单元测试单元,通常由具体的测试类继承自unittest.TestCase。每个测试用例代表一个独立的测试功能或业务逻辑。
TestSuite(测试套件):一个测试套件可以包含多个测试用例(TestCase实例)。通过将各个测试用例组合在一起,可以构建一个完整的测试集,方便批量执行。
TestLoader(测试加载器):这个模块负责从指定的位置加载测试用例,并将它们组织到测试套件中。常用的加载器有defaultTestLoader和discover方法,可以自动扫描目录下所有符合条件的测试用例。
TestRunner(测试运行器):用于执行测试套件中的所有测试用例,并将结果保存到TestResult对象中。运行结果会记录每个测试用例的执行情况,包括成功与否、耗时等详细信息。
以下是一个简单的MyTest类示例,展示了如何编写基本的单元测试用例:
import unittestclass MyTest(unittest.TestCase): def setUp(self): print('22222') # 测试用例执行前打印信息 def tearDown(self): print('111') # 测试用例执行后打印信息 @classmethod def tearDownClass(cls): print('4444444') # 所有测试用例执行后打印信息 @classmethod def setUpClass(cls): print('33333') # 所有测试用例执行前打印信息 def test_a_run(self): self.assertEqual(1, 1) # 测试用例1 def test_b_run(self): self.assertEqual(2, 2) # 测试用例2 unittest模块提供了丰富的断言方法,用于验证测试结果。以下是常用的断言方法示例:
assertEqual(a, b):检查两个值是否相等assertNotEqual(a, b):检查两个值是否不等assertTrue(x):检查布尔值是否为TrueassertFalse(x):检查布尔值是否为FalseassertIsNone(x):检查对象是否为NoneassertIn(a, b):检查对象a是否在集合b中为了生成更直观的测试报告,可以使用HTMLTestRunner模块。以下是一个生成HTML格式测试报告的示例:
import HTMLTestRunnerimport unittestclass MyTest(unittest.TestCase): def setUp(self): print('22222') def test_run(self): self.assertEqual(1, 1) def test_run2(self): self.assertEqual(1, 1) def test_run3(self): self.assertEqual(1, 1) def test_run1(self): self.assertEqual(1, 1)if __name__ == '__main__': test_suite = unittest.TestSuite() test_suite.addTest(MyTest('test_run1')) fp = open('res.html', 'wb') runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='api测试报告', description='测试情况') runner.run(test_suite) 如果需要执行多个测试文件,可以使用unittest.defaultTestLoader.discover方法来自动扫描文件夹中的测试用例:
import unittestimport HTMLTestRunner# 找到当前目录下所有以'test_'开头的Python文件all_cases = unittest.defaultTestLoader.discover('.', 'test_*.py')suite = unittest.TestSuite()for case in all_cases: suite.addTests(case)fp = open('res.html', 'wb')runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='all_tests', description='所有测试情况')runner.run(suite) 在持续集成环境中,自动化测试是必不可少的。Jenkins是一个流行的持续集成工具,但它不直接支持HTML格式的测试报告。为了满足Jenkins的需求,可以使用xmlrunner模块来生成XML格式的测试报告:
import unittestimport xmlrunnerclass My(unittest.TestCase): def test1(self, a, b, c): self.assertEqual(a + b, c)if __name__ == '__main__': test_suite = unittest.TestSuite() test_suite.addTest(unittest.makeSuite(My)) runner = xmlrunner.XMLTestRunner(output='report') runner.run(test_suite)
运行上述代码后,可以在report目录下找到生成的XML测试报告。Jenkins可以通过解析这些XML文件来展示测试结果。
写一个好的技术文章,关键是要让读者能够轻松理解和跟随你的思路。如果你喜欢这篇文章,别忘了点赞和分享,让更多的开发者受益!
转载地址:http://nhofk.baihongyu.com/