接口自动化进阶: Pytest之Fixture拓展及conftest.py加载机制!

Pytest是一个功能强大的Python测试框架,它提供了很多有用的功能和扩展机制。其中之一是Fixture,Fixture是pytest中的一个装饰器,可以用来提供测试所需的数据和对象。

本篇文章将从头开始,详细介绍如何使用Fixture进行接口自动化测试,并解释conftest.py的加载机制。

1.安装Pytest和相关库

首先,需要安装Pytest和相关库。可以使用pip命令来安装:

$ pip install pytest requests

2.创建测试文件

创建一个新的Python文件,命名为test_api.py,用于编写接口测试用例。

3.编写接口测试用例

在test_api.py文件中,编写一个简单的接口测试用例。例如,测试一个获取用户信息的接口:

import pytest
import requests@pytest.fixture
def base_url():return "https://api.example.com"def test_get_user(base_url):response = requests.get(f"{base_url}/users/1")assert response.status_code == 200assert response.json()["name"] == "John Doe"

在上面的示例中,我们定义了一个Fixture函数base_url,用于返回接口的基本URL。然后,在test_get_user函数中使用了base_url,并发送了一个GET请求来获取用户信息。

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

4.运行测试用例

运行测试用例的方法很简单,只需要在命令行中运行pytest命令即可:

$ pytest

Pytest会自动查找当前目录及其子目录中所有以test_开头的文件,并运行其中的测试用例。

5、使用Fixture提供测试数据和对象

除了提供接口的基本URL,Fixture还可以用来提供测试数据和对象。例如,我们可以使用Fixture来创建一个测试用户并返回用户ID:

@pytest.fixture
def test_user(base_url):user_data = {"name": "John Doe","email": "john.doe@example.com"}response = requests.post(f"{base_url}/users", json=user_data)user_id = response.json()["id"]yield user_id# 在测试用例执行完毕后,做一些清理工作requests.delete(f"{base_url}/users/{user_id}")def test_update_user(base_url, test_user):new_name = "Jane Doe"response = requests.put(f"{base_url}/users/{test_user}", json={"name": new_name})assert response.status_code == 200response = requests.get(f"{base_url}/users/{test_user}")assert response.status_code == 200assert response.json()["name"] == new_name

在上面的示例中,我们定义了一个新的Fixture函数test_user,用于创建一个测试用户,并返回用户ID。在test_update_user函数中,我们使用了test_user Fixture来获取用户ID,并发送一个PUT请求来更新用户信息。

Fixture函数可以使用yield语句来分隔测试用例的执行阶段。在yield语句之前的代码会在测试用例开始前执行,而在yield语句之后的代码会在测试用例结束后执行。这样可以方便地进行一些清理工作,例如删除测试用户。

6.使用conftest.py共享Fixture

Pytest还提供了conftest.py文件来共享Fixture。conftest.py是一个特殊的文件名,可以在任何测试目录中创建。它可以包含多个Fixture函数,这些Fixture函数将自动加载并可以在任何测试文件中使用。

例如,我们可以将之前的base_url Fixture移动到conftest.py中:

import pytest@pytest.fixture
def base_url():return "https://api.example.com"

然后,在test_api.py中可以直接使用base_url Fixture,而无需再定义一遍。

7.conftest.py加载机制

conftest.py文件的加载机制是按照以下顺序进行的:

  1. 当前测试目录及其子目录
  2. conftest.py文件所在的目录及其子目录
  3. conftest.py文件所在的父目录及其子目录
  4. ...

也就是说,conftest.py文件可以在整个测试项目中共享Fixture。可以根据需要在不同的目录中创建conftest.py文件,并在其中定义不同的Fixture函数。

总结

本文从0到1讲解了如何使用Pytest和Fixture进行接口自动化测试,并详细解释了conftest.py的加载机制。通过使用Fixture,我们可以方便地提供测试数据和对象,并进行一些初始化和清理工作。conftest.py的加载机制使得Fixture函数可以在整个测试项目中共享,方便地复用和扩展。希望本文对你理解和使用Pytest的Fixture有所帮助!

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

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

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

相关文章

关于moviepy出现must be real number, not NoneType

#降级装饰器版本 decorator4.4.2 不行就再降4.0.2 有的也可以通过省级mv解决更多解答https://stackoverflow.com/questions/68032884/getting-typeerror-must-be-real-number-not-nonetype-whenever-trying-to-run-wr

Linux安装Oracle11g(无图形界面下的静默安装)

Oracle11g安装文档-Linux静默安装 环境准备安装数据库配置监听器创建数据库测试打开防火墙 环境准备 创建组和用户 [rootlocalhost ~]# groupadd oinstall #创建oinstall组 [rootlocalhost ~]# groupadd dba  #创建dba组 [rootlocalhost ~]# useradd -g oinstall -G dba -m…

鸿蒙HarmonyOS开发实例:【分布式关系型数据库】

介绍 本示例使用[ohos.data.relationalStore]接口和[ohos.distributedDeviceManager] 接口展示了在eTS中分布式关系型数据库的使用,在增、删、改、查的基本操作外,还包括分布式数据库的数据同步同能。 效果预览 使用说明: 启动应用后点击“ ”按钮可…

