参考:https://cloud.tencent.com/developer/section/1367592

1 unittest 框架

unittest 是 Python 的标准库,不需要进行安装。 基本的框架是这样的:

  1. import unittest
  2. #继承类,编写单元测试
  3. class calc(unittest.TestCase):
  4. #初始化函数
  5. def setUp(self):
  6. print("unittest start")
  7. #结束函数
  8. def tearDown(self):
  9. print("part of unittest end")
  10. #具体测试部分
  11. def test_add(self):
  12. result=1+1
  13. self.assertEqual(2,result)
  14. def test_minus(self):
  15. result=2-1
  16. self.assertEqual(1,result)
  17. #定义主函数
  18. def main():
  19. unittest.main()
  20. if __name__ == '__main__':
  21. main()

2 实例

3 报告

HTMLTestRunner 是一个基于 unittest 的第三方库,由 Wai Yip Tung 开发。

几乎绝大部分的 Python 第三方库都可以直接使用 pip install [package name]来安装,但HTMLTestRunner 略微有些不同。

3.1 安装 HTMLTestRunner

  1. 到 Wai Yip Tung 的个人网站(http://tungwaiyip.info/software/HTMLTestRunner.html)上下载HTMLTestRunner
  2. 将其保存到自己 Python 安装目录下的\Lib\site-packages 目录下
  3. 修改 HTMLTestRunner 文件(py 3版本)
  4. 导入库 import HTMLTestRunner 使用

修改内容:

  1. 94 行,import StringIO import io
  2. 539 行,self.outputBuffer = StringIO.StringIO()→ self.outputBuffer = io.StringIO()
  3. 642 行,if not rmap.has_key(cls): if not cls in rmap:
  4. 766 行,uo = o.decode('latin-1') uo = e
  5. 775 行,ue = e.decode('latin-1') ue = e
  6. 631 行,print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime) print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))

3.2 实例

  1. import HTMLTestRunner
  2. import unittest
  3. directory = r"[dir]"
  4. def create_suite():
  5. test_suit = unittest.TestSuite()
  6. discover = unittest.defaultTestLoader.discover(directory, pattern='*_unittest.py', top_level_dir=None)
  7. counter = 0
  8. for i in discover:
  9. counter += 1
  10. print("已发现 {} 个测试实例需要执行".format(counter))
  11. for j in i:
  12. test_suit.addTest(j)
  13. return test_suit
  14. def main():
  15. filename = "D:\\result.html"
  16. f = open(filename, 'wb')
  17. runner = HTMLTestRunner.HTMLTestRunner(stream=f, title="测试报告", description="测试实例执行清况:")
  18. runner.run(create_suite())
  19. f.close()
  20. if __name__ == '__main__':
  21. main()