• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python自动化之如何利用allure生成测试报告
    POST TIME:2021-10-18 14:05

    Allure测试报告框架帮助你轻松实现”高大上”报告展示。本文通过示例演示如何从0到1集成Allure测试框架。重点展示了如何将Allure集成到已有的自动化测试工程中、以及如何实现报表的优化展示。Allure非常强大,支持多种语言多种测试框架,无论是Java/Python还是Junit/TestNG,其他语言或者框架实现的流程和本文一致,具体配置参照各语言框架规范

    安装

    安装allure

    Windows用户:

    MAC用户:

    手动安装:

    下载后解压并配置环境变量

    安装allure-pytest插件

    allure常用特性

    希望在报告中看到测试功能,子功能或场景,测试步骤,包括测试附加信息可以使用@feature,@story,@step,@attach

    步骤:

    allure特性—feature/story

    @allure.feature与@allure.store的关系

    step特性

    运行:

      在测试执行期间收集结果

      pytest [测试文件] -s -q --alluredir=./result --clean-alluredir

    查看测试报告:

      方法一:测试完成后查看实际报告,在线看报告,会直接打开默认浏览器展示当前报告

          allure serve ./result

      方法二:从结果生成报告,这是一个启动tomcat的服务,需要两个步骤

          生成报告:

              allure generate ./result -o ./report --clean   (注意:--clean用来清除之前已生成的报告)

          打开报告:

              allure open -h 127.0.0.1 -p 8883 ./report   (该方法直接生成一个tomcat服务,可远程访问)

    举个例子:

    有如下代码文件

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    """
    @author:chenshifeng
    @file:test_allure.py
    @time:2020/10/10
    """
    import allure
    import pytest
    
    
    @allure.feature('登录模块')
    class TestLogin():
        @allure.story('登录成功')
        @allure.title('登录成功标题')
        def test_login_sucess(self):
            with allure.step('步骤1:打开应用'):
                print('应用已打开')
            with allure.step('步骤2:进入登录页面'):
                print('登录页面已打开')
            with allure.step('步骤3:输入用户名和密码'):
                print('用户名和密码输入成功')
            print('登录测试用例:登录成功')
    
        @allure.story('登录成功')
        def test_login_sucess2(self):
            assert '1' == 1
            print('登录测试用例:登录成功')
    
        @allure.story('登录失败')
        def test_login_failure_a(self):
            print('登录测试用例:登录失败,用户名缺失')
    
        @allure.story('登录失败')
        def test_login_failure_b(self):
            print('登录测试用例:登录失败,密码缺失')
    
        @allure.story('登录失败')
        def test_login_failure_c(self):
            with allure.step('输入用户名'):
                print('已输入用户名')
            with allure.step('输入密码'):
                print('已输入密码')
            with allure.step('点击登录'):
                print('已点击登录')
            print('登录测试用例:登录失败,密码错误')
    
    
    @allure.feature('搜索模块')
    class TestSearch():
        def test_search1(self):
            print('搜索用例1')
    
        TEST_CASE_LINK = 'https://mirrors.huaweicloud.com/'
        @allure.testcase(TEST_CASE_LINK,'测试用例连接')
        def test_search2(self):
            print('搜索用例2')
        @allure.step('搜索步骤')
        def test_search3(self):
            print('搜索用例3')

    依次执行命令: 

      pytest test_allure.py --alluredir=./result --clean-alluredir

      allure serve ./result

    chenshifengdeMacBook-Pro:testcode chenshifeng$ pytest test_allure.py --alluredir=./result --clean-alluredir
    ============================================================================= test session starts =============================================================================
    platform darwin -- Python 3.9.0, pytest-6.1.1, py-1.9.0, pluggy-0.13.1
    rootdir: /Users/chenshifeng/MyCode/PythonCode/SFDSZL/test_pytest, configfile: pytest.ini
    plugins: allure-pytest-2.8.18
    collected 8 items                                                                                                                                                             
    
    test_allure.py .F......                                                                                                                                                 [100%]
    
    ================================================================================== FAILURES ===================================================================================
    ________________________________________________________________________ TestLogin.test_login_sucess2 _________________________________________________________________________
    
    self = test_allure.TestLogin object at 0x7fef3d5cba90>
    
        @allure.story('登录成功')
        def test_login_sucess2(self):
    >       assert '1' == 1
    E       AssertionError: assert '1' == 1
    
    test_allure.py:27: AssertionError
    =========================================================================== short test summary info ===========================================================================
    FAILED test_allure.py::TestLogin::test_login_sucess2 - AssertionError: assert '1' == 1
    ========================================================================= 1 failed, 7 passed in 0.07s =========================================================================
    chenshifengdeMacBook-Pro:testcode chenshifeng$ allure serve ./result 
    Generating report to temp directory...
    Report successfully generated to /var/folders/p0/3_7fwrvx6n3ftpfd4wjb01300000gn/T/7024790777193223986/allure-report
    Starting web server...
    2020-10-13 21:39:56.174:INFO::main: Logging initialized @6818ms to org.eclipse.jetty.util.log.StdErrLog
    Server started at http://192.168.12.100:58977/>. Press Ctrl+C> to exit

    生成的报告:

    allure特性-testcase

    关联测试用例(可以直接给测试用例的地址链接)

    例子:

    TEST_CASE_LINK = 'https://mirrors.huaweicloud.com/'
    @allure.testcase(TEST_CASE_LINK,'测试用例连接')
    def test_search(self):
        print('搜索用例')

    按重要性级别进行一定范围测试

    通常测试有P0、冒烟测试、验证上线测试。按重要性级别来执行的,比如上线要把主流程和重要模块都跑一遍,可通过以下方法解决

    通过附加@pytest.mark标记

    通过allure.feature,allure.story

    也可以通过allure.severity来附加标记

    使用方法:

       在方法、函数和类上面加 @allure.severity(allure.severity_level.TRIVIAL)

    执行:

       pytest -s -v 文件名 --allure-severities normal,critical

    举例说明:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    """
    @author:chenshifeng
    @file:test_severity.py
    @time:2020/10/11
    """
    import allure
    import pytest
    
    
    # 不加任何标记,默认normal
    def test_with_no_severity():
        pass
    
    
    # trivial:不重要,轻微缺陷(必输项无提示,或者提示不规范)
    @allure.severity(allure.severity_level.TRIVIAL)
    def test_with_trivial_severity():
        pass
    
    
    # minor 级别 不太重要,次要缺陷(界面错误与UI需求不符)
    @allure.severity(allure.severity_level.MINOR)
    def test_with_minor_severity():
        pass
    
    
    # normal:正常问题,普通缺陷(数值计算错误)
    @allure.severity(allure.severity_level.NORMAL)
    def test_with_normal_severity():
        pass
    
    
    # critical:严重,临界缺陷(功能点缺失)
    @allure.severity(allure.severity_level.CRITICAL)
    def test_with_ritical_severity():
        pass
    
    
    # blocker:阻塞,中断缺陷(客户端程序无响应,无法执行下一步操作)
    @allure.severity(allure.severity_level.BLOCKER)
    def test_with_blocker_severity():
        pass
    
    
    @allure.severity(allure.severity_level.NORMAL)
    class TestClassWithNormalSeverity(object):
    
        # 不加任何标记,默认为同class级别
        def test_inside_with_normal_severity(self):
            pass
    
        # 重新设置了critical级别
        @allure.severity(allure.severity_level.CRITICAL)
        def test_inside_with_critical_severity(self):
            pass

    执行:

    chenshifengdeMacBook-Pro:testcode chenshifeng$ pytest test_severity.py --alluredir=./result --clean-alluredir -vs
    ============================================================================= test session starts =============================================================================
    platform darwin -- Python 3.9.0, pytest-6.1.1, py-1.9.0, pluggy-0.13.1 -- /usr/local/bin/python3.9
    cachedir: .pytest_cache
    rootdir: /Users/chenshifeng/MyCode/PythonCode/SFDSZL/test_pytest, configfile: pytest.ini
    plugins: allure-pytest-2.8.18
    collected 8 items                                                                                                                                                             
    
    test_severity.py::test_with_no_severity PASSED
    test_severity.py::test_with_trivial_severity PASSED
    test_severity.py::test_with_minor_severity PASSED
    test_severity.py::test_with_normal_severity PASSED
    test_severity.py::test_with_ritical_severity PASSED
    test_severity.py::test_with_blocker_severity PASSED
    test_severity.py::TestClassWithNormalSeverity::test_inside_with_normal_severity PASSED
    test_severity.py::TestClassWithNormalSeverity::test_inside_with_critical_severity PASSED
    
    ============================================================================== 8 passed in 0.03s ==============================================================================
    chenshifengdeMacBook-Pro:testcode chenshifeng$ allure serve ./result 
    Generating report to temp directory...
    Report successfully generated to /var/folders/p0/3_7fwrvx6n3ftpfd4wjb01300000gn/T/17788207943997663035/allure-report
    Starting web server...
    2020-10-13 22:27:49.842:INFO::main: Logging initialized @6620ms to org.eclipse.jetty.util.log.StdErrLog
    Server started at http://192.168.12.100:59696/>. Press Ctrl+C> to exit

    终极用例:

    百度搜索:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    """
    @author:chenshifeng
    @file:test_baidudemo.py
    @time:2020/10/13
    """
    import pytest
    import allure
    from selenium import webdriver
    import time
    
    @allure.testcase('https://www.github.com')
    @allure.feature("百度搜索")
    @pytest.mark.parametrize('test_data1',['allure','pytest','unittest'])
    def test_steps_demo(test_data1):
        with allure.step('打开百度网页'):
            driver=webdriver.Chrome()
            driver.get('http://www.baidu.com')
            driver.maximize_window()
        with allure.step(f'输入搜索词:{test_data1}'):
            driver.find_element_by_id('kw').send_keys(test_data1)
            time.sleep(2)
            driver.find_element_by_id('su').click()
            time.sleep(2)
        with allure.step('保存图片'):
            driver.save_screenshot('./screenshot/baidu.png')
            allure.attach.file('./screenshot/baidu.png',attachment_type=allure.attachment_type.PNG)
        with allure.step('关闭浏览器'):
            driver.quit()

    执行:

    chenshifengdeMacBook-Pro:testcode chenshifeng$ pytest test_baidudemo.py --alluredir=./result --clean-alluredir -vs
    ============================================================================= test session starts =============================================================================
    platform darwin -- Python 3.9.0, pytest-6.1.1, py-1.9.0, pluggy-0.13.1 -- /usr/local/bin/python3.9
    cachedir: .pytest_cache
    rootdir: /Users/chenshifeng/MyCode/PythonCode/SFDSZL/test_pytest, configfile: pytest.ini
    plugins: allure-pytest-2.8.18
    collected 3 items                                                                                                                                                             
    
    test_baidudemo.py::test_steps_demo[allure] PASSED
    test_baidudemo.py::test_steps_demo[pytest] PASSED
    test_baidudemo.py::test_steps_demo[unittest] PASSED
    
    ============================================================================= 3 passed in 24.65s ==============================================================================
    chenshifengdeMacBook-Pro:testcode chenshifeng$ allure serve ./result 
    Generating report to temp directory...
    Report successfully generated to /var/folders/p0/3_7fwrvx6n3ftpfd4wjb01300000gn/T/18005664130273264423/allure-report
    Starting web server...
    2020-10-13 23:03:39.221:INFO::main: Logging initialized @7360ms to org.eclipse.jetty.util.log.StdErrLog
    Server started at http://192.168.12.100:60775/>. Press Ctrl+C> to exit

    报告:

    总结

    到此这篇关于python自动化之如何利用allure生成测试报告的文章就介绍到这了,更多相关python allure生成测试报告内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 详解Python自动化之文件自动化处理
    • Python自动化之批量处理工作簿和工作表
    • Python自动扫描出微信不是好友名单的方法
    • 用python自动生成日历
    • 用Python自动下载网站所有文件
    • 用Python写脚本自动评论再也不怕碰到喷子
    上一篇:python使用openpyxl库读写Excel表格的方法(增删改查操作)
    下一篇:python字符串常规操作大全
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信