生成漂亮的测试报告—全栈软件测试自动化(4)

发表于:2020-6-28 14:30

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

 作者:赵旭斌 余杰    来源:51Testing软件测试网原创

  1.2.3  生成漂亮的测试报告
  终于到了展示测试报告的环节了,下面我们学习使用HTMLTestRunner制作一张精美的HTML格式的测试报告。需要先下载HTMLTestRunner这个py文件,读者可以自行上网搜索。另外,为了后续方便使用,请确保此文件存放在测试脚本的同级目录中。
  接下来我们所要做的事情非常简单,只需要把之前代码中的runner = unittest.TextTestRunner()替换成下面这段代码。
   import HTMLTestRunner
      report_file = file('demo.html', 'wb')
      runner = HTMLTestRunner.HTMLTestRunner(
          stream = report_file,
          title = 'My first demo',
          description = 'My demo description'
      )
   这样就完成了HTML测试报告的整合了。下面对代码进行分析。
  首先,import HTMLTestRunner这个语句比较容易理解,即在调用模块之前需要导入HTMLTestRunner。而这个模块就是之前已经下载好并放入同级目录的HTMLTestRunner。然后,我们会看到如下代码。
 report_file = file('demo.html', 'wb')
  它的含义是创建一个HTML文件并命名为demo.html,wb则表示以二进制的方式写入。
  以下代码是使用HTMLTestRunner创建测试报告最核心、最关键的部分。
   runner = HTMLTestRunner.HTMLTestRunner(
      stream = report_file,
      title='My first demo',
      description='My demo description'
  )
   这里实例化了HTMLTestRunner模块下的HTMLTestRunner类。在实例化此类时,通常传入的参数是stream、title及description。第一个参数stream是文件流,此处只需要传入之前创建好的report_file文件对象即可;第二个参数title是报告的标题,用户可以设置任何自己想要的标题;第三个参数description是为报告写下的简单描述。
  最后,调用runner对象的run方法并传入先前创建好的测试集对象。代码如下。
 runner.run(data_driven_suite())
  把data_driven_suite这个函数所返回的测试集对象传入runner.run方法中,这样就完成了一张精美的HTML测试报告。下面给出完整的代码。
   import unittest
  from selenium import webdriver

  class BookFlight(unittest.TestCase): 
      def __init__(self,username,password): 
           unittest.TestCase.__init__(self, methodName='test_login') 
           self.username = username
           self.password = password

      def setUp(self): 
           self.driver = webdriver.Firefox()

      def test_login(self): 
           driver = self.driver
           driver.get("Mercury Tours登录页面")
           assert "Mercury Tours" in driver.title
           username_edit = driver.find_element_by_name("userName")
           password_edit = driver.find_element_by_name("password")
           login_button = driver.find_element_by_name("login")
           username_edit.send_keys(self.username) 
           password_edit.send_keys(self.password) 
           login_button.click()
           assert "Find a Flight" in driver.title, "\n==>
            username:{0}\n==> password:{1}". \
            format(self.username,self.password) 

      def tearDown(self): 
           self.driver.close()


  if __name__ == "__main__":
      def data_driven_suite():
           data_repositories = [
           {'usr':'mercury','pwd':'mercury'},
           {'usr':'mercury1','pwd':'mercury'},
           {'usr':'mercury2','pwd':'mercury'},
           ] 

          tests = []
          for data in data_repositories: 
              tests.append(BookFlight(data['usr'],data['pwd'])) 
          return unittest.TestSuite(tests) 

      import HTMLTestRunner

      report_file = file('demo.html', 'wb') 
      runner = HTMLTestRunner.HTMLTestRunner(
           stream=report_file, 
           title='My first demo', 
           description='My demo description'
           ) 

      runner.run(data_driven_suite())

  生成的HTML测试报告如图1.18所示。
  图1.18  完美的测试报告
  从图1.18中可以看出,就像我们预期的那样,一共有3组数据,只有一组通过(pass)测试,另外两组都失败(fail)了。
  关于测试报告中的各个关键元素,说明如下:标题是My first demo;Start Time是脚本运行的开始时间;Duration是测试执行的持续时间;Status是脚本运行结果的总状态,即多少个用例成功,多少个用例失败。
  这里还有一个过滤功能,用户既可以查看所有用例的执行结果,也可以只查看局部用例,如那些运行失败的用例。
  1.3  本章小结
  本章开篇引用了一个经典的实例,是为了让读者可以更快上手Selenium,快速了解它的精华内容。如果能掌握这一章的内容,就可以编写一些简单的自动化测试脚本了。尤其是对于那些要借助数据驱动的自动化测试用例,完全可以套用本章的模板,非常有效。

查看《全栈软件测试自动化 Selenium和Appium (Python版)》全部连载章节
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号