• 0
  • 0
分享
  • 有图有真相!2种方法在测试报告中自动添加失败截图——软件测试圈
  • 曼倩诙谐 2023-08-29 13:27:48 字数 3811 阅读 1545 收藏 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)

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

1-1.png

  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报告中,已经将对应的失败截图已经添加到其中了。

1-2.png

  总结

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

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

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


作者:测试安静    

来源:http://www.51testing.com/html/11/n-7797511.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   Bug报告是测试的重点,无论是口头的还是书面的,都是测试最明显的结果。  报告的质量可能是决定测试人员可信度的最重要的因素,一份好的Bug报告不仅可以体现测试人员的专业度,还可以方便开发人员或其他相关人员快速获取Bug相关信息,有助于对Bug的重要程度进行评估和快速修复。  什么是Bug  通俗意义上讲,Bug就是影响产品正常使用或者友好使用,且对产品价值产生影响的缺陷。  Bug可以分为两种:正常Bug和增强需求型Bug。  正常的Bug指的是产品未能实现自身功能;而增强需求型Bug是当你认为需求本身应该改进或优化时产生的问题。  换句话说,“产品没有按照你的期望运行”是一个常见的Bug...
            13 13 1740
            分享
          •   1 背景  随着开源社区和云计算的快速推进,云原生微服务作为新型应用系统的核心架构,得到了越来越广泛的应用。根据 Gartner 对微服务的定义:“微服务是范围狭窄、封装紧密、松散耦合、可独立部署且可独立伸缩的应用程序组件。”微服务之父,马丁.福勒,对微服务概述如下:就目前而言,对于微服务业界并没有一个统一的、标准的定义。但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在自己独立的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API )。每...
            0 0 1190
            分享
          •   据报道,谷歌之前一直在为“Z世代”(1995至2009年出生的)用户开发一款人工智能移动聊天机器人应用,并在其中配以互动数字角色。  但资料显示,该公司最近在内部重组中将该项目“降级”。通常而言,当谷歌对某个产品降级后,相关工作就会暂停。  这款应用在内部被称作“Bubble Characters”,它会提供多个数字对话角色供用户选择,方便“Z世代”与之交流。该公司自2021年第四季度以来就一直在开发这个项目。谷歌拒绝对此置评。  该应用的描述显示,它将可以进行“类人”对话,并“采取行动”,“对Z世代很有吸引力”。相关对话均由大语言模型支持,这类模型可以通过海量数据集来理解和生成与人类相似...
            0 0 503
            分享
          •   1. 什么是死锁?  当多个进程 在运行过程中 因为争夺资源 而造成的一种僵局, 当进程处于这种僵持状态的时候, 若无外力作用, 它们将永远无法向前推进. 这种状态就称为死锁。  2. 产生死锁的必要条件  产生死锁总共有 4 个必要条件:  ·资源互斥: 当一个资源被一个进程使用时候, 其他继承不能使用该资源  · 资源不可剥夺: 进程已持有的资源在使用完之前是不可被剥夺的, 只能在使用完后由自己释放  · 请求和保持: 当进程在请求其他资源的时候, 对自己已持有的资源保持不放  · 循环等待: 即存在一个等待队列: 例如: A 占有 B 的资源, B 占有...
            0 0 449
            分享
          • 参与《2022软件测试行业现状调查报告》读后感征文活动,领测试微课好礼。1、引言关于软件测试行业报告,对我来说,每年都会去关注, 这个习惯也保持了好些年。 而在人工智能领域爆发式增长的当前, 这无疑给软件测试行业增加了一份筹码。 同时,也希望通过软件测试行业的报告,来分析当前,规划未来。所以,借着51Testing的这次《2022软件测试行业现状调查报告》,我也来聊一聊自己的一些想法与感受。2、整体感受在《2022软件测试行业现状调查报告》中,可以体现出,51Testing调查报告的内容覆盖广泛,覆盖行业全面,覆盖技能全面....当然,这份76页的报告中,我也是花费了20多...
            1 0 1243
            分享
      • 51testing软件测试圈微信