把截图加入测试结果报告文件里
目标:断言失败时,生成截图文件,并该截图文件出现在最后的测试结果报告(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
- 第一步:用例父类里封装设计get_screenshot_file_name方法,获得截图文件名称。
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"