python封装接口自动化测试套件 !

在Python中,我们可以使用requests库来实现接口自动化测试,并使用unittest或pytest等测试框架来组织和运行测试套件。以下是一个基本的接口自动化测试套件封装示例:

图片

首先,我们需要安装所需的库:

pip install requests pytest

创建一个项目目录结构,如下所示:

project/├── common/           # 公共方法模块│   └── utils.py      # 存放请求、断言等公共函数├── conf/             # 配置模块│   └── config.py     # 存放测试环境、API基础URL等配置信息├── data/             # 测试用例参数模块│   └── test_data.json # 存放测试用例的输入数据├── log/              # 日志模块│   └── log.txt       # 存放测试过程中的日志信息├── report/           # 测试报告模块│   └── report.html   # 自动生成的测试报告├── test_case/        # 测试用例模块│   ├── test_login.py # 登录接口测试用例│   ├── test_signup.py# 注册接口测试用例│   └── ...          # 其他接口测试用例└── testsuite.py      # 测试套件文件,用于组织和运行测试用例

编写各个模块的代码

图片

common/utils.py:封装请求和断言等公共函数。

import requestsimport jsondef send_request(method, url, headers=None, params=None, data=None):    response = requests.request(method, url, headers=headers, params=params, data=data)    response.raise_for_status()  # 如果响应状态不是200,抛出异常    return response.json()def assert_response(response_data, expected_key, expected_value):    assert expected_key in response_data, f"Expected key '{expected_key}' not found in response."    assert response_data[expected_key] == expected_value, f"Expected value for '{expected_key}' is '{expected_value}', but got '{response_data[expected_key]}'"

图片

conf/config.py:配置测试环境和基础URL。

TEST_ENVIRONMENT = "development"BASE_URL = "http://localhost:8000/api/"test_case/test_login.py:编写登录接口测试用例。import jsonfrom project.common.utils import send_request, assert_responsefrom project.conf.config import BASE_URLclass TestLogin:    def test_successful_login(self):        url = f"{BASE_URL}login"        data = {            "username": "test_user",            "password": "test_password"        }        response_data = send_request("POST", url, data=json.dumps(data))        assert_response(response_data, "status", "success")        assert_response(response_data, "message", "Logged in successfully.")    def test_invalid_credentials(self):        url = f"{BASE_URL}login"        data = {            "username": "invalid_user",            "password": "invalid_password"        }        response_data = send_request("POST", url, data=json.dumps(data))        assert_response(response_data, "status", "error")        assert_response(response_data, "message", "Invalid credentials.")

图片

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

testsuite.py:组织和运行测试用例。

import pytestfrom project.test_case import test_login, test_signup  # 导入其他测试用例模块@pytest.mark.parametrize("test_case_module", [test_login, test_signup])def test_suite(test_case_module):    suite = unittest.TestLoader().loadTestsFromModule(test_case_module)    runner = unittest.TextTestRunner()    results = runner.run(suite)    assert results.wasSuccessful(), "Test suite failed."

图片

运行测试套件:

pytest testsuite.py

这个示例提供了一个基本的接口自动化测试套件的封装结构和代码。你可以根据实际项目的需要对其进行扩展和修改

添加更复杂的断言、错误处理、测试数据管理、报告生成等功能

更复杂的断言

图片

在common/utils.py中,你可以添加更多的断言函数来处理更复杂的情况。例如,检查响应中的某个字段是否在预期的值列表中:

def assert_in_response(response_data, key, expected_values):    assert key in response_data, f"Expected key '{key}' not found in response."    assert response_data[key] in expected_values, f"Expected value for '{key}' to be one of {expected_values}, but got '{response_data[key]}'"

错误处理

图片

在common/utils.py的send_request函数中,你可以添加更详细的错误处理逻辑,例如捕获和记录不同类型的HTTP错误:

def send_request(method, url, headers=None, params=None, data=None):    try:        response = requests.request(method, url, headers=headers, params=params, data=data)        response.raise_for_status()  # 如果响应状态不是200,抛出异常        return response.json()    except requests.exceptions.HTTPError as http_error:        logging.error(f"HTTP error occurred: {http_error}")        raise http_error    except Exception as e:        logging.error(f"Unexpected error occurred: {e}")        raise e

测试数据管理

图片

你可以创建一个单独的模块或文件来管理测试数据。例如,在data/test_data.py中定义一个字典,包含所有测试用例所需的输入数据:​​​​​​​

