自动化测试--利用pytest实现整条业务链路测试
概述
前面一章讲解了单个接口的测试,但是实际项目中,因为权限和登录状态的限制,大部分接口没办法直接访问到,这时候我们想访问到一个系统的接口,就需要模拟用户登录拿到用户的token和所拥有的权限之后再将这些信息作为参数传递给下游进行测试
举个栗子:
base_url : 定义接口的基础 URL。所有需要这个 URL 的测试函数都可以使用这个 fixture。
@pytest.fixture
def base_url():return "http://localhost:8081"
请求访问登录接口:
参数封装:
@pytest.fixture
def login_payload():return {"username": "admin","password": "123","captcha": "12","uuid": "10f53b80-d83f-4431-8fb2-09280942522a"}
之后请求访问登录页面
@pytest.fixture
def token(base_url, login_payload):response = requests.post(f"{base_url}/user/login", json=login_payload)assert response.status_code == 200data = response.json()assert data["code"] == "200"token = data["data"]["token"]return token
这样我们就能拿到用户的token信息
将用户的请求头信息按照系统存放的规则存入请求头中

def test_course_page(base_url, token):headers = {"Token": token}params = {"pageNum": 1,"pageSize": 10,"name": "微表情","teacherName": "","courseModule": ""}response = requests.get(f"{base_url}/course/page", headers=headers, params=params)# 打印响应详细信息print("Status Code:", response.status_code)print("Headers:", response.headers)print("Response Text:", response.text)# 断言部分assert response.status_code == 200assert response.headers["Content-Type"] == "application/json"data = response.json()# 检查响应中的具体字段assert data["code"] == "200"assert "msg" in dataassert "data" in datacourse_data = data["data"]assert "total" in course_dataassert "data" in course_dataassert len(course_data["data"]) > 0# 检查第一个课程的具体字段first_course = course_data["data"][0]assert "id" in first_courseassert "name" in first_courseassert first_course["name"] == "微表情专业课"
全部代码实例如下:
import requests
import pytest@pytest.fixture
def base_url():return "http://localhost:8081"@pytest.fixture
def login_payload():return {"username": "admin","password": "123","captcha": "12","uuid": "10f53b80-d83f-4431-8fb2-09280942522a"}@pytest.fixture
def token(base_url, login_payload):response = requests.post(f"{base_url}/user/login", json=login_payload)assert response.status_code == 200data = response.json()assert data["code"] == "200"token = data["data"]["token"]return tokendef test_course_page(base_url, token):headers = {"Token": token}params = {"pageNum": 1,"pageSize": 10,"name": "微表情","teacherName": "","courseModule": ""}response = requests.get(f"{base_url}/course/page", headers=headers, params=params)# 打印响应详细信息print("Status Code:", response.status_code)print("Headers:", response.headers)print("Response Text:", response.text)# 断言部分assert response.status_code == 200assert response.headers["Content-Type"] == "application/json"data = response.json()# 检查响应中的具体字段assert data["code"] == "200"assert "msg" in dataassert "data" in datacourse_data = data["data"]assert "total" in course_dataassert "data" in course_dataassert len(course_data["data"]) > 0# 检查第一个课程的具体字段first_course = course_data["data"][0]assert "id" in first_courseassert "name" in first_courseassert first_course["name"] == "微表情专业课"# 运行测试
if __name__ == "__main__":pytest.main(["-s", "test_course_page.py"])
运行结果:

更新参数,模拟登录失败的情况

类似的我们可以将参数改为可以动态录入,可以将其定义为函数的参数,并通过函数调用传递不同的参数值。这样可以使测试更加灵活,并且可以轻松地重复执行相同的测试用例以覆盖不同的情况。
相关文章:
自动化测试--利用pytest实现整条业务链路测试
概述 前面一章讲解了单个接口的测试,但是实际项目中,因为权限和登录状态的限制,大部分接口没办法直接访问到,这时候我们想访问到一个系统的接口,就需要模拟用户登录拿到用户的token和所拥有的权限之后再将这些信息…...
学习其他推理判断
学习其他推理判断 1.类比推理1.1语义关系1.2逻辑关系1.3 语法关系2.定义判断3.翻译推理3.1前推后:A→B3.2后推前:B→A3.3推理规则4.组合排列5.日常结论6.逻辑论证6.1削弱题型6.2加强题型7.原因解释1.类比推理 类比推理:给出一组相关的词,通过观察分析,在备选答案中找出一组…...
Centos7环境下MySQL5.7.38 安装开源审计插件 mysql-audit
MySQL安装开源审计插件 mysql-audit MySQL 5.7.38安装审计插件 mysql-audit安装MySQL1.查看Linux服务器版本和glibc版本2.根据自己的系统下载对应的MySQL版本,由于mysql-audit并不支持所有版本的MySQL,所以在确定MySQL版本之前请注意下插件支持的MySQL版…...
基于深度学习的表情识别系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人工智能技术的快速发展,表情识别成为了人机交互领域的一个研究热点。表情识别技术旨…...
Debug-010-git stash的用法及使用场景
问题原因: 其实也不是最近,就是之前就碰到过这个问题,那就是我正在新分支开发新功能,开发程度还没有到可以commit的程度,我不想提交(因为有些功能没有完全实现,而且没有自测的话很容易有问题,提…...
RustGUI学习(iced/iced_aw)之扩展小部件(二十五):如何使用tab部件来创建tab多页面切换?
前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第二十五篇,主要讲述tab页面切换部件的使用,会结…...
P2P服务端模型配合 Tool.net P2pServerAsync 类使用
Tool.Net 支持的 P2P 服务器模型实例 说明服务器部分相关代码相关调用实例Tcp版本Udp版本 最后附一张思维图 说明 当前文章,仅是Tool.Net 开源库的一个缩影。本次更新V5.0版本以上提供支持。可以提供简单实现P2P功能用于业务开发。 服务器部分相关代码 完整代码&…...
Python语法学习之 - 生成器表达式(Generator Expression)
第一次见这样的语法 本人之前一直是Java工程师,最近接触了一个Python项目,第一次看到如下的代码: i sum(letter in target_arr for letter in source_arr)这条语句是计算source 与 target 数组中有几个单词是相同的。 当我第一眼看到这样…...
docker所在磁盘空间不足 迁移数据
1.查看原始目录docker info | grep "Docker Root Dir" 一般在/var/lib/docker 2.停止docker service docekr stop 3.移动数据 注意 移动前不要创建docker目录! mv /var/lib/docker /home/docker 4.进入目录查看是否与原始目录相同,确认一…...
15、24年--信息系统管理——管理要点
1、数据管理 数据管理使指通过规划、控制与提供数据和信息资产的职能,包括开发、执行和监督有关数据的计划、策略、方案、项目、流程、方法和程序,以获取、控制、保护、交付和提高数据和信息资产价值。 DCMM定义了数据战略、数据治理、数据架构、数据应用、数据安全、…...
如何使用 CapSolver 扩展找到 Google reCAPTCHA 站点密钥?
网站安全性在当今至关重要,Google reCAPTCHA 作为防止垃圾邮件和滥用行为的前线防御系统起着关键作用。reCAPTCHA 站点密钥是确保网站交互由人类驱动的唯一标识符。了解如何找到这个密钥对于网站管理员和开发人员来说至关重要。 什么是 reCAPTCHA 站点密钥 reCAPT…...
安卓分身大师4.6.0解锁会员安卓14可用机型伪装双开多开
需登录解锁会员功能,除了加速进入不能, 其他主要功能都是可以使用,由于验证较多一些功能需要特定操作使用,进行伪装时请不要直接伪装,先生成成功后再进行自定义伪装!链接:https://pan.baidu.com…...
攻防世界-mobile-easy-app详解
序言 这道题网上很多分析,但是分析的都是arm版本的,我选了arm64的来分析,arm64相比arm难度高一些,因为arm64编译器搞了inline优化,看起来略抽象 分析 这道题逻辑很简单,输入flag然后一个check函数验证&a…...
【简单介绍下爬山算法】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...
Android App启动流程和源码详解
前言 之前看了些App启动流程的文章,但是看得很浅显,隔了没多久就忘了,自己抓耳挠腮的终于看完了,看得头疼哦。因为很多是个人理解,大哥们主打一个7分信,2分思考,1分怀疑哈。 主要看的源码是An…...
SQL的多表联查
这里我先附上两张表的数据: Orders 表: OrderIDCustomerID1321324NULL Customers 表: CustomerIDCustomerName1Alice2Bob3Charlie4David INNER JOIN 🤝 概念: INNER JOIN(内连接)返回两个表中匹配的记录。如果某条…...
瑞芯微RV1126——人脸识别源码分析
本节内容主要分为3部分,第一部分是流程结构图;第二部分为人脸识别代码流程;第三部分为具体的代码分析。 1.流程结构图 2.人脸识别代码流程 1、人脸数据的初始化: init_all_rockx_face_data();init_face_data();2、创建rtsp会话,这里包括发…...
springboot 两个相同类型的Bean使用@Resouce加载
问题描述 有两个相同类型的Bean 使用Service等注解注入或者Bean注入启动以后报错: qualifying bean of type com.fasterxml.jackson.databind.ObjectMapper available: expected single matching bean but found 2提示有相同的类型两个。 解决 * 每个Bean Resour…...
代码随想录算法跟练 | Day3 | 链表Part1
个人博客主页:http://myblog.nxx.nx.cn 代码GitHub地址:https://github.com/nx-xn2002/Data_Structure.git Day3 203.移除链表元素 题目链接: https://leetcode.cn/problems/remove-linked-list-elements/ 题目描述: 给你一个…...
虚拟化技术[1]之服务器虚拟化
文章目录 虚拟化技术简介数据中心虚拟化 服务器虚拟化服务器虚拟化层次寄居虚拟化裸机虚拟化VMM无法直接捕获特权指令解决方案 服务器虚拟化底层实现CPU虚拟化内存虚拟化I/O设备虚拟化 虚拟机迁移虚拟机动态迁移迁移内容:内存迁移迁移内容:网络资源迁移迁…...
IDM激活工具使用指南:长期使用IDM的技术方案详解
IDM激活工具使用指南:长期使用IDM的技术方案详解 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager(IDM…...
拆解RTX4090 24G GPU服务器,一文摸清硬件搭配逻辑
RTX4090 24G GPU凭借NVIDIA Ada Lovelace架构优势,以16384个CUDA核心、24GB GDDR6X显存、1008GB/s显存带宽的核心参数,成为个人开发者、中小企业、科研机构的首选算力核心,广泛应用于大模型训练、AI推理、工业仿真、视频渲染等场景。据IDC 20…...
微信小程序框架详解
小程序包含一个描述整体程序的app实例和多个描述页面的page。其中app由三个文件构成:公共配置app.json、公共样式app.wxss、主体逻辑app.js。每个page最多由四个文件构成:页面配置page.json、页面结构page.wxml、页面样式page.wxss、页面主体逻辑page.js。 微信小程序的主体部…...
如何快速掌握GBFR Logs:终极《碧蓝幻想:Relink》战斗数据监控指南
如何快速掌握GBFR Logs:终极《碧蓝幻想:Relink》战斗数据监控指南 【免费下载链接】gbfr-logs GBFR Logs lets you track damage statistics with a nice overlay DPS meter for Granblue Fantasy: Relink. 项目地址: https://gitcode.com/gh_mirrors/…...
如何用30美元自制AI智能眼镜?OpenGlass开源项目全解析
如何用30美元自制AI智能眼镜?OpenGlass开源项目全解析 【免费下载链接】OpenGlass Turn any glasses into AI-powered smart glasses 项目地址: https://gitcode.com/GitHub_Trending/op/OpenGlass 想象一下,你正在博物馆参观,眼前是一…...
RoboStudio6.08学习记录(2)
工业机器人工作站的构建1.在文件功能选项卡中,选择“创建”,单击“创建”或“空工作站”,创建一个新的工作站,如图2-1所示。图2-1 创建新工作站2.在“基本”功能选项卡中,打开“ABB模型库”,如图2-2所示。…...
春节前必看:春联生成模型-中文-base部署教程,轻松制作专属对联
春节前必看:春联生成模型-中文-base部署教程,轻松制作专属对联 春节将至,家家户户都开始准备贴春联。但每年想一副既传统又有新意的对联可不容易,要么是市场上买的千篇一律,要么自己创作又缺乏灵感。今天,…...
SEO_如何制定有效的SEO策略?分步指南(132 )
如何制定有效的SEO策略?分步指南 在互联网时代,一个网站的成功往往取决于其在搜索引擎上的排名。制定有效的SEO策略是提升网站流量、吸引潜在客户的关键。本文将为你提供一份详细的分步指南,帮助你制定并实施有效的SEO策略。 第一步&#x…...
sguard_limit:如何彻底解决腾讯游戏反作弊系统导致的电脑卡顿问题
sguard_limit:如何彻底解决腾讯游戏反作弊系统导致的电脑卡顿问题 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源,支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 你是否在玩腾讯游戏时遇到过…...
文脉定序保姆级教程:3步完成BGE-Reranker-v2-m3镜像免配置部署
文脉定序保姆级教程:3步完成BGE-Reranker-v2-m3镜像免配置部署 你是否遇到过这样的烦恼?用自己搭建的知识库或者搜索引擎提问,系统确实返回了一大堆结果,但最相关、最准确的答案却淹没在列表的中间甚至末尾。传统的检索方法&…...
