软件测试之定制unittest测试报告

发表于:2023-11-13 09:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:虫师    来源:博客园

  基于HTMLTestRunner的定制版本非常多,我这几天手动定制了一款,除了有不错的颜值,还提供了一些非常实用的功能。
  安装
  github:
  https://github.com/SeldomQA/HTMLTestRunner
  > git clone https://github.com/SeldomQA/HTMLTestRunner
  > cd HTMLTestRunner/
  > python setup.py install
  基本使用
  基本用法与大多数定制版的报告一样。
  import unittest
  from TestRunner import HTMLTestRunner
  class TestDemo(unittest.TestCase):
      """测试用例说明"""
      def test_success(self):
          """执行成功"""
          self.assertEqual(2 + 3, 5)
  if __name__ == '__main__':
      suit = unittest.TestSuite()
      suit.addTest(TestDemo("test_success"))
      report = "./result.html"
      with(open(report, 'wb')) as fp:
          runner = HTMLTestRunner(
              stream=fp,
              title='<project name>test report',
              description='describe: ... ')
          runner.run(suit)
  HTMLTestRunner类说明:
  ·stream : 指定报告的路径
  · title : 报告的标题
  · description : 报告的描述
  run()方法说明:
  · suit : 运行的测试套件
  用例失败重跑
  报告提供了用例错误/失败重跑功能。
  import unittest
  from TestRunner import HTMLTestRunner
  class TestDemo(unittest.TestCase):
      """测试用例说明"""
      def test_success(self):
          """执行成功"""
          self.assertEqual(2 + 3, 5)
      def test_fail(self):
          self.assertEqual(5, 6)
      def test_error(self):
          self.assertEqual(a, 6)
  if __name__ == '__main__':
      suit = unittest.TestSuite()
      suit.addTest(TestDemo("test_success"))
      suit.addTest(TestDemo("test_fail"))
      suit.addTest(TestDemo("test_error"))
      report = "./result.html"
      with(open(report, 'wb')) as fp:
          runner = HTMLTestRunner(stream=fp)
          runner.run(suit, rerun=2, save_last_run=False)
  run()方法说明:
  ·suit : 运行的测试套件
  · rerun :重跑次数,设置为2,会在用例失败/错误后进行两次重试。
  · save_last_run :是否保存最后一个结果
  集成发邮件功能
  如果你想用例运行完成之后发邮件,只需要填写邮箱信息即可。
  import unittest
  from TestRunner import HTMLTestRunner
  from TestRunner import SMTP
  # ...
  if __name__ == '__main__':
      suit = unittest.TestSuite()
      # ...
      report = "./result.html"
      with(open(report, 'wb')) as fp:
          runner = HTMLTestRunner(stream=fp)
          runner.run(suit)
      # 发邮件功能
      smtp = SMTP(user="user@126.com", password="123", host="smtp.126.com")
      smtp.sender(to="user@126.com", attachments=report)
  SMTP类说明:
  ·user 发送者邮箱帐号
  · password 发送者邮箱密码
  · host 邮箱服务器地址
  sender()方法说明:
  · to 接收者邮箱
  · attachments 附件
  用例运行失败自动截图
  如果你运行的是selenium/appium,那么当用例运行失败将会自动截图。
  import unittest
  from time import sleep
  from TestRunner import HTMLTestRunner
  from selenium import webdriver
  class YouTest(unittest.TestCase):
      @classmethod
      def setUpClass(cls) -> None:
          cls.driver = webdriver.Chrome()
          cls.base_url = "https://www.baidu.com"
      @classmethod
      def tearDownClass(cls) -> None:
          cls.driver.quit()
      def test_success(self):
          """测试百度搜索:HTMLTestRunner """
          self.driver.get(self.base_url)
          self.driver.find_element_by_id("kw").send_keys("HTMLTestRunner")
          self.driver.find_element_by_id("su").click()
          sleep(2)
      def test_error(self):
          """测试百度搜索,定位失败 """
          self.driver.get(self.base_url)
          self.driver.find_element_by_id("kw").send_keys("python")
          self.driver.find_element_by_id("su22").click()
          sleep(2)
      def test_fail(self):
          """测试百度搜索,断言失败 """
          self.driver.get(self.base_url)
          self.driver.find_element_by_id("kw").send_keys("unittest")
          self.driver.find_element_by_id("su").click()
          sleep(2)
          self.assertEqual(self.driver.title, "unittest")
  if __name__ == '__main__':
      suit = unittest.TestSuite()
      suit.addTest(YouTest("test_success"))
      suit.addTest(YouTest("test_error"))
      suit.addTest(YouTest("test_fail"))
      report = "./selenium_result.html"
      with(open(report, 'wb')) as fp:
          runner = HTMLTestRunner(
              stream=fp,
              title='Seldom自动化测试报告',
              description='浏览器chrome,平台windows'
          )
          runner.run(suit)
  报告中不需要实现任何截图的操作,会自动帮你生成截图并嵌入到HTML报告中。
  其他
  1. 基于jinja2开发,将要HTML代码与python代码分离。
  2. 引用了bootstrap4的模板样式库。
  3. 只支持python3.x,没有在python2下面做过测试。
  4. 其他细节优化:
    4.1. 增加了Chart环状图展示。
    4.2. 增加跳过用例统计
    4.3. 增加单个用例的运行时间统计。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号