LOGIN_TEST_DATA = {    "valid_credentials": {        "username": "test_user",        "password": "test_password"    },    "invalid_credentials": {        "username": "invalid_user",        "password": "invalid_password"    }}

然后在测试用例中使用这些数据:​​​​​​​

from project.data.test_data import LOGIN_TEST_DATAclass TestLogin:    def test_successful_login(self):        url = f"{BASE_URL}login"        data = LOGIN_TEST_DATA["valid_credentials"]        response_data = send_request("POST", url, data=json.dumps(data))        assert_response(response_data, "status", "success")        assert_response(response_data, "message", "Logged in successfully.")    def test_invalid_credentials(self):        url = f"{BASE_URL}login"        data = LOGIN_TEST_DATA["invalid_credentials"]        response_data = send_request("POST", url, data=json.dumps(data))        assert_response(response_data, "status", "error")        assert_response(response_data, "message", "Invalid credentials.")

报告生成

图片

你可以使用pytest-html插件来生成HTML格式的测试报告。首先安装插件:

pip install pytest-html

然后在testsuite.py中配置报告生成:​​​​​​​

import pytestfrom pytest_html_reporter import attach_extra_css, add_contextfrom project.test_case import test_login, test_signup  # 导入其他测试用例模块@pytest.mark.parametrize("test_case_module", [test_login, test_signup])def test_suite(test_case_module):    suite = unittest.TestLoader().loadTestsFromModule(test_case_module)    runner = unittest.TextTestRunner()    results = runner.run(suite)    assert results.wasSuccessful(), "Test suite failed."if __name__ == "__main__":    pytest.main(["--html=report/report.html", "--self-contained-html"])    attach_extra_css("custom.css")  # 添加自定义CSS样式    add_context({"project_name": "My API Test Project"})  # 添加上下文信息

图片

图片

运行测试套件时,将会生成一个名为report.html的测试报告。

以上就是本次分享,有学习接口自动化测试的伙伴有什么不清楚的,可以留言,看到了会及时回复

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

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

运动耳机怎么选?2024年运动耳机推荐,运动蓝牙耳机排行榜10强

​在现代生活中,音乐和运动已经成为很多人生活不可分割的一部分。运动耳机在这样的背景下变得越来越受欢迎,它们不仅可以在运动时提供音乐的陪伴,还能增加运动时的乐趣和动力。但是,面对市面上众多不同类型的运动耳机,…

Linux进程通信之管道

目录 1、无名管道 1.无名管道的特点 2.pipe函数创建管道 3.图例 2、命名管道(FIFO) 1.命名管道的特点 2.mkfifo 函数-创建命名管道 3.示例 1.循环读取数据 2.循环写入数据 1、无名管道 管道通常指的就是无名管道, 1.无名管道的特点…

校招行测,认知能力测验,④破解数量关系测试题

数量关系,值得是数量计算、对比和分析,每种题型都有一定的规律性,如果善于终结也是容易掌握的,当然,只有见多,才能识广,最好的方式就是,锻炼,刷题,就算是临时…

3D Web可视化开发工具包HOOPS Communicator:提供Web端浏览大型模型新方案!

前言:HOOPS Communicator是Tech Soft 3D旗下的主流产品之一,具有强大的、专用的高性能图形内核,专注于基于Web的高级3D工程应用程序。其由HOOPS Server和HOOPS Web Viewer两大部分组成,提供了HOOPS Convertrer、Data Authoring的模…

类和对象的定义以及使用

文章目录 1. 类和对象的基本概念1.1 JAVA是面向对象语言1.2 类和对象的描述 2. 类与对象的定义与使用2.1 类的定义格式2.2 类的实例化(对象的创建)2.3 举个例子 3. 对象的构造及初始化3.1构造方法3.1.1构造方法的定义3.1.2 构造方法的特性 4.2 默认初始化5.4 就地初始化 4.this…

九州金榜如何让孩子在家庭教育中更优秀

​ 每个人在出生时就有上天恩赐的两份礼物,一份是血脉相连的亲情,一份是家庭的关爱与教育。 最早接触的人就是父母,最早接触的教育就是家庭教育,这对孩子的影响极为深远。 这种家庭教育相比较学校教育,不仅有言传教…

认知能力测验,⑤破解图形推理测试题,校招社招网申在线测评必用

