Selenium38-报告中加入截图

把截图加入测试结果报告文件里

目标:断言失败时,生成截图文件,并该截图文件出现在最后的测试结果报告(html格式)里
步骤:

  • 第一步:在case_action里修改截图后记录的日志
    • 日志级别必须是:error
    • 日志信息格式是:screenshot:截图文件路径
 def screenshot(self):
        ……
        file_name=os.path.join(file_path,f"{cur_class}_{cur_method}_{now_time}.png")
        self.driver.save_screenshot(file_name)
        # log.info(f"截图,文件名称是{file_name}")
        log.error(f"screenshot:{file_name}")
        return file_name

  • 第二步:替换测试套件里的HTMLTestRunner1.py为HTMLTestRunner2.py
    • HTMLTestRunner2.py在原来HTMLTestRunner基础上增加了截图内容
    • 导入HTMLTestRunner2模块里的HTMLTestRunner类
from utils.HTMLTestRunner2 import HTMLTestRunner
  • 替换为HTMLTestRunner2的类来运行测试套件
  • 故意修改代码或数据制造一个断言失败,运行查看测试结果报告


suite5=unittest.defaultTestLoader.discover("..\testcase\","testcase10*.py")

消息框截图问题

  • 消息框断言失败时,弹出框已经关闭,无法截取到弹出框里的信息。

消息框截图解决方案

  • 在判断消息框是否弹出的方法is_alert_present里,一旦消息框出现,就截图保存。
    • 第一步:用例父类里封装设计get_screenshot_file_name方法,获得截图文件名称。
    • 第二步:用例父类里改造is_alert_present方法,导入ImageGrab
from PIL import ImageGrab

  • 第三步:testcase包文件中,改造测试方法,每次检查消息框内容之前,都检查消息框出现,,并且在消息框文本断言里增加第三个参数msg,设置它的值固定包含“消息框”这个字符串。

  • 第四步:用例父类里增加一个方法,获得最新截图文件

  • 第五步:用例父类里改造screenshot方法,传入msg参数,判断如果msg里包含字符串“消息框”,就不用重新截图,使用现有截图里的最新截图即可。test_case.screenshot(msg)

  • 故意把预期提示信息写错,运行调试

  • 查看测试结果报告里的截图文件

如何保留每次测试运行后生成的测试结果报告文件

目标:不要覆盖上次的测试结果报告,文件名中连接系统时间
实现方式:Selenium测试结果_年月日_时分秒.html

  • 导入time模块里的strftime函数
from time import strftime
  • 调用strftime函数生成指定格式的系统日期时间数据
current_time=strftime("_%Y%m%d_%H%M%S")#_年月日_时分秒
  • 用当前日期时间数据作为html报告文件名称中的一部分
html_file_name=f"..\\report\\Selenium测试结果{current_time}.html"

测试套件优化代码

posted @ 2022-12-29 22:13  暄总-tester  阅读(156)  评论(0)    收藏  举报