《QT实用小工具·十七》密钥生成工具

1、概述 源码放在文章末尾 该项目主要用于生成密钥,下面是demo演示: 项目部分代码如下: #pragma execution_character_set("utf-8")#include "frmmain.h" #include "ui_frmmain.h" #include "qmessag…

ArrayList中多线程的不安全问题

ArrayList中的不安全问题 正常的输出 List<String> list Arrays.asList("1","2","3"); list.forEach(System.out::println);为什么可以这样输出&#xff0c;是一种函数是接口&#xff0c;我们先过个耳熟 Arrys.asList是返回一个ArrayL…

【leetcode面试经典150题】40. 同构字符串(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

进程间通信 (匿名管道)

一、进程间通信的概念 进程间通信是一个进程把自己的数据交给另一个进程&#xff0c;它可以帮助我们进行数据传输、资源共享、通知事件和进程控制。 进程间通信的本质是让不同的进程看到同一份资源。因此&#xff0c;我们要有&#xff1a; 1、交换数据的空间。2、这个空间不能由…

端口号占用解决方法

进入cmd输入&#xff1a; 第一步输入&#xff1a;netstat -ano|findstr 8080 第二步输入&#xff1a;taskkill -pid **** -f (示例)&#xff1a; C:\Users\Administrator>netstat -ano|findstr 8080 TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING …

AcWing 790. 数的三次方根——算法基础课题解

AcWing 790. 数的三次方根 题目描述 给定一个浮点数 n&#xff0c;求它的三次方根。 输入格式 共一行&#xff0c;包含一个浮点数 n。 输出格式 共一行&#xff0c;包含一个浮点数&#xff0c;表示问题的解。 注意&#xff0c;结果保留 6 位小数。 数据范围 −10000≤…

Linux链接文件管理——硬链接、符号链接

Linux链接文件管理——硬链接、符号链接 硬链接 硬链接是对文件的另一个名字&#xff0c;对于硬链接的文件来说&#xff0c;他们拥有同样的inode号(索引节点号)&#xff0c;表示它们是同一个文件。 创建硬链接不会消耗新的inode和block。 删除硬链接文件&#xff0c;不会影响…

hadoop103: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

分析&#xff1a; 在启动hadoop服务的时候&#xff0c;遇到了这个问题&#xff1a; hadoop103: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 这个一看就是&#xff0c;密钥问题 于是ssh 主机名就行测试 需要输入密码&#xff0c;就说明这里有问…

【C++】每日一题 28 找出字符串中第一个匹配项的下标

给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 #include <iostream> #include <string>…

C++笔记(函数重载)

目录 引入&#xff1a; 定义&#xff1a; 易错案例&#xff1a; 引入&#xff1a; 对于实现相似功能的函数&#xff0c;在命名时&#xff0c;我们常会出现命名重复的问题。对于C语言&#xff0c;编译器遇到这种命名重复的情况&#xff0c;会进行报错。而我们的C为了更方便程…

【计算机毕业设计】校园网书店系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

分布式锁-redission

5、分布式锁-redission 5.1 分布式锁-redission功能介绍 基于setnx实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如HashTable这样的代码…

pycharm一直打不开

一直处在下面的页面&#xff0c;没有反应 第一种方案&#xff1a; 以管理员身份运行 cmd.exe&#xff1b;在打开的cmd窗口中&#xff0c;输入 netsh winsock reset &#xff0c;按回车键&#xff1b;重启电脑&#xff1b;重启后&#xff0c;双击pycharm图标就能打开了&#xf…

深度理解运放增益带宽积

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 大家好&#xff0c;我是工程师看海。 增益带宽积是运算放大器的重要参数之一&#xff0c;指的是运放的增益和带宽的乘积&#xff0c;这个乘积…

Mybatis-Plus使用方法

MyBatis-Plus 提供了丰富的增强版的 CRUD 方法&#xff0c;使得开发者能够更简洁、高效地进行数据库操作。以下是如何使用 MyBatis-Plus 自带的增强版 CRUD 方法的基本步骤&#xff1a; 添加依赖 首先&#xff0c;确保你的 Maven 项目中已经添加了 MyBatis-Plus 的相关依赖&a…

【S32K3 MCAL配置】-3.1-CANFD配置-经典CAN切换CANFD(基于MCAL+FreeRTOS)

"><--返回「Autosar_MCAL高阶配置」专栏主页--> 目录(共5页精讲,基于评估板: NXP S32K312EVB-Q172,手把手教你S32K3从入门到精通) 实现的架构:基于MCAL层 前期准备工作:

STC89C52学习笔记(四)

STC89C52学习笔记&#xff08;四&#xff09; 综述&#xff1a;本文讲述了在STC89C51中数码管、模块化编程、LCD1602的使用。 一、数码管 1.数码管显示原理 位选&#xff1a;对74HC138芯片的输入端的配置&#xff08;P22、P23、P24&#xff09;&#xff0c;来选择实现位选&…