news 2026/3/5 0:21:24

Python接口自动化测试:断言封装

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python接口自动化测试:断言封装

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

在进行API接口测试时,断言起着至关重要的作用。断言是用于验证预期结果与实际结果是否一致的过程。在Python中,我们可以利用一些库来实现断言功能。

1. 安装必要的库

在Python中,我们主要会使用两个库:requests和jsonpath。requests库用于发送HTTP请求,而jsonpath库则用于解析JSON数据。

首先,我们需要安装这两个库。打开命令行,输入以下命令:

pip install requests pip install jsonpath

2. 封装断言函数

接下来,我们需要编写一个断言函数。该函数负责读取接口返回的信息,并根据预先设定的条件进行断言。以下是一个基本的断言函数示例:

import requests import jsonpath def assert_response(response, assertions): for assertion in assertions: actual_value = jsonpath.jsonpath(response.json(), assertion["jsonpath"]) expected_value = assertion["expected_value"] assert actual_value[0] == expected_value, f"断言失败。期望值为 {expected_value},实际值为 {actual_value[0]}"

在这个函数中,我们首先使用jsonpath从JSON数据中提取实际值。然后,我们使用assert语句来进行断言,判断实际值是否等于预期值。

3. 使用断言函数

现在,我们可以在接口测试中使用这个断言函数了。

首先,我们需要发送一个HTTP请求,并获取返回的响应。然后,我们可以使用断言函数来检查响应是否符合预期。

以下是一个示例:

# 发送HTTP请求 url = "<http://example.com/api>" response = requests.get(url) # 定义断言 assertions = [ { "jsonpath": "$.status", "expected_value": "success" }, { "jsonpath": "$.data[0].id", "expected_value": 1 } ] # 使用断言函数 assert_response(response, assertions)

在这个示例中,我们首先发送一个GET请求到http://example.com/api。然后,我们定义了两个断言:一个是检查status是否为success,另一个是检查第一条数据的id是否为1。最后,我们调用assert_response函数进行断言。

4. 高级断言示例

除了基本的断言功能之外,我们还可以进行更多的断言操作。以下是一些高级断言示例:

检查列表长度

有时候,我们需要检查返回结果中某个列表的长度是否符合预期。可以通过以下方式进行断言:

assert len(response.json()["data"]) == expected_length

例如,假设我们期望返回的数据列表长度为10,我们可以使用上述断言来验证。

检查关键字存在

有时候,我们需要检查返回结果中是否包含某个关键字。可以通过以下方式进行断言:

assert keyword in response.json()["data"]

例如,假设我们期望返回的数据中包含关键字"example",我们可以使用上述断言来验证。

检查响应时间

有时候,我们需要检查接口的响应时间是否在预期范围内。可以通过以下方式进行断言:

assert response.elapsed.total_seconds() <= expected_time

例如,假设我们期望接口的响应时间不超过5秒,我们可以使用上述断言来验证。

检查状态码

在接口测试中,我们经常需要检查返回的状态码是否符合预期。可以通过以下方式进行断言:

assert response.status_code == expected_status_code

例如,假设我们期望返回的状态码为200,我们可以使用上述断言来验证。

通过这些高级断言操作,我们可以更加灵活地进行接口测试和结果验证。

5. 完全封装的断言方法

除了逐个断言检查外,我们还可以将所有断言封装到一个方法中,以便更方便地进行结果验证。以下是一个完全封装的断言方法示例:

import requests import jsonpath def assert_responses(responses, assertions): for index, response in enumerate(responses): for assertion in assertions[index]: actual_value = jsonpath.jsonpath(response.json(), assertion["jsonpath"]) expected_value = assertion["expected_value"] assert actual_value[0] == expected_value, f"断言失败。期望值为 {expected_value},实际值为 {actual_value[0]}"

在这个方法中,我们接受一个包含多个响应的列表和一个包含多个断言的列表。我们使用嵌套循环来遍历每个响应和断言,并进行断言检查。

以下是一个示例:

