python自动化之如何利用allure生成测试报告


Posted in Python onMay 02, 2021

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

安装

安装allure

Windows用户:

  • scoop install allure    (需要先下载并安装Scoop,该方法无需配置环境变量)

MAC用户:

  • 通过Homebrew进行自动安装
  • brew install allure   (如果Homebrew版本比较旧,需要先升级Homebrew,否则安装的allure版本也很老,可能会与Python插件不兼容)

手动安装:

python自动化之如何利用allure生成测试报告

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

安装allure-pytest插件

  • pip install allure-pytest

allure常用特性

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

步骤:

  • import allure
  • 功能上加@allure.feature("功能名称")
  • 子功能上加@allure.story("子功能名称")
  • 步骤上加@allure.step("步骤细节")
  • @allure.attach("具体文本信息"),需要附加的信息,可以是数据,文本,图片,视频,网页
  • 如果只测试部分功能运行的时候可以加限制过滤:
    • pytest 文件名 --allure-features "需要运行的功能名称"

allure特性—feature/story

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

  • feature相当于一个功能,一个大的模块,将case分类到某个feature中,报告中在behaviore中显示,相当于testsuite
  • story相当于对应这个功能或者模块下的不同场景,分支功能,属于feature之下的结构,报告在features中显示,相当于testcase
  • feature与story类似于父与子关系

step特性

  • 测试过程中每个步骤,一般放在具体逻辑方法中
  • 可以放在关键步骤中,在报告中显示
  • 在app,web自动化测试中,建议每切换到一个新的页面当做一个step
  • 用法:
    • @allure.step() 只能以装饰器的形式放在类或方法上面
    • with allure.step():  可以放在测试用例方法里面,但测试步骤的代码需要被该语句包含

运行:

  在测试执行期间收集结果

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

  • --alluredir这个选项,用于指定存储测试结果的路径
  • --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

生成的报告:

python自动化之如何利用allure生成测试报告

allure特性-testcase

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

例子:

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

python自动化之如何利用allure生成测试报告

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

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

通过附加@pytest.mark标记

通过allure.feature,allure.story

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

  • 级别:
  • trivial:不重要,轻微缺陷(必输项无提示,或者提示不规范)
  • minor 不太重要,次要缺陷(界面错误与UI需求不符)
  • normal:正常问题,普通缺陷(数值计算错误)
  • critical:严重,临界缺陷(功能点缺失)
  • blocker:阻塞,中断缺陷(客户端程序无响应,无法执行下一步操作)

使用方法:

   在方法、函数和类上面加 @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

python自动化之如何利用allure生成测试报告

终极用例:

百度搜索:

#!/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 allure生成测试报告内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python ValueError: invalid literal for int() with base 10 实用解决方法
Jun 21 Python
Python基础语法(Python基础知识点)
Feb 28 Python
python基于pyDes库实现des加密的方法
Apr 29 Python
微信跳一跳辅助python代码实现
Jan 05 Python
Tornado高并发处理方法实例代码
Jan 15 Python
对python中array.sum(axis=?)的用法介绍
Jun 28 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
Aug 17 Python
基于Python获取城市近7天天气预报
Nov 26 Python
pycharm通过ssh连接远程服务器教程
Feb 12 Python
python+opencv边缘提取与各函数参数解析
Mar 09 Python
详解Python中list[::-1]的几种用法
Nov 16 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
Python time库的时间时钟处理
Django项目如何获得SSL证书与配置HTTPS
Python基础之常用库常用方法整理
Apr 30 #Python
Django 实现jwt认证的示例
Python基础之赋值,浅拷贝,深拷贝的区别
Apr 30 #Python
python绘图subplots函数使用模板的示例代码
You might like
关于文本留言本的分页代码
2006/10/09 PHP
php 设计模式之 单例模式
2008/12/19 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
PHP实现统计在线人数功能示例
2016/10/15 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
php实现文章评论系统
2019/02/18 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
python实现自动发送报警监控邮件
2018/06/21 Python
python版飞机大战代码分享
2018/11/20 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
django 环境变量配置过程详解
2019/08/06 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
建筑工程技术应届生求职信
2013/11/17 职场文书
聘任书模板
2014/03/29 职场文书
2015年学校安全工作总结
2015/04/22 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书
详解MySQL集群搭建
2021/05/26 MySQL