认知能力测试,如今是每个求职者必须要面对的,有的人可以顺顺利利通过,而有的人只能够遗憾止步。想要通过认知能力测验,并不是一件易事,而今天要说的图形推理,仅仅是其中的一个部分,抛砖引玉&…

2024.01.09.Apple_UI_BUG

我是软件行业的,虽然不是手机设计的,但是这个设计真的导致经常看信息不完整,要下拉的。 特别读取文本或者其他文件的时候,上面有个抬头就是看不到,烦,体验感很差

Requests库的接口测试实现

Requests库是在接口测试中被广泛运用的库,包括模拟请求的下发,请求相关配置和响应结果的获取,核心主体都是通过request库完成。在接口测试中使用非常频繁。 一、Requests库环境搭建 接口测试的核心从模拟请求开始。在Python中,通…

机器学习:数据处理与特征工程

机器学习中的数据处理和特征工程是非常关键的步骤,它们直接影响模型的性能和泛化能力。以下是一些常见的数据处理和特征工程技术: 数据处理: 缺失值处理: 处理数据中的缺失值,可以选择删除缺失值、填充均值/中位数/众…

HarmonyOS应用开发学习笔记 ArkTS 布局概述

一、布局概述 布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。在实际的开发过程中,需要遵守以下流程保证整体的布局效果 确定页面的布局结构。分析页面中的元素构成。选用适合的布局容器组件或属性控制页面中各个元素的位置和大小约束。 二…

HarmonyOS应用开发学习笔记 UIAbility组件间交互 UIAbility启动,页面跳转结果回调

1、 HarmoryOS Ability页面的生命周期 2、 Component自定义组件 3、HarmonyOS 应用开发学习笔记 ets组件生命周期 4、HarmonyOS 应用开发学习笔记 ets组件样式定义 Styles装饰器:定义组件重用样式 Extend装饰器:定义扩展组件样式 5、HarmonyOS 应用开发…

(生物信息学)R语言绘图初-中-高级——3-10分文章必备——饼图(初级)

生物信息学文章的发表要求除了思路和热点以外,图片绘制是否精美也是十分重要的,本专栏为(生物信息学)R语言绘图初-中-高级——3-10分文章必备,主要通过大量文献,总结3-10分文章中高频出现的各种图片,并给大家提供图片复现的R语言代码,及图片识读。 本专栏将向大家介绍…

你好,2024!再见,2023!

大家好,我是南城余! 今天是2023年最后一天,看到各位大佬都在分享今年的总结,我也来做个年度总结,是第一次做年度总结,希望以后可以每年都做一个好好的回顾。 说来可笑,标题,2023怎么…

Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性

Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性 将skip属性注释掉或者改为false 如果为true,则工程找不到主启动类

Pytest插件pytest-cov:优雅管理测试覆盖率

在软件开发中,测试覆盖率是评估测试质量的关键指标之一。为了更方便地统计和管理测试覆盖率,Pytest插件"pytest-cov"应运而生。本文将介绍"pytest-cov"的基本用法和优雅管理测试覆盖率的方法。 什么是pytest-cov? pytest-cov 是Pyt…

zabbix-proxy代理安装及其他监控方式

zabbix-proxy代理安装及其他监控方式 安装zabbix-proxyserver端配置zabbix-proxy配置被监控的agent安装中问题解决监控网络设备JMX和IPMI监控方式 zabbix-proxy的安装,至少需要准备三台机器,一台安装服务端,一台安装agent端,这里就…

65寸OLED透明拼接屏,从这4个方面解读,让您秒懂

随着显示技术的不断进步,OLED透明拼接屏作为新一代的大屏显示解决方案,正逐渐受到市场的青睐。作为尼伽技术总监,我深知其对于高端显示市场的价值。下面,我将从技术的角度深入剖析这一产品。 一、规格与种类 65寸OLED透明拼接屏有…

Java学习笔记-day03-类名.this:内部类引用外部类实例

类名.this是啥意思? 今天在看尚硅谷的课程时里面讲了这么一句话: 集合在遍历时需要先创建一个容器,存放集合的数据,这样做浪费内存 想去验证下,就翻了翻ArrayList的迭代过程源码 在ArrayList的迭代器类Itr(…

在 PyCharm 中使用 Copilot

GitHub Copilot 由 OpenAI Codex 提供支持,可帮助用户在编辑器中实时工作。 它使用强大的 GPT-3 模型版本,该模型在大量开源代码上进行训练。 此外,GitHub Copilot 可在不同的 IDE(集成开发环境)上使用,包…