# 发送HTTP请求 urls = ["<http://example.com/api1>", "<http://example.com/api2>", "<http://example.com/api3>"] responses = [requests.get(url) for url in urls] # 定义断言 assertions = [ [ { "jsonpath": "$.status", "expected_value": "success" }, { "jsonpath": "$.data[0].id", "expected_value": 1 } ], [ { "jsonpath": "$.status", "expected_value": "success" }, { "jsonpath": "$.data[0].name", "expected_value": "example" } ], [ { "jsonpath": "$.status", "expected_value": "success" } ] ] # 使用断言函数 assert_responses(responses, assertions)

在这个示例中,我们发送了三个GET请求到不同的URL,并获得了三个响应。然后,我们定义了三个断言列表,每个列表对应一个响应。我们可以通过调整断言列表来适应不同的测试场景。

通过完全封装的断言方法,我们可以更加灵活地进行多个响应的结果验证。

6. 总结

Python中的断言封装主要涉及到了requests和jsonpath两个库的使用。通过这两个库,我们可以方便地发送HTTP请求,解析JSON数据,以及进行断言。希望这篇文章对于Python中断言封装的理解有所帮助。

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

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/23 9:03:55

能源数采网关赋能能源智慧管理与低碳转型

在“双碳”目标背景下&#xff0c;工业能源管理已成为企业降本增效、实现绿色制造的关键环节。然而&#xff0c;传统能源数据采集依赖人工抄表、系统孤立、分析滞后&#xff0c;难以实现精细化管理和实时优化&#xff0c;导致能源浪费严重、成本居高不下。 以能源数采网关为基础…

作者头像 李华
网站建设 2026/3/4 18:10:20

“潘金莲”扮演者因戏生情,与武松在一起,今五十三岁却过成这样!

在经典影视的璀璨星河中&#xff0c;98版《水浒传》宛如一颗耀眼的明珠&#xff0c;其中“潘金莲”与“武松”的对手戏更是令人印象深刻。而扮演“潘金莲”的王思懿&#xff0c;竟因戏生情&#xff0c;与“武松”的扮演者丁海峰传出绯闻&#xff0c;这段故事如同投入平静湖面的…

作者头像 李华
网站建设 2026/3/3 7:40:56

学霸同款10个降AIGC网站 千笔AI帮你降AI率

AI降重工具&#xff1a;让论文更自然&#xff0c;让学术更纯粹 在当前的学术环境中&#xff0c;越来越多的研究生开始关注论文的AIGC率和查重率 面对这一挑战&#xff0c;AI降重工具应运而生&#xff0c;它们通过智能算法对文本进行深度处理&#xff0c;不仅能够有效降低AI痕迹…

作者头像 李华
网站建设 2026/2/26 9:50:38

python+vue开发的新农村自建房改造管理系统-pycharm DJANGO FLASK

文章目录 新农村自建房改造管理系统的技术框架后端技术实现要点前端Vue.js核心功能数据库与部署方案系统特色功能 大数据系统开发流程主要运用技术介绍源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 新农村自建房改造管理系统…

作者头像 李华
网站建设 2026/3/3 20:31:13

多功能会员系统源码开源可定制,源码全开源可以二开

温馨提示&#xff1a;文末有资源获取方式在数字经济时代&#xff0c;传统商家面临着客户留存难、营销方式单一等挑战。一套成熟的会员卡积分营销系统&#xff0c;能够成为连接商家与消费者的核心纽带。我们为您推荐一款功能强大的会员卡积分收银系统源码商业运营版。该系统专为…

作者头像 李华
网站建设 2026/3/4 2:16:58

硕士论文通关密码:paperzz 文献综述写作,让你一周搞定学术开篇

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 文献综述https://www.paperzz.cc/journalsReviewedhttps://www.paperzz.cc/journalsReviewed 对于每一位硕士研究生而言&#xff0c;文献综述不仅是论文的 “门面”&#xff0c;更是整个研究的逻…

作者头像 李华