Python自动化实战之使用Pytest进行API测试详解
概要
每次手动测试API都需要重复输入相同的数据,而且还需要跑多个测试用例,十分繁琐和无聊。那么,有没有一种方法可以让你更高效地测试API呢?Pytest自动化测试!今天,小编将向你介绍如何使用Pytest进行API自动化测试。
什么是API测试?
API测试是一种软件测试方法,用于测试应用程序编程接口(API)以确保其功能、可靠性、性能和安全性。与其他类型的软件测试不同,API测试主要关注的是API的功能和性能,而不是整个应用程序的功能和性能。API测试可以帮助开发人员和测试人员快速准确地测试API,从而提高开发效率和软件质量。
Pytest框架
Pytest是一个流行的Python测试框架,用于编写和运行测试。Pytest具有简单易用的语法,可以轻松地编写各种类型的测试,包括单元测试、集成测试和API测试。Pytest还提供了许多有用的功能,例如自动发现测试、测试重复、测试过滤和测试报告。
使用Pytest进行API测试
下面,我将向你演示如何使用Pytest框架进行API测试。我将以测试一个简单的API为例,该API接受两个数字并返回它们的和。我们将编写一个测试用例来测试该API。
首先,我们需要安装Pytest框架。在终端中输入以下命令即可安装Pytest:
pip install pytest
我们需要编写一个测试用例。在这个测试用例中,我们将使用Python的requests库来向API发送请求,并使用断言来验证API的响应是否正确。以下是测试用例的源代码:
import requestsdef test_addition():url = "http://localhost:5000/add"data = {"num1": 2, "num2": 3}response = requests.post(url, data=data)assert response.status_code == 200assert response.json() == {"result": 5}
在上面的代码中,我们首先定义了一个名为test_addition的测试函数。该函数使用requests库向API发送POST请求,并将两个数字作为输入数据。然后,我们使用两个断言来验证API的响应是否正确。第一个断言验证响应的状态码是否为200,而第二个断言验证响应的JSON数据是否为{"result": 5}。
现在,我们可以使用Pytest来运行这个测试用例了。在终端中输入以下命令即可运行测试:
pytest test_api.py
如果一切正常,Pytest将输出测试结果,并告诉你测试是否通过。如果测试失败,Pytest将显示失败的测试用例和错误信息。
高级用法
1. 参数化测试
在进行测试时,我们经常需要对不同的输入数据进行测试。如果我们使用传统的测试方式,就需要编写多个测试用例。但是使用pytest的参数化测试功能,我们可以通过一些参数,来自动生成多个测试用例。这样就可以大大减少我们的代码量,提高测试效率。
下面是一个示例,我们使用参数化测试来测试一个计算器函数的多组输入输出。
import pytest@pytest.mark.parametrize("a,b,expected", [(1, 2, 3),(2, 3, 5),(3, 4, 7),
])
def test_add(a, b, expected):assert a + b == expected
在这个示例中,我们使用pytest.mark.parametrize装饰器来指定参数化测试的参数。在参数化的列表中,每一组参数都是一个元组,元组中包含了函数的参数以及期望的输出值。pytest会自动将这些参数组合成多个测试用例,并依次执行。
2. Fixture的使用
在进行测试时,我们经常需要创建一些测试数据或者测试环境,这时我们可以使用pytest的Fixture功能。Fixture是一个可以提供测试数据或者测试环境的函数,我们可以在测试用例中通过装饰器来使用它。
下面是一个示例,我们使用Fixture来创建一个测试环境,然后进行测试。
import pytest@pytest.fixture
def setup_environment():# 创建测试环境env = {'name': 'test'}yield env# 清理测试环境del envdef test_env(setup_environment):assert setup_environment['name'] == 'test'
在这个示例中,我们使用@pytest.fixture装饰器来定义setup_environment函数为Fixture。在这个函数中,我们可以创建测试环境,并在yield语句中返回它。在测试用例中,我们可以通过参数名来使用Fixture,pytest会自动将Fixture的返回值传递给测试用例。
3. 自定义插件
pytest有很多自带的插件,可以帮助我们完成一些常见的测试任务。但是在实际使用中,我们往往需要更多的功能。这时,我们可以使用pytest的插件机制,来自定义插件,以满足我们的需求。
下面是一个示例,我们使用pytest的插件机制,来自定义一个插件,用于在测试用例执行前输出一些信息。
import pytest@pytest.hookimpl(tryfirst=True)
def pytest_runtest_logstart(nodeid):print(f"Running test {nodeid}...")def test_example():assert 1 + 1 == 2
在这个示例中,我们使用@pytest.hookimpl装饰器来定义pytest_runtest_logstart函数为插件。在这个函数中,我们输出了测试用例的ID。在测试用例执行前,pytest会自动调用这个插件,并输出信息。
技术总结
本文介绍了API测试的概念,并详细介绍了如何使用Pytest框架进行API测试。希望这篇文章能帮助你更好地理解API测试和如何使用Python自动化测试来提高测试效率和软件质量。同时,也希望你能够通过这个例子和Pytest框架的简单介绍,学习到如何编写和运行API测试用例。
相关文章:
Python自动化实战之使用Pytest进行API测试详解
概要 每次手动测试API都需要重复输入相同的数据,而且还需要跑多个测试用例,十分繁琐和无聊。那么,有没有一种方法可以让你更高效地测试API呢?Pytest自动化测试!今天,小编将向你介绍如何使用Pytest进行API自…...
TCP的三次握手以及四次断开
TCP的三次握手和四次断开,就是TCP通信建立连接以及断开的过程 目录 【1】TCP的三次握手过程 ---- TCP建立连接的过程 【2】TCP的四次挥手 ---- TCP会话的断开 注意: 【1】TCP的三次握手过程 ---- TCP建立连接的过程 三次握手的过程:…...
目标检测YOLO实战应用案例100讲-基于视觉与激光雷达信息融合的智能车辆目标检测研究
目录 前言 传感器选型及同步 2.1 各传感器工作原理及性能对比 2.1.1 视觉传感器...
Day 22 C++ STL常用容器——string容器
string容器 概念本质string和char 区别:特点string构造函数构造函数原型 string赋值操作赋值的函数原型示例 string字符串拼接函数原型:示例 string查找和替换函数原型示例 string字符串比较比较方式 字符串比较是按字符的ASCII码进行对比函数原型示例 s…...
使用Socket实现UDP版的回显服务器
文章目录 1. Socket简介2. DatagramSocket3. DatagramPacket4. InetSocketAddress5. 实现UDP版的回显服务器 1. Socket简介 Socket(Java套接字)是Java编程语言提供的一组类和接口,用于实现网络通信。它基于Socket编程接口,提供了…...
【MCU学习】GD32F427VG开发
(一)学习文档和例程 兆易创新GD32 MCU参考资料下载 1.GD232F4xx的Keil芯片支持包 2.标准固件库和示例程序 3.GD32F4xx_固件库使用指南_Rev1.2 4.用户手册:GD32F4xx_User_Manual_Rev2.8_CN 5.数据手册:GD32F427xx_Datasheet_Rev…...
Acwing.877 扩展欧几里得算法
题目 给定n对正整数ai , bi,对于每对数,求出一组ai ,g,使其满足ai* xi bi * yi gcd(ai ,bi)。 输入格式 第一行包含整数n。 接下来n行,每行包含两个整数ai , bi。 输出格式 输出共n行,对于每组ai, bi,…...
基于自组织竞争网络的患者癌症发病预测(matlab代码)
1.案例背景 1.1自组织竞争网络概述 前面案例中讲述的都是在训练过程中采用有导师监督学习方式的神经网络模型。这种学习方式在训练过程中,需要预先给网络提供期望输出,根据期望输出来调整网络的权重,使得实际输出和期望输出尽可能地接近。但是在很多情况下,在人们认知的过程中…...
golang mongodb
看代码吧 package main// 链接案例 https://www.mongodb.com/docs/drivers/go/current/fundamentals/connection/#connection-example // 快速入门 https://www.mongodb.com/docs/drivers/go/current/quick-start/ import ("context""fmt""log"…...
docker中的jenkins去配置sonarQube
docker中的jenkins去配置sonarQube 1、拉取sonarQube macdeMacBook-Pro:~ mac$ docker pull sonarqube:8.9.6-community 8.9.6-community: Pulling from library/sonarqube 8572bc8fb8a3: Pull complete 702f1610d53e: Pull complete 8c951e69c28d: Pull complete f95e4f8…...
企业如何实现自己的AI垂直大模型
文章目录 为什么要训练垂直大模型训练垂直大模型有许多潜在的好处训练垂直大模型也存在一些挑战 企业如何实现自己的AI垂直大模型1.确定需求2.收集数据3.准备数据4.训练模型5.评估模型6.部署模型 如何高效实现垂直大模型 ✍创作者:全栈弄潮儿 🏡 个人主页…...
Maven可选依赖和排除依赖简单使用
可选依赖 可选依赖指对外隐藏当前所依赖的资源 在maven_04_dao的pom.xml,在引入maven_03_pojo的时候,添加optional <dependency><groupId>com.rqz</groupId><artifactId>maven_03_pojo</artifactId><version>1.0-SNAPSHOT&…...
“深入探索JVM:Java虚拟机的工作原理解析“
标题:深入探索JVM:Java虚拟机的工作原理解析 摘要:本文将深入探索Java虚拟机(JVM)的工作原理,从类加载、内存管理、垃圾回收、即时编译器等方面进行详细解析,帮助读者更好地理解JVM的内部机制。…...
Prometheus-各种exporter
文章目录 一、 nginx-prometheus-exporter1 nginx 配置1.1 Nginx 模块支持1.2 Nginx 配置文件配置2 部署 nginx-prometheus-exporter2.1 二进制方式部署2.1.1 解压部署2.1.2 配置 systemd2.1.3 添加 prometheus 的配置2.1.4 Dashborad2.2 docker-compose 方式部署3 可配置的指标…...
小程序的 weiui的使用以及引入
https://wechat-miniprogram.github.io/weui/docs/quickstart.html 网址 1.点进去,在app.json里面配置 在你需要的 页面的 json里面配置,按需引入 然后看文档,再在你的 wxml里面使用就好了...
git目录初始化,并拉取最新代码
现有C:\data目录,将目录初始化,并拉取代码在这里插入代码片 https://gitlab.arsbaibaodun.com/bcx_v5_app/baoan-hangyedcjg.git 1、 git init生成 .git 目录即目录初始化完成,可以进行拉取代码 代码成功拉取到了data目录,默认…...
运筹调度算法工程式招聘情况:技能要求、薪资、工作地
目录 一、前言二、岗位信息三、总结 一、前言 前一段时间,常看到运筹学的老师们在朋友圈转发下面的图片。今天忽然想起这件事,顺势查了一下“调度算法工程师”在Boss直聘上的岗位信息,也整理一下招聘企业所需的“调度”技能。 二、岗位信息…...
css2-BFC是什么?
1、BFC是什么? 在页面布局时,经常会出现以下几种情况: 这个元素高度怎末没了? 这两栏布局怎末没法自适应? 这两个元素的间距怎末有点奇怪的样子? … 原因就是元素之间互相影响,导致了意料之外的…...
Flutter Dart语言(04)库操作
0 说明 该系列教程主要是为有一定语言基础 C/C的程序员,快速学习一门新语言所采用的方法,属于在C/C基础上扩展新语言的模式。 1 自定义库 & 系统自定义库 引入代码如下所示: import xxx.dart; //自定义库引入,xxx为本…...
通向架构师的道路之漫谈使用ThreadLocal改进你的层次的划分
一、什么是ThreadLocal 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
