python+requests 搭建接口自动化测试框架【超详细】

news2025/1/11 14:23:30

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

一、前言

Python是一种简单易学、功能强大的编程语言,广泛应用于各种软件开发和测试场景中。requests是Python中流行的HTTP库,支持发送HTTP请求和处理HTTP响应,它也是开发API自动化测试框架的重要组件之一。在本文中,我们将介绍如何使用Python和requests构建一个简单的接口自动化测试框架,并通过实例来详细说明其具体实现方法。

二、环境准备

在开始构建接口自动化测试框架之前,我们需要安装必要的工具和库,包括Python、requests、pytest等。以下是几个基本步骤:

下载并安装Python3.x版本。

使用pip命令安装requests和pytest库,例如:

pip install requests
pip install pytest

安装其他必需的库和插件,例如pytest-html、pytest-xdist等。

三、设计框架结构

接口自动化测试框架的设计需要考虑多种因素,例如测试目标、测试需求、测试用例设计、代码复用性等。以下是一个简单的框架结构示例:

- api_tests/
    - base.py
    - conftest.py
    - testcases/
        - test_login.py
        - test_order.py
    - utils/
        - config.py
        - logger.py
        - request.py

其中,api_tests是项目的根目录,base.py是基础测试用例类,conftest.py是Pytest的配置文件,testcases是测试用例目录,utils是工具类目录。

四、实现框架功能

接下来,我们将使用Python和requests等库实现框架的具体功能,包括配置管理、日志记录、请求封装、测试用例设计等。以下是一些关键的实现步骤:

配置管理:我们可以创建一个config.py文件,定义应用程序的配置信息,例如URL、用户名、密码等。同时,我们可以使用Python中的configparser库来读取配置信息,并在测试用例中进行引用。例如:

import configparser
 
config = configparser.ConfigParser()
config.read('config.ini')
 
url = config.get('app', 'url')
username = config.get('app', 'username')
password = config.get('app', 'password')

日志记录:我们可以创建一个logger.py文件,定义日志记录器,以记录测试过程中的关键事件和错误信息。例如:

import logging
 
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

请求封装:我们可以创建一个request.py文件,封装requests库的HTTP方法,提供统一的请求接口和响应处理。例如:

import requests
 
def get(url, params=None, headers=None):
    response = requests.get(url, params=params, headers=headers)
    return response
 
def post(url, data=None, json=None, headers=None):
    response = requests.post(url, data=data, json=json, headers=headers)
    return response

测试用例设计:我们可以创建多个测试用例,并使用Pytest进行管理和执行。例如:

import pytest
from utils.config import url, username, password
from utils.request import post
 
@pytest.mark.order
def test_login():
    data = {'username': username, 'password': password}
    response = post(url+'/api/login', json=data)
    assert response.status_code == 200
 
@pytest.mark.order
def test_order():
    headers = {'Authorization': 'Bearer '+token}
    response = get(url+'/api/order/123', headers=headers)
    assert response.status_code == 200

五、执行测试用例

完成了接口自动化测试框架的开发后,我们可以使用以下命令来执行测试用例:

pytest -s -v --html=report.html --self-contained-html --workers=4

其中,-s选项表示输出所有print语句;-v选项表示详

细输出测试结果;--html选项表示生成HTML格式的测试报告;--self-contained-html选项表示将测试报告中的所有资源文件都包含在一个文件中,方便查看和分享;--workers选项表示使用多线程运行测试用例。

执行完测试用例后,我们可以在测试报告中查看测试结果和日志信息,以评估接口的正确性和性能等指标。同时,我们也可以对测试框架进行优化和扩展,例如添加数据驱动、参数化测试、前置条件等功能,以提高测试效率和质量。

六、总结

Python和requests是构建接口自动化测试框架的重要组件之一,它们具有易于学习和使用、功能强大和灵活等优点。通过合理设计框架结构和实现关键功能,我们可以快速搭建一个简单且高效的接口自动化测试框架。在实际应用中,我们需要根据项目需求和团队技能等因素选择适当的工具和方法,并遵循最佳实践来确保测试质量和可持续性。同时,我们也可以在测试过程中添加断言、异常处理、测试装置等功能,以提高测试用例的可靠性和稳定性。例如,在实际应用中,我们通常需要验证HTTP响应状态码、响应头、响应内容等指标,通过使用Pytest框架提供的assert语句,可以方便地进行断言操作,例如:

response = requests.get('https://api.github.com')
assert response.status_code == 200
assert response.headers['content-type'] == 'application/json; charset=utf-8'

此外,在编写测试用例时,我们还可以使用数据驱动和参数化测试等技术来快速生成多个测试用例,并对测试用例进行组合和分组。例如,我们可以创建一个data.csv文件,定义多个测试数据,并通过pytest.mark.parametrize注解来引用数据,并自动生成多个测试用例。例如:

import pytest
import csv
from utils.request import post
 
@pytest.mark.parametrize('username, password', csv.reader(open('data.csv')))
def test_login(username, password):
    data = {'username': username, 'password': password}
    response = post(url+'/api/login', json=data)
    assert response.status_code == 200

总之,Python和requests提供了强大而灵活的工具和库,可以帮助我们构建简单且高效的接口自动化测试框架。通过合理设计框架结构和实现关键功能,我们可以快速编写测试用例、执行测试过程,并生成高质量的测试报告,以评估接口的正确性和性能等指标。同时,我们也可以使用最佳实践和常见技巧来优化测试过程和提高测试效率和质量。

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

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

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

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

相关文章

windows下安装elasticSearch和kibana

下载es 下载地址官网 下载后是个压缩包(elasticsearch-8.15.0-windows-x86_64),解压即可 启动 配置 改一下 /conf/jvm.options文件,最后加一行编码配置,这个是为了启动后防止控制台乱码 -Dfile.encodingGBK启动es 依赖jdk8环境&#xf…

Qt中的父窗口子窗口和父类子类的区别

好多人在开发初期,往往将父子窗口和父子类搅在一起容易搞混。 今天借着这篇文章给大家分辨一下。 C中我们常说子类继承自父类,子类具有父类所有的特性和功能。所以父类和子类是继承关系。 而子窗体和父窗体,不是继承关系,准确地讲…

安卓13拦截home功能 监听home键 禁用home键

总纲 android13 rom 开发总纲说明 目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 经常遇

数据结构与算法的代码实现(C++版)

数据结构与算法的代码实现(C版) 1. 线性表的顺序表示和实现1.1 线性表的初始化1.2 线性表的销毁1.3 线性表的清空1.4 线性表的长度1.5 判断线性表是否为空1.6 线性表的线性表取值1.7 线性表的顺序查找1.8 线性表的插入1.9 线性表的删除总结 2. 线性表的链…

EPLAN如何在插入设备的时候修改部件的数据?

EPLAN如何在插入设备的时候修改部件的数据? 默认情况下,插入部件的时候,部件的数据是无法更改的,那么如何设置在插入部件的时候对部件的数据进行修改呢? 具体可参考以下内容: 设置完成后,点击右…

QT实现简易记事本

QT的Qmainwindow实现简易记事本,不带有UI界面。 1、功能展示 1、编辑文件时,文件名左上角有个“*”,代表文件未保存 2、菜单栏有文件、编辑的选项 3、工具栏有保存、新建、打开、调节字体、调节颜色。 4、文件菜单中有,新建,保存、打开、…

【C语言从不挂科到高绩点】06-流程控制语句-循环语句

Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程 本套课程将会从0基础讲解C语言核心技术,适合人群: 大学中开设了C语言课程的同学想要专升本或者考研的…

2024测试开发必知必会:Pytest框架实战!

应用场景: pytest 框架可以解决我们多个测试脚本一起执行的问题。 它提供了测试用例的详细失败信息,使得开发者可以快速准确地改正问题。它兼容最新版本的 Python。它还兼容 unittest、doctest 和 nose,开箱即用。接下来我们详细了解下pyte…

LLM与知识图谱

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

昆仑山矿泉水《大湾区旅行者》正式开机,携手共赴一场净化心灵之旅

