有图有真相!2种方法在测试报告中自动添加失败截图

708 篇文章 25 订阅
646 篇文章 0 订阅

当我们在公司跑UI自动化的时候,一般都会选择晚上或者工作日休息时进行运行。那么当程序这时运行,如果自动化出现错误,我们又不知道当时页面是什么原因导致测试用例失败,怎么办?

这个时候我们就想到在其测试用例失败的时候,进行自动截图当时图片,然后保存下来,这样当测试人员后面查看测试报告时,就可以很清楚的看到当时错误内容,然后排查测试用例失败的原因。

今天小编就介绍几种在自动化测试报告中增加测试用例失败的截图的方法,这里小编运用了UI自动化测试中常用的两种单元测试框架,进行为其增加在测试报告中增加其失败截图。

UnitTest

UnitTest属于早期的Python的单元测试,其功能虽然没有Pytest强大,但也能符合并满足我们当时的功能需求,UnitTest属于Python自带的单元测试框架,类似于Java的JUnit。

UnitTest支持编写测试自动化用例,多个用例中共享一个前置和后置内容,有多种执行测试用例的方法,支持生成独立的测试报告内容。

具体详情可以了解官方文档:https://docs.python.org/2/library/unittest.html

UnitTest生成的测试报告常见的有HTMLTestrunner,这个是属于Python的一个标准库,需要下载,下载完成后使用时候,直接进行调用即可。

HTMLTestrunner支持截图功能,需要二次开发,具体开发内容小编就不做太多介绍,小编从网上下载一个开源的HTMLTestrunner,存放在我们的测试路径下,接下来就直接使用代码进行调用:

# coding:utf-8
import unittest
import HTMLTestRunner_cn
from selenium import webdriver
class Test(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

    def test_01(self):
        """定位失败截图案例"""
        self.driver.get("https://www.baidu.com")
        self.driver.find_element_by_id('anjing').send_keys('百度一下')
        self.driver.find_element_by_id('su').click()
        self.assertTrue(True)
    def test_02(self):
        """成功案例"""
        self.driver.get("https://www.baidu.com")
        self.assertIn("百度一下,你就知道", self.driver.title)
if __name__ == "__main__":
    testunit = unittest.TestSuite()
    # 加载用例
    testunit.addTests(unittest.TestLoader().loadTestsFromTestCase(Test))
    # 执行用例
    runner = HTMLTestRunner_cn.HTMLTestRunner(title="自动化测试报告",
                                            description="测试结果",
                                            stream=open("result.html", "wb"),
                                            )
    runner.run(testunit)

代码编写完成后,直接进行执行程序,执行完成后,就会发现我们测试报告已经生成了,直接打开就可以看到自动化测试结果,失败的存在截图信息。

 Pytest

Pytest是一个使创建简单及可扩展性测试用例变得非常方便的框架,测试用例清晰、易读而无需大量的繁琐代码。

只要几分钟你就可以对你的应用程序或者库展开一个小型的单元测试或者复杂的功能测试。Pytest支持第三方插件,灵活性较高。

这里小编通过Pytest生成的Allure报告中添加测试报告内容。其中Allure属于一种开源的测试框架,可以基于多种语言进行使用,如Java的JUnit、Python的Pytest。

alluer生成的报告内容比较美观,目前测试中常用的测试报告。Allure的环境是基于Java环境的,前提条件需要将Java的环境安装完成(下载JDK,配置环境变量)。

下载地址:https://github.com/allure-framework/allure2 (具体安装不在过多介绍)。

我们需要在conftest.py文件中去收集Pytest测试用例中失败的结果,小编这里选择用pytest_runtest_makereport函数来帮忙实现。

# conftest.py
from selenium import webdriver
import pytest
import time
import allure
te = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    # 获取钩子方法的调用结果
    outcome = yield
    rep = outcome.get_result()
    # 仅仅获取用例call 执行结果是失败的情况
    if rep.when == "call" and rep.failed:
        # 添加allure报告截图
        with allure.step('失败截图:'):
            # 将截图添加到报告中,图片名称已当前时间。
            allure.attach(d.get_screenshot_as_png(), name= te,
                      attachment_type=allure.attachment_type.PNG)

# 配置浏览器驱动,不显示浏览器执行过程                    
@pytest.fixture(scope="session")
def driver():
    global d
    options = webdriver.ChromeOptions()
    options.add_argument("--headless")
    d = webdriver.Chrome(options=options)
    yield d
    d.quit()

编写两个简单的测试用例,一个测试用例失败,一个测试用例成功。

# coding:utf-8
def test_01(driver):
    # 失败案例
    driver.get('https://www.baidu.com/')
    driver.find_element_by_id('kw').send_keys('51testing软件测试网')
    t = driver.title
    assert  t == '51testing软件测试网'
    
def test_02(driver):
    # 成功案例
    driver.get('https://www.baidu.com/')
    driver.find_element_by_id('kw').send_keys('安静')
    t = driver.title
    assert t == '百度一下,你就知道'

然后运行Pytest并且生成Allure报告,查看到Allure报告中,已经将对应的失败截图已经添加到其中了。

总结

小编分别通过UnitTest和Pytest在测试用例中增加对应的失败截图功能,其中关于UnitTest比较简单,直接在网上查找对应的Htmltestrunner报告就可以了。

但是在Allure报告中添加失败截图,需要在conftest.py中进行对现有的函数进行二次开发,不过开发比较简单,主要在于孰能生巧。

当然具体怎么在对应项目中使用,这个就要看小伙伴们的操作了。感谢您的阅读,希望本篇文章对您有所帮助。

最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取保100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值