• Python自带单元测试框架UnitTest,如何生成独立的测试报告?


    前言

    当我们在公司跑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

    fromseleniumimport 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中进行对现有的函数进行二次开发,不过开发比较简单,主要在于孰能生巧。

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

    下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

  • 相关阅读:
    apollo学习之:如何测试canbus模块
    Kettle安装初始化问题
    python---re
    乐得瑞推出1拖2功率分配快充线方案,支持数据传输
    3月面经:真可惜...拿了小米的offer,字节却惨挂在三面
    自学Python 57 多线程开发(七)使用 Connection对象和共享对象 Shared
    2500家门店倒闭:实体店败给电商已成定局?
    漏洞深度分析|Apache MINA SSHD反序列化漏洞
    复数go版本的下载和管理
    k8s k3s节点加入控制平面没效果
  • 原文地址:https://blog.csdn.net/2201_76100073/article/details/133133993