在这个快节奏的时代,我们总在寻找一片能让心灵得以栖息的地方。今年,昆仑山矿泉水与深圳卫视再度携手,推出充满人文温情与自然探索的慢生活旅行综艺《大湾区旅行者》,目前已于8月29日开机启航。本次旅行,昆仑山矿泉水与…

废品回收小程序,从传统到现代化的回收模式

在数字化发展的当下,废品回收行业也进行了更新换代,由传统“喊卖”,到目前的线上回收,将互联网小程序与废品回收相结合,打造一个线上回收模式,让大众可以直接通过手机进行回收。小程序的出现不仅解决了传统…

四层神经网络,反向传播计算过程;四层神经网络中:y的函数公式是什么

目录 四层神经网络,反向传播计算过程 网络结构 前向传播 损失函数 反向传播 1. 计算输出层到隐藏层 2 的梯度 2. 计算隐藏层 2 到隐藏层 1 的梯度 3. 计算输入层到隐藏层 1 的梯度 梯度下降更新 四层神经网络,反向传播计算过程 在四层神经网络中,使用均方差损失函数…

H264结构及RTP封装

H264是一种针对视频的压缩编码方式。 一、压缩方法 H264主要基于以下几种方法,将数据进行压缩: 1.帧内预测压缩:解决空间域数据冗余的问题 2.帧间预测压缩:(运动估计与补偿)解决时间域数据冗余的问题 3…

项目实训:创建一张贺卡以及一只盒子——WEB开发系列27

以下是两道关于基础 CSS 盒模型和其他盒子相关特性的练习题,适合测试对这些概念的掌握程度,通过实际的设计任务来深入理解这些概念。 练习题 1: 设计一张中秋节海报贺卡 任务描述 制作一张精美的中秋节海报贺卡,用于庆祝这个传统节日。你的…

visual studio 2022更新以后,之前的有些工程编译出错,升级到Visual studio Enterprise 2022 Preview解决

系列文章目录 文章目录 系列文章目录前言一、解决方法 前言 今天遇到一个问题:visual studio 2022升级成预览版以后,之前的有些工程编译出错。首先代码、项目设置都没有改变,只是更新了visual studio 2022。 在编译工程时,编译器…

Source-code-of-charging-云快充协议1.5+互联互通协议+新能源汽车充电桩系统

介绍 SpringBoot 框架,充电桩平台充电桩系统充电平台充电桩互联互通协议云快充协议1.5-1.6协议新能源汽车二轮车公交车二轮车充电-四轮车充电充电源代码充电平台源码Java源码 软件架构 软件功能 小程序端:城市切换、附近电站、电桩详情页、扫码充电、…

视频智能分析打手机检测算法安防监控打手机检测算法应用场景、算法源码、算法模型介绍

随着智能手机的普及,手机已成为人们生活中不可或缺的一部分。然而,在某些场合,如驾驶、会议、学校课堂等,不当使用手机可能会导致安全隐患或干扰他人。因此,开发出一种能够准确识别并阻止不当使用手机的行为检测算法显…

技术故障和情感危机,哪个更难修复?

在数字化时代,软件服务的稳定性至关重要。 然而,数字时代的感情同样脆弱! 超单身时代 这一概念主要用来描述一个国家或地区中单身人口占据较大比例的社会现象。以日本为例,根据日本国立社会保障与人口问题研究所的推算,到2035年…

[bevformer渲染可视化] 2d框可视化 并可视化出小目标

可视化代码: 代码使用方法: 1.复制代码全文到任意python文件中 2.下载nuscenes v1.0-mini数据集,修改数据集路径,保证能读取到数据集 3.按照需求修改代码(本文是2dbox面积的面积和整个图片的面积比小于0.03视为小目标&#xff0…

电流互感器的操作、类型和极性注意事项

了解电流互感器及其在将大电流转换为小电流方面的重要作用,包括绕组比、类型以及保持计量极性的重要性。 电流互感器 (CT) 主要用于改变电压值。第二个结果是它们也会改变当前值。 升压变压器减少次级绕组中的电流,降压变压器增加次级绕组中的电流&…