当前位置: 首页 > news >正文

自动化测试--利用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设备虚拟化 虚拟机迁移虚拟机动态迁移迁移内容:内存迁移迁移内容:网络资源迁移迁…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

synchronized 学习

学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

OpenLayers 分屏对比(地图联动)

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

第八部分:阶段项目 6:构建 React 前端应用

现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...