基于Pytest+Allure+Excel的接口自动化测试框架

2023-11-03

1. Allure 简介

简介

Allure 框架是一个灵活的、轻量级的、支持多语言的测试报告工具,它不仅以 Web 的方式展示了简介的测试结果,而且允许参与开发过程的每个人可以从日常执行的测试中,最大限度地提取有用信息。

Allure 是由 Java 语言开发的,支持 Pytest,JaveScript、PHP、Ruby 等。

从 DEV/QA 的角度来看,Allure 提供了详尽的测试报告,比如简化了常见缺陷的统计;失败的测试可以分为 bug 和被中断的测试;还可以配置日志、步骤、fixture、附件、计时、执行历史;以及与 TMS、BUG 管理系统、Jenkins 集成等。所以,通过以上配置,所有负责的开发人员和测试人员可以尽可能地掌握测试信息。
从管理者的角度来看,Allure 提供了一个清晰的“大图”,即 High Level 的统计报告,其中包括已覆盖的特性、缺陷聚集的位置、执行时间轴的外观以及许多其他方便的事情。Allure 的模块化和可扩展性保证了你总是能够对某些东西进行微调,使得 Allure 更适合你。
那么下面就来说说如何使报告更加详细的显示我们需要的信息,以及 Allure 与 Jenkins 的集成。

安装

(Windows/Mac 通用安装方法)

下载地址:https://github.com/allure-framework/allure2/releases,下载所需版本的 zip 包。

安装:

  1. 解压 —> 进入 bin 目录 —> 运行 allure.bat
  2. 把 bin 目录加入 Path 环境变量
  3. 配合 pytest,使用 allure2 生成更加精美的测试报告:pip install allure-pytest

运行方法

在测试执行期间收集结果

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

-s:表示将执行成功的案例日志打印出来
-q:若跟文件执行路径则代表只需要执行的文件
--alluredir:指定存储测试结果的路径(若目录不存在则会新建)
--clean-alluredir:清除历史结果数据

查看测试报告

方式一:用于在本地渲染后对外展示结果

allure serve ./result/
方式二:用于在本地渲染和查看结果

# 生成报告
allure generate ./result/ -o ./report/ --clean  # 注意:覆盖路径加 --clean

# 打开报告
allure open -h 127.0.0.1 -p 8883 ./report/
注意:/report/ 目录中的 index.html 就是最终的结果页面,但直接通过浏览器打开这个文件是看不到实际报告内容的,这是因为实际报告内容需要 allure 进行渲染后才能看到。

2. Allure 常用特性

场景:

  • 希望在报告中看到测试功能,子功能或场景,测试步骤,包括测试附加信息。

解决:

import allure
@allure.feature('功能名称')
@allure.story('子功能名称')
@allure.title('测试用例名称')
@allure.step('步骤细节')
@allure.description('测试用例描述')
@allure.attach('具体文本信息'):需要附加的信息,可以是数据,文本,图片,视频,网页
如果只测试登录功能运行的时候可以加限制过滤,如:pytest 文件名 --allure_features '购物车功能' --allure_stories '加入购物车'

@alllure.feature() 与 @allure.store() 的关系

feature 相当于一个大的功能或模块。将 case 分类到某个 feature 中,并在报告中的 behaviors 中显示,相当于 testsuite。

story 相当于分支功能/模块,属于 feature 之下的结构,并在报告中的 features 中显示,相当于 testcase。

feature 与 story 类似于父子关系。

@allure.step() 与 with allure.step() 的区别

测试过程中每个步骤,一般放在具体逻辑方法中。

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

给测试用例划分优先级

场景:

通常测试有冒烟测试、回归测试、线上验证测试等,那么就需要按照重要性级别来分别执行,比如上线时要把主流程和重要模块都跑一遍。

解决:

通过附加 pytest.mark 标记描述
通过 allure.feature、allure.story 标记描述
通过 allure.severity 直接标记用例级别
根据测试用例的重要性划分测试用例等级,如果没指定等级,默认为 NORMAL 级别:

BLOCKER:阻塞缺陷(功能未实现,无法下一步)
CRITICAL:严重缺陷(功能点缺失)
NORMAL:一般缺陷(边界情况,格式错误)
MINOR:次要缺陷(界面错误与ui需求不符)
TRIVIAL:轻微缺陷(必须项无提示,或者提示不规范)
步骤: 

在方法、函数和类上面加:@allure.severity(allure.severity_level.TRIVIAL)
指定执行对应级别的用例:pytest -s -v 文件名 --allure-severities normal, critical

给 Allure 测试报告添加内容(图片、附件、文本、截图、HTML 等)

场景:

前端自动化测试经常需要附加图片或 html,比如在适当的地方、适当的时机截图等。
解决:

@allure.attach() 显示许多不同类型的提供的附件,可以补充测试、步骤或测试结果。
步骤:

在测试报告里附加网页:
格式:allure.attach(body(内容), name, attachment_typeextension)
示例:allure.attach('<head>/head><body>首页</body>', '这是错误页的结果信息', allure.attachment_type.HTML)
在测试报告里附加图片:
格式:allure.attach.file(source, name, attachment_type, extension)
示例:allure.attach.file("./result/b.png", attachment_type=allure.attachment_type.PNG)

集成测试管理系统

@allure.link()、@allure.issue()、@allure.testcase() 主要是为了将 Allure 报告和测试管理系统集成,可以更快速地跳转到公司内部地址。

先看看三个装饰器的源码:

def link(url, link_type=LinkType.LINK, name=None):
    return safely(plugin_manager.hook.decorate_as_link(url=url, link_type=link_type, name=name))
 
def issue(url, name=None):
    return link(url, link_type=LinkType.ISSUE, name=name)
 
def testcase(url, name=None):
    return link(url, link_type=LinkType.TEST_CASE, name=name)

小结

issue() 和 testcase() 其实调用的也是 link(),只是 link_type 不一样。
必传参数 url:跳转的链接。
可选参数 name:显示在 Allure 报告的名字,如果不传就是显示完整的链接(建议传,不然可读性不高)。
可以理解成:三个方法是一样的,我们都提供跳转链接和名字,只是链接的 type 不一样,最终显示出来的样式不一样而已(type 不一样,样式不一样)。
如果你喜欢,只用 @allure.link() 也可以。
而出现三个装饰器的原因是为了更好地将链接进行分类(访问链接、Bug 链接、测试用例链接)。

代码示例

import allure
 
TEST_CASE_LINK = 'https://github.com/qameta/allure-integrations/issues/8#issuecomment-268313637'
 
@allure.link('https://www.youtube.com/watch?v=4YYzUTYZRMU')
def test_with_link():
    pass
 
@allure.link('https://www.youtube.com/watch?v=Su5p2TqZxKU', name='点击我看一看youtube吧')
def test_with_named_link():
    pass
 
@allure.issue('140', 'bug issue链接')
def test_with_issue_link():
    pass
 
@allure.testcase(TEST_CASE_LINK, '测试用例地址')
def test_with_testcase_link():
    pass

运行结果,查看 Allure 报告

1)@allure.link() 不传 name 参数时的样式

3. 接口自动化测试框架示例

完整工程:GitHub - juno3550/InterfaceAutoTestWithPytest: 接口自动化测试框架:Pytest+Allure+Excel数据驱动

测试方法示例

 1 import pytest
 2 import allure
 3 import logging
 4 from util.assert_util import assert_keyword
 5 from util.request_util import api_request
 6 from util.global_var import *
 7 from util.excel_util import excel_util
 8 
 9 
10 register_test_data = excel_util.get_sheet_data("注册")
11 login_test_data = excel_util.get_sheet_data("登录")
12 
13 
14 @allure.feature("登录模块")
15 @pytest.mark.dependency(name="TestLoginModule")
16 class TestLoginModule:
17         
18     @allure.story("注册功能")
19     @allure.title('用户注册')  # 指定测试用例标题,默认是函数名
20     @allure.description('通过接口进行用户注册')  # 添加测试用例描述
21     @allure.severity(allure.severity_level.BLOCKER)  # 阻塞级别
22     @pytest.mark.run(order=1)
23     @pytest.mark.parametrize('case_data', register_test_data)
24     def test_register(self, case_data):
25         with allure.step("读取请求数据,调用接口"):
26             logging.info("接口用例数据:%s" % case_data)
27             response = api_request(case_data[API_IP], case_data[API_URI], case_data[REQUEST_METHOD],
28                                    case_data[API_REQUEST_DATA], case_data[RESPONSE_EXTRACT_VAR],
29                                    case_data[REQUEST_HEADER], case_data[REQUEST_COOKIE])
30         with allure.step("获取响应数据,进行断言"):
31             assert_keyword(response, case_data[RESPONSE_ASSERT_KEYWORD])
32 
33     @allure.story("登录功能")
34     @allure.title('用户登录')  # 指定测试用例标题,默认是函数名
35     @allure.description('通过接口进行用户登录')  # 添加测试用例描述
36     @allure.severity(allure.severity_level.BLOCKER)  # 阻塞级别
37     @pytest.mark.run(order=2)
38     @pytest.mark.parametrize('case_data', login_test_data)
39     def test_login(self, case_data):
40         with allure.step("读取请求数据,调用接口"):
41             logging.info("接口用例数据:%s" % case_data)
42             response = api_request(case_data[API_IP], case_data[API_URI], case_data[REQUEST_METHOD],
43                                    case_data[API_REQUEST_DATA], case_data[RESPONSE_EXTRACT_VAR],
44                                    case_data[REQUEST_HEADER], case_data[REQUEST_COOKIE])
45         with allure.step("获取响应数据,进行断言"):
46             assert_keyword(response, case_data[RESPONSE_ASSERT_KEYWORD])
47 
48 
49 if __name__ == "__main__":
50     test_dir = os.path.dirname(__file__)
51     pytest.main(['-s', '-q', test_dir, '--alluredir', '../test_result/', "--clean-alluredir"])
52     os.system('allure generate ../test_result/ -o ../test_report/ --clean')
53     os.system('allure open -h 127.0.0.1 -p 8881 ../test_report/')

测试数据示例

Allure 报告结果示例

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!   

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Pytest+Allure+Excel的接口自动化测试框架 的相关文章

随机推荐

  • 峡谷之巅显示服务器更新,峡谷之巅更新最新资讯

    英雄联盟峡谷之巅第七赛季之前就结束了 目前这次赛季的结算奖励马上就要发放了 很多玩家还不清楚在哪领取 下面就来为大家详细的介绍一下领取地址 英雄联盟峡谷之巅第六赛季的奖励正式的公布了 这次只要排位赛胜场最多的2000名玩家就可以领取到奥术师
  • SpringMVC 中整合JSON、XML视图一

    原文地址 http blog csdn net ibm hoojo article details 6371647 SpringMVC中整合了JSON XML的视图 可以通过这些视图完成Java对象到XML JSON的转换 转换XML提供了
  • nrm安装后报错 require() of ES modules is not supported.

    报错如下 根据路径打开cli js文件 第九行使用 open 的是CommonJs 规范的包 现在 open v9 0 0 是 ES Module 版本的包 解决方法 npm install g nrm open 8 4 2 save
  • Java中的NIO和IO的比较

    java标准的I O中 提供了基于流的I O实现 即InputStream和OutputStream 这种基于流的实现以字节为单位处理数据 NIO在java 1 4中被纳入到了JDK中 与旧式的的基于流的I O相比 NIO是基于块的 以块为
  • java案例4:银行存取款的程序设计

    银行存取款的程序设计 用户在银行进行存款 取款 查询余额 编写一个账户类实现银行账户的概念 创建账户类的对象ba 假设账号为123456 初始余额为500元 实现向该账户存入1000元 再取出800元 分析 1 定义一个银行账户类 实现账户
  • Docker打包Springboot及查看日志的方法

    查看Docker容器中的日志信息 docker logs 容器名称 docker logs mynginx 打印容器中的日志信息并形成文件 docker logs mynginx cat 1 gt home myngnx log 进入容器操
  • 书写SQL必养成的好习惯

    前言 每一个好习惯都是一笔财富 本文分SQL后悔药 SQL性能优化 SQL规范优雅三个方向 分享写SQL的21个好习惯 1 写完SQL先explain查看执行计划 SQL性能优化 日常开发写SQL的时候 尽量养成这个好习惯呀 写完SQL后
  • 牛客刷题错题(二)——测试知识

    1 风险暴露又称风险曝光度 测量的是资产的整个安全性风险 某公司软件团队计划项目中采用20个可复用的构件 每个构件平均是100LOC Line of Code 源代码行数 本地每个LOC的成本是150元人民币 下面是该团队定义的一个项目风险
  • 印象笔记出现感叹号无法同步

    印象笔记出现感叹号无法同步 打开ie浏览器试试 我估计应该是和安全证书有关系 勾选客户端验证 点击局域网设置 勾选自动检测设置
  • 【多模态】20、OVR-CNN

    文章目录 一 背景 二 方法 2 1 学习 视觉 语义 空间 2 2 学习开放词汇目标检测 三 效果 论文 Open Vocabulary Object Detection Using Captions 代码 https github co
  • Java学习——面向对象编程思想

    目录 一 基本概念 二 面向对象与面向过程的区别 三 面向对象程序设计的类与对象 3 1 对象 3 2 类 四 面向对象的四大特征 4 1 抽象 4 2 继承 4 3 封装 4 4 多态 1 实现多态性的三种方式 2 重载 3 重写 4 接
  • JS 作用域,闭包,this

    作用域 闭包 this 3 1 面试题 1 this 的不同应用场景 如何取值 2 手写 bind 函数 3 实际开发中闭包的应用场景 举例说明 4 程序题 打印输出 for var i 0 i lt 10 i 1 setTimeout g
  • IO复用之select、poll、epoll

    select poll epoll区别 select poll epoll https www cnblogs com aspirant p 9166944 html select poll epoll整理 https www cnblog
  • picgo配置错误的记录,提示StatusCodeError:403 -<?xml version=xxxxxxxx>

    1 配置的时候 总是提示StatusCodeError 403
  • 自动化Ansible常见命令

    举个例子备份Cisco交换机配置 查看CPU 占用率的统计信息 display cpu usage 查看内存的使用状态 display memory usage 查看电源的工作状态 display power 查看接口是否工作在正常状态 d
  • Git windows环境下的安装

    一 下载地址 https git scm com download win 下载符合自己系统的版本 二 安装 注意安装在英文无空格的路径下 点击下载好的文件 1 选择安装选项 默认就好 点击next 2 安装完成后桌面鼠标右键出现git选项
  • 使用Element-UI的DateTimePicker组件报错:Cannot read property 'getHours' of undefined

    在使用 Element UI 的 DateTimePicker 组件时报错 TypeError Cannot read property getHours of undefined 具体错误如下 TypeError Cannot read
  • Python: 删除已安装的模块或包 及 python工具pip的安装和使用

    Python 删除已安装的模块或包 modules or packages 王志 新浪博客 http blog sina com cn s blog 4ddef8f80102v1p8 html 方法一 使用pip 安装pip wget ht
  • MakeItTalk: 让图像开口说话!

    点击上方 机器学习与生成对抗网络 关注 星标 获取有趣 好玩的前沿干货 文自 机器之心 参与 魔王 未经授权 不得二次转载 不仅让真人图像开口说话 油画 素描 漫画等都能动起来 给出一张面部图像和一段音频 能做什么 AI 有办法 比如让图像
  • 基于Pytest+Allure+Excel的接口自动化测试框架

    1 Allure 简介 简介 Allure 框架是一个灵活的 轻量级的 支持多语言的测试报告工具 它不仅以 Web 的方式展示了简介的测试结果 而且允许参与开发过程的每个人可以从日常执行的测试中 最大限度地提取有用信息 Allure 是由