接口自动化测试框架实战(Pytest+Allure+Excel)

🍅 视频学习:文末有免费的配套视频可观看

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

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:轻微缺陷(必须项无提示,或者提示不规范)

步骤: 

  1. 在方法、函数和类上面加:@allure.severity(allure.severity_level.TRIVIAL)
  2. 指定执行对应级别的用例: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 allureTEST_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 报告

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

完整工程:https://github.com/juno3550/InterfaceAutoTestWithPytest

测试方法示例

 1 import pytest2 import allure3 import logging4 from util.assert_util import assert_keyword5 from util.request_util import api_request6 from util.global_var import *7 from util.excel_util import excel_util8 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 报告结果示例

同时,在这我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看就行,希望对你有所帮助。

【2024最新版】Python自动化测试15天从入门到精通,10个项目实战,允许白嫖。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

凡人修仙传单机版的激活码

谁有凡人修仙传单机版的激活码&#xff0c;急 首页 用户 合伙人 商城 法律 手机答题 我的 谁有凡人修仙传单机版的激活码&#xff0c;急 能玩就行&#xff0c;有的请留下QQ号码&#xff0c;我们私聊&#xff0c;感激不尽。 分享 举报 2个回答#热议# 不吃早饭真的会得胆结石吗&a…

项目开发 TCP-Socket连接功能实现(Android端)

前段时间在公司做项目的时候遇到了一个功能需要使用TCP-Socket连接硬件设备进行通信&#xff0c;查了很多资料也只是关于HTTP-Socket相关的&#xff0c;没法满足项目的要求&#xff0c;后来查到一个相关的插件&#xff0c;现在有时间和大家分享一下。 项目简单介绍&#xff1a…

如何在Windows 11中修复Wi-Fi的常见问题?这里有详细步骤

序言 如今,每个人都需要互联网,所以Wi-Fi瘫痪可能会引起恐慌。然而,永远不要害怕,因为有很多久经考验的方法可以让Wi-Fi重新上线!Windows 11中Wi-Fi最常见的问题也有常见的解决方案。 当你的Windows 11 Wi-Fi不工作时该怎么办 如果你注意到你的电脑没有连接到互联网,这…

关于Vue组件间通信会问到哪些面试题?

在Vue面试中&#xff0c;关于组件间通信的问题是非常常见的。以下是一些可能会问到的面试题&#xff1a; Vue组件间通信的基本方式有哪些&#xff1f; 父向子传&#xff1a; 子组件通过props接收父组件传递的数据。子组件可以直接通过this.$parent.xxx使用父组件的数据&#x…

使用MoA(Mixture of Agents)混合智能体技术,结合多个开源大语言模型如Llama3、phi-3和Mistral,实现一个强大的AI智能体

1.简介 论文简介: 论文提出了一种称为混合智能体(Mixture-of-Agents,MoA)的方法,利用多个大语言模型(LLM)的集体智慧来提高自然语言理解和生成任务的性能。 MoA采用了分层结构,每一层包含多个LLM智能体。每个智能体都将前一层所有智能体的输出作为辅助信息来生成自己的回答。通…

2024C#面试真题:单向链表的查询、插入

一、题目 面试题&#xff1a;C#编程实现以下要求(不允许用封装方法&#xff0c;需要自己构建)&#xff1a; 1. 依照数据&#xff0c;实现Student类 2. 实现单向链表类 类方法&#xff1a; 1) Student Get(int id); 根据学号查询&#xff0c;参数为int regID, 返回为Student对…

Java日常探秘-从小疑问到实践智慧的编程之旅(2)

文章目录 前言一、常见错误400错误401错误404错误MismatchedInputExceptionMybatis的NumberFormatExceptionMybatis的Available parameters are [collection,list]]报错Mybatis之Double类型的字段的值为0.0传入不了sql中 二、SQL效率数据库字段类型和传入参数类型不匹配小表驱动…

【手撕代码】握手机制

文章目录 为什么要握手握手信号无非3种可能 怎样实现握手案例一&#xff1a;数据反压 参考链接 为什么要握手 跨时钟域处理&#xff1a; 握手信号法其实也用到了脉冲展宽的方法&#xff0c;只是展宽信号的变化条件不同。因为如果不对脉冲进行展宽&#xff0c;慢速时钟域的时钟…

PromptCraft-Robotics部署步骤和问题记录

