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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 渗透方法:黑盒测试:在不知道目标内部的基本构造和内部特性的情况下进行测试白盒测试:与黑盒相反灰盒测试:介于黑白盒之间,在知道较少内部架构的情况下进行攻击渗透目标:主机操作系统渗透测试数据库系统渗透测试应用系统渗透测试网络设备渗透测试:网络通信设备、网络安全设备内网渗透测试外部渗透测试渗透七个步骤:1、前期交互确定渗透测试范围时间估计:预估整体项目的时间周期问答交谈:对企业内雇员进行问答交流(这里应该指社工)范围制定:项目起止时间、授权文件、目标规划确定测试资源:IP、域名范围、ISP、服务器所在国家(渗透需要的资源情报)目标规划确定目标业务分析与需求分析建立通信渠道紧急联系方式应急响应流程进展...
            0 0 2362
            分享
          • 随着银行主机应用的陆续下移,开放平台应用的数量和规模均呈上升趋势,应用系统性能的高低不仅影响着系统上线后的稳定运行,更关系着银行的声誉。性能测试作为应用系统上线前性能把控的最后一道关口,其重要性不言而喻。本文针对性能测试过程中的存在的问题,梳理并研究开放平台应用系统性能测试方法和技术,明确了性能测试过程重要环节的工作策略,目的在于指导性能测试工作开展,进而提升性能测试质量。1、现状分析近年来,各商业银行均组建了专业的测试团队承担性能测试工作,工作规范度日益加强,但由于银行开放平台应用系统具有规模大、交易量大、数据量大、技术架构和软件多样化、关联系统复杂等特点,性能测试工作仍存在一些问题。一是测...
            0 1 2612
            分享
          • 一、adb环境部署准备下载jdk及安卓adt1、jdk下载地址(https://www.oracle.com/java/technologies/javase-downloads.html)配置环境变量① 打开配置环境入口右键此电脑-高级系统设置-环境变量② 配置JAVA_HOME在系统变量中新增JAVA_HOME,变量值中输入jdk安装路径(C:\Program Files\Java\jdk-15.0.1 版本号及路径可能不一致,不能直接复制)③ 编辑Path在系统变量Path中新加两条:%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin(每条以英语分号隔开)④ 编辑CL...
            0 0 1266
            分享
          • 1、什么是兼容性测试?兼容性测试侧重哪些方面?兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行,即是通常说的软件的可移植性。兼容的类型,如果细分的话,有平台的兼容,网络兼容,数据库兼容,以及数据格式的兼容。兼容测试的重点是,对兼容环境的分析。通常,是在运行软件的环境不是很确定的情况下,才需要做兼容。根据软件运行的需要,或者根据需求文档,一般都能够得出用户会在什么环境下使用该软件,把这些环境整理成表单,就得出做兼容测试的兼容环境了。兼容和配置测试的区别在于,做配置测试通常不是Clean OS下做测试,而兼容测试多是在Clean OS的环境下做的。2、我现在有个程序,发现在Wi...
            12 12 826
            分享
          •   在日常的测试工作中,其中最重要的一步就是编写测试用例,那么我们如果编写一份高质量的测试用例的?选对编写测试用例的方法很重要。针对不同功能我们要选择合适的方法。比如说一个注册页面,我们该怎样设计测试用例呢?  针对这种有较多输入框且长度有限制的功能模块,我们一般采用等价类划分和边界值分析法来设计测试用例。  等价类划分  等价类划分是将所有的输入条件分为若干等价类,然后从所有等价类中抽取其中有代表意义的数据进行测试的方法。  ·有效等价类:对程序来说合理的、有意义的输入  ·无效等价类:对程序来说无效的输入  这里我们假设:  ·用户名的限制是8-16位数字和大小写字母的组合  ·手机号的限...
            11 11 2572
            分享
      • 51testing软件测试圈微信