Unittest框架,理论和实操双管齐下(下)

发表于:2023-9-27 09:40

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

 作者:程序员小濠    来源:知乎

  十、截图操作
  用例不可能每一次运行都成功,肯定运行时候有不成功的时候。如果可以捕捉到错误,并且把错误截图保存,这将是一个非常棒的功能,也会给我们错误定位带来方便截图方法:
  driver.get_screenshot_as_file
  """
  捕捉异常截图测试
  """
  import os.path
  import time
  import unittest
  from time import sleep
  from selenium import webdriver
  class ScreeshotTest(unittest.TestCase):
      def setUp(self) -> None:
          self.driver = webdriver.Chrome()
          self.driver.get('https://www.sogou.com/')
          self.driver.maximize_window()
      def tearDown(self) -> None:
          sleep(3)
          driver = self.driver
          driver.quit()
      def test_01(self):
          driver = self.driver
          driver.find_element_by_id('query').send_keys("易烊千玺")
          driver.find_element_by_id('stb').click()
          sleep(3)
          print(driver.title)
          try:
              self.assertEqual(driver.title, u"搜狗一下你就知道", msg="不相等")
          except:
              self.saveScreenShot(driver, "shot.png")
          sleep(5)
      def saveScreenShot(self, driver, filename):
          if not os.path.exists("./imge"):
              os.makedirs("./imge")
          # 格式十分重要,小写大写敏感 %Y%m%d-%H%M%S
          now = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time()))
          driver.get_screenshot_as_file("./imge/" + now + "-" + filename)
          sleep(3)
  if __name__ == '__main__':
      unittest.main()
  十一、测试报告
  有两种测试报告:
  1、自带的测试报告
  2、生成第三方测试报告
  11.1 自带测试报告
  只有单独运行 TestCase 的代码,才会生成测试报告:
  11.2 生成第三方测试报告
  这里需要第三方的测试运行类模块,然后放在代码的目录中:
  就像这两个模块一样放进代码目录中。
  步骤:
   1. 获取第三方的 测试运行类模块 , 将其放在代码的目录中
   2. 导包 unittest
   3. 使用 套件对象, 加载对象 去添加用例方法
   4. 实例化 第三方的运行对象 并运行 套件对象
     HTMLTestRunner()
  写法一:
  import unittest
  from HTMLTestRunner import HTMLTestRunner
  suite = unittest.defaultTestLoader.discover('.', 'Uni*.py')
  file = 'report1.html'
  with open(file, 'wb') as f:
      runner = HTMLTestRunner(f, 2, '测试报告', 'python3.10')  # 运行对象
      # 运行对象执行套件, 要写在 with 的缩进中
      runner.run(suite)
  写法二:
  """
  生成测试报告
  """
  import os.path
  import sys
  import time
  import unittest
  from time import sleep
  from HTMLTestRunner import HTMLTestRunner
  def createsuite():
      discovers = unittest.defaultTestLoader.discover("./cases", pattern="cs*.py")
      print(discovers)
      return discovers
  if __name__ == '__main__':
      # 当前路径
      # sys.path 是一个路径的集合
      curpath = sys.path[0]
      print(sys.path)
      print(sys.path[0])
      # 当前路径文件resultreport不存在时,就创建一个
      if not os.path.exists(curpath+'/resultreport'):
          os.makedirs(curpath+'/resultreport')
      # 2、解决重名问题
      now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))
      print(time.time())
      print(time.localtime(time.time()))
      # 文件名是 路径 加上 文件的名称
      filename = curpath+'/resultreport/'+now+'resultreport.html'
      # 打开文件html,是用wb以写的方式打开
      with open(filename, 'wb') as f:
          runner = HTMLTestRunner(f, 2, u"测试报告", u"测试用例情况")
          suite = createsuite()
          runner.run(suite)
  这里面的当前路径也可以用 ./来表示!!!
  """
  生成测试报告
  """
  import os.path
  import sys
  import time
  import unittest
  from time import sleep
  from HTMLTestRunner import HTMLTestRunner
  def createsuite():
      discovers = unittest.defaultTestLoader.discover("./cases", pattern="cs*.py")
      print(discovers)
      return discovers
  if __name__ == '__main__':
      # 当前路径文件resultreport不存在时,就创建一个
      if not os.path.exists('./resultreport'):
          os.makedirs('./resultreport')
      # 2、解决重名问题
      # 格式十分重要 %Y-%m-%d-%H %M %S
      now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))
      print(time.time())
      print(time.localtime(time.time()))
      # 文件名是 路径 加上 文件的名称
      filename = './resultreport/'+now+'resultreport.html'
      # 打开文件html,是用wb以写的方式打开
      with open(filename, 'wb') as f:
          runner = HTMLTestRunner(f, 2, u"测试报告", u"测试用例情况")
          suite = createsuite()
          runner.run(suite)
  注意:
  实例化 第三方的运行对象,HTMLTestRunner()的初始化有多种可以自定义设置。
  HTMLTestRunner()
   1、stream=sys.stdout, 必填,测试报告的文件对象(open ), 注意点,要使用 wb 打开
   2、verbosity=1, 可选, 报告的详细程度,默认 1 简略, 2 详细
   3、title=None, 可选, 测试报告的标题
   4、description=None 可选, 描述信息, Python 的版本, pycharm 版本
  最后生成结果
  unittest框架就本上就是这些知识了,里面记得东西很多,多敲代码,形成记忆...
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号