GitHub - microsoft/PromptCraft-Robotics: Community for applying LLMs to robotics and a robot simulator with ChatGPT integration 部署环境&#xff1a;UE4.27 Visual Studio 2022 Arisim1.8.1 可参考&#xff1a;git clone https://github.com/Microsoft/AirSim.gi…

用promise实现批量请求数据,同时支持控制请求的并发数

假设有个业务场景,要求:可以批量请求数据,所有的 URL 地址在 urls 参数中,同时可以通过 max 参数控制请求的并发度,当所有请求结束之后,需要执行 callback 回掉函数。 JavaScript代码实现 async function sendRequest(urls, max, callback) {// 用于存储所有请求的promi…

Java三方库-单元测试

文章目录 Junit注解常用类无参数单测带参数的单测 Junit 主要版本有4和5版本&#xff0c;注解不太一样&#xff0c; 4迁移5参考官方文档 主要记录下常用的一些操作 其他复杂操作见官网 https://junit.org/junit5/docs/current/user-guide/#overview-java-versions 引入5.9…

WSL Ubuntu 如何设置中文语言?

本章教程,主要介绍如何在WSL Ubuntu 如何设置中文语言。 操作系统:Windows 10 Pro 64 WSL子系统:Ubuntu 20.04 LTS 一、安装中文语言包 sudo apt install language-pack-zh-hans二、设置中文语言 sudo dpkg-reconfigure locales选择en_US.UTF-8 和 zh_CN.UTF-8 选择zh_CN.…

Java虚拟机(JVM)中符号引用(symbolic reference)和直接引用以及转化过程

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;符号引用&#xff08;symbolic reference&#xff09;和直接引用&#xff08;direct reference&#xff09;是两种不同的引用方式。了解这两种引用方式有助于更深入地理解Java的运行时机制&#xff0c;特别是类加载和方法…

jps命令解释以及用法

JPS命令是Linux系统中的一个常用命令&#xff0c;用于显示Java进程的相关信息。下面是JPS命令的详解&#xff1a; JPS命令是Java Development Kit&#xff08;JDK&#xff09;提供的一个工具&#xff0c;用于列出JVM进程&#xff08;Java虚拟机进程&#xff09;的信息。它通常…

39 - 安全技术与防火墙

39、安全技术和防火墙 一、安全技术 入侵检测系统&#xff1a;特点是不阻断网络访问&#xff0c;主要是提供报警和事后监督。不主动介入&#xff0c;默默看着你&#xff08;监控&#xff09;。 入侵防御系统&#xff1a;透明模式工作&#xff0c;数据包&#xff0c;网络监控…

TextArea是一个用于显示和编辑多行可滚动文本的控件,通常用于需要用户输入或展示大量文本的应用中

TextArea 是一个用于显示和编辑多行可滚动文本的控件&#xff0c;通常用于需要用户输入或展示大量文本的应用中。以下是 TextArea 中常用的属性、信号和方法的详解&#xff1a; 常用属性 text: 描述&#xff1a;用于设置或获取显示的文本内容。类型&#xff1a;string示例&…

python-(opencv)视频转glf

文章目录 前言python-(opencv)视频转glf1. 下载 opencv-python2. cv2&#xff08;OpenCV&#xff09;和imageio的区别3. demo源码 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说…

youlai-boot项目的学习(4) 前后端本地部署

环境 1、macOS, brew, IntelliJ IDEA, WebStrom 2、后端&#xff1a;https://gitee.com/youlaiorg/youlai-boot.git , master, 9a753a2e94985ed4cbbf214156ca035082e02723 3、前端&#xff1a;https://gitee.com/youlaiorg/vue3-element-admin.git, master, 66b913ef01dc880ad…

mobaxterm x11 转发Ubuntu mac

目录 royal tsx —— 一款Mac平台MobaXterm平替工具 mobaxterm x11 转发Ubuntu 软件 royal tsx —— 一款Mac平台MobaXterm平替工具 Royal Apps Termius Mac mobaxterm x11 转发Ubuntu 软件 所以直接在 ssh 的时候加上 - X 就可以了 ssh -X -p xxx usernameIP 运行 xclock …

递归函数设计技巧

如何设计递归函数 要学会如何设计递归函数&#xff0c;首先要识别什么样的问题才适合递归函数求解&#xff0c;那么我们可以通过数学归纳法&#xff0c;分析问题&#xff0c;观察问题是否符合相关性质。 数学归纳法 数学归纳法&#xff0c;是一种基本的数学证明方法&#xff0c…