metersphere接口测试(1)使用MeterSphere进行接口测试
文章目录
- 前言
- 接口文档
- 单接口测试
- 环境配置
- 梳理接口测试场景
- 测试接口
- 接口自动化
- 怎么写复用性高的自动化测试用例
- 总结
前言
大汉堡工作第203天,本篇记录我第一次接触接口测试任务,最近有些懈怠啊~
接口文档
- 首先就是接口地址,接口测试时用来访问接口。如果一个接口分为两个或多个不同的地址则需要分开进行测试,。

- 接下来就是定义接口的请求方式,post方法是向指定资源提交数据,请求服务器进行处理。

请求方式除了post外,还有Get、PUT、DELETE、HEAD、OPTIONS。 - 入参示例和请求参数,作用是理解输入格式,构建请求体;设计测试用例。


- 请求头(Request Headers)参数作用是定义客户端如何与服务器通信,对测试人员的作用主要有四点:①告诉服务器请求体中的数据格式②身份验证,确保只有经过授权的用户才能访问受保护的资源③提供用户代理信息:发起请求的客户端类型(如浏览器版本、操作系统等)④定制化请求行为:会话ID、语言偏好等

- sign生成规则,放在接口的前置条件里,生成sign(签名),主要是为了确保请求的安全性和完整性。有效性一般不验证,都是3分钟或者用后即焚,目的是为了防止别人盗用。

- 响应参数以及响应示例的作用是帮助测试人员了解API在不同情况下的预期输出,包括成功和错误场景;验证接口的正确性。可以根据这些信息来设计测试用例,确保所有可能的输出都被覆盖


单接口测试
环境配置
首先是配置测试环境,目的是为了确保测试能够在正确的上下文中运行。

通用配置是配置一些全局参数,本次我没有使用到。HTTP配置里配置根URL,请求头里的Authorization设置为${token},代表了访问特定接口所需的认证令牌。

全局前置脚本的目的是为了在所有测试用例执行前统一处理一些公共逻辑,如登录获取token、初始化变量等,从而简化测试用例编写并提高测试效率。
下面的全局前置脚本的作用是执行一次登录操作以获取认证token,并将该token存储为全局变量供后续测试用例使用,使用beanshell语言,脚本执行顺序为步骤内前置脚本前。

梳理接口测试场景
使用xmind或者其他工具先简单梳理一下接口测试场景。一是因为一些接口的case执行需要他上游的接口先执行一次,比如积分解冻接口,需要先执行积分冻结接口,不然就可能报如下错误:

测试接口
- 添加接口
按照接口文档要求填写参数,请求头可以不写全不影响。因为接口文档里的请求头有的需要写在case里的前置操作里,值没有确定时不方便填写;若是确定值可以填写。通常建议至少包含Content-Type。

如果之后的接口测试用例出现了以下报错 –Authorization: Basic Og==,需要将接口的认证方式改为No Auth:

- 单接口测试(以一条正向用例举例)
API保存完后点击CASE添加接口测试用例

请求头中的参数需要前置脚本生成时先编写前置脚本

正确填写请求头,这里需要填写完整。

正确填写请求体

最后添加断言规则,不会写正则表达式的可以使用JSONPath来进行判断。JSONPath需要先执行调试获取响应结果。

执行完成之后点击推荐JSONPath断言,在出来的窗口中选择需要断言的数据即可。

这样一条正向的接口测试用例就编辑好了。逆向的测试用例根据需要修改数据即可。
接口自动化
- 点击接口自动化,全部场景里可添加子模块

点击右下角指南针一样,一直在转圈的按钮可以导入之前写好的接口测试用例

选择CASE,这里有复制和引用两个按钮
- 复制:点击 “复制” 按钮,会将选中的接口用例数据(如 “退回不正确的积分” 等用例)进行复制操作,生成一个与原用例完全相同的副本,该副本独立于原用例,后续对副本的修改不会影响原用例,反之亦然。比如复制了 “退回不正确的积分” 用例后,修改副本的 API 路径等信息,原用例的相关信息不会改变。
- 引用:点击 “引用” 按钮,是创建一个对选中接口用例的引用关系。被引用的用例与原用例指向同一份数据,若原用例发生变化(如修改了用例名称、API 路径等),通过引用使用该用例的地方也会同步变化。例如原 “退回不正确的积分” 用例的 API 路径被修改,那么引用该用例处显示的 API 路径也会随之改变。
根据需要的场景进行选择,这里我都是选的复制。

根据测试场景选择好对应的case,编排好case的顺序就可以执行自动化测试了

怎么写复用性高的自动化测试用例
比如在编写一个成功消费积分再退回的场景时,我的接口顺序如下:积分余额查询;组合支付积分冻结成功;组合支付积分扣减成功;积分余额查询;成功退回积分;积分余额查询
积分余额里的断言是写死的,等于固定值。
举个例子:执行了积分冻结和积分扣减接口操作后,剩余的积分还有760分,所以第二个积分余额接口的断言就直接用JSONPath拿取积分数据和760对比。
那这样只要我传入token的测试账号的积分发生变化,这个场景里的第二个积分余额查询断言就会发生错误,那该怎么处理这个问题呢?

解决办法之一就是使用全局变量,使用代码逻辑来进行判断。
全局变量可以在后置操作里提取,有两种方法
- 使用JSONPath提取变量:适用于不需要进行运算的变量
eg:JSONPath表达式:$.data.point ;变量名:point_before_deduction - 使用脚本编写变量:适用于需要进行运算的变量
eg:def expectedPoint = point_before_deduction - deduction_point
vars.put(“expectedPoint”, expectedPoint.toString())
定义完全局变量后就可以在断言里使用了。根据上面的例子,在第一个接口的后置操作里提取未进行扣减操作的积分。

第三个扣减积分的接口提取扣减的积分的值

第四个接口,积分余额查询接口JSONPath提取扣减完的积分的值,后置脚本计算期望的积分值并放入全局变量。

再在断言里添加脚本进行判断
PS:建议自己写脚本或者交给AI写,系统自己生成的代码总是出错

同样的操作再在最后一个积分查询接口执行一次,问题解决。这样不管传入token的测试账号的积分如何变化我都不需要维护脚本了。

总结
文章首先介绍了接口文档,如地址、请求方式等要素。接着阐述单接口测试流程,从环境配置到用例编写。最后介绍接口自动化,包括导入用例、编写高复用性用例及解决断言问题的办法 。
相关文章:
metersphere接口测试(1)使用MeterSphere进行接口测试
文章目录 前言接口文档单接口测试环境配置梳理接口测试场景测试接口 接口自动化怎么写复用性高的自动化测试用例 总结 前言 大汉堡工作第203天,本篇记录我第一次接触接口测试任务,最近有些懈怠啊~ 接口文档 首先就是接口地址,接口测试时用…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.2成本优化与冷热数据分离
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 8.2.2AWS OpenSearch Serverless 成本优化与冷热数据分离深度实践1. 成本构成分析与优化机会识别1.1 Serverless模式成本分布1.2 冷热数据特征分析数据特征矩阵 2. 冷热数据…...
MTK Android12 安装app添加密码锁限制
提示:通过安装前输入密码的需求,来熟悉了解PMS 基本的安装流程 文章目录 一、需求实现需求原因提醒 二、UML图-类图三、参考资料四、实现效果五、需求修改点修改文件及路径具体修改内容 六、源码流程分析PMS的复杂性代码量实现aidl 接口PackageManagerSe…...
Redis 集合(Set)
Redis 集合(Set) Redis 是一款高性能的键值数据库,以其高性能、易用性以及丰富的数据结构而广受欢迎。在 Redis 中,集合(Set)是一种重要的数据结构,它支持多种操作,如添加、删除、查找元素,以及集合间的运算。本文将详细介绍 Redis 集合的特点、操作和应用场景。 Redi…...
[数据结构]堆详解
目录 一、堆的概念及结构 二、堆的实现 1.堆的定义 2堆的初始化 3堆的插入 编辑 4.堆的删除 5堆的其他操作 6代码合集 三、堆的应用 (一)堆排序(重点) (二)TOP-K问题 一、堆的概念及结构 堆的…...
基于Python+Vue开发的旅游景区管理系统源码+运行步骤
项目简介 该项目是基于PythonVue开发的旅游景区管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的旅游景…...
SpringBoot使用Logback日志框架与综合实例
日志框架的使用,系列文章: 《SpringBoot使用Logback日志框架与综合实例》 《SpringBoot使用@Slf4j注解实现日志输出》 《Log4j2日志记录框架的使用教程与简单实例》 《SpringBoot使用AspectJ实现AOP记录接口:请求日志、响应日志、异常日志》 《SpringBoot使用AspectJ的@Arou…...
LInux中常用的网络命令
配置 IP 地址 1.1 配置 IP 地址 IP 地址是计算机在互联网中唯一的地址编码。每台计算机如果需要接入网络和其他计算机进行数据通信,就必须配置唯一的公网 IP 地址。 配置 IP 地址有两种方法: 1)setup 工具 2)vi /etc/sysconf…...
怎么实现: 大语言模型微调案例
怎么实现: 大语言模型微调案例 目录 怎么实现: 大语言模型微调案例输入一个反常识的问题:首都在北京天安门之后对输出模型进行测试:首都在北京天安门微调代码:测试微调模型代码:微调输出模型结构输出模型参数大小对比Qwen 2.5_0.5:53MB输出模型:951MB 是一样的,没有进行…...
快速学习Bootstrap前端框架
什么是 Bootstrap? Bootstrap 是一个开源的前端框架,用于快速开发响应式(Responsive)和美观的网页。它包含: ✅ HTML 组件(导航栏、按钮、表单等) ✅ CSS 样式(网格系统、排版、颜色等) ✅ JavaScript 交互(模态框、轮播图、工具提示等) 官网:Bootstrap The mo…...
KICK第四讲Linux 系统下安装 GCC 编译器全指南
Linux 系统下安装 GCC 编译器全指南 GCC(GNU Compiler Collection)是 Linux 系统下最常用的编译器之一,支持 C/C、Java 等多种编程语言。本文将介绍不同 Linux 发行版下的安装方法,帮助开发者快速配置开发环境。 一、使用包管理…...
深入理解 MySQL 锁:基于 InnoDB 的并发控制解析
在数据库并发访问管理中,MySQL 提供了强大的锁机制来保证数据的一致性和完整性。作为默认存储引擎的 InnoDB,为 MySQL 带来了细粒度的锁控制,使其成为高并发应用的理想选择。本文将深入探讨 MySQL 的锁类型、分类、应用场景及其对性能的影响&…...
Linux Nginx安装部署、注册服务
1、下载:https://nginx.org/en/download.html 下载nginx-1.27.4.tar.gz,上传到服务器 /opt/目录 在开始安装Nginx之前,首先需要安装一些依赖项,以确保Nginx编译和运行正常。打开终端并执行以下命令: yum install -y …...
安全的实现数据备份和恢复
📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…...
PGSQL基本使用
PGSQL基本使用 文章目录 PGSQL基本使用日期转换长度不够补数获取上下行取连续的开始和结束的值 日期转换 格式说明YYYY年MM月DD日hh2424小时制mi分钟ss秒 -- 日期字符串转指定日期字符串 -- 20250101123000 转为 2025-01-01 12:30:00 select to_char(to_timestamp(2025010112…...
excel中两个表格的合并
使用函数: VLOOKUP函数 如果涉及在excel中两个工作表之间进行配对合并,则: VLOOKUP(C1,工作表名字!A:B,2,0) 参考: excel表格中vlookup函数的使用方法步骤https://haokan.baidu.com/v?pdwisenatural&vid132733503560775…...
在 Windows 上快速部署 OpenManus:从安装到运行
在当今快速发展的 AI 领域,OpenManus 作为一个强大的开源工具,为开发者提供了便捷的 AI 应用开发体验。本文将详细介绍如何在 Windows 系统上安装并运行 OpenManus,帮助你快速搭建一个本地的 AI 开发环境。 一、安装 Anaconda Anaconda 是一…...
NLP常见任务专题介绍(4)-ConditionalGeneration和CasualLM区别
在 transformers 库中,ConditionalGeneration 和 CausalLM 是两种不同类型的语言模型,各自适用于不同的任务: 类别Conditional Generation (条件生成)CausalLM (因果语言模型)核心区别依赖输入 条件 生成文本只能 自回归 生成文本训练方式Encoder-Decoder(编码-解码) 结构…...
uniapp实现 uview1 u-button的水波纹效果
说明: 由于uview2已经移除水波纹效果,这边又觉得那个效果好看,所以开发这个功能(原谅我不会录动图) 效果: 具体代码: <view class"ripple-container" touchstart"handleTouchStart" touchend&…...
RabbitMQ报错:Shutdown Signal channel error; protocol method
报错信息: Shutdown Signal: channel error; protocol method: #method<channel.close>(reply-code406, reply-textPRECONDITION_FAILED - unknown delivery tag 1, class-id60, method-id80) 原因 默认情况下 RabbitMQ 是自动ACK(确认签收&…...
modbusrtu.h:5:10: error: ‘QSerialPort‘ file not found
解决 QSerialPort 头文件未找到的问题: 1. 确保已安装 Qt Serial Port 模块 QSerialPort 属于 Qt Serial Port 模块,需先确认已安装该模块。 安装步骤: 打开 Qt Maintenance Tool: 在开始菜单搜索并打开 Qt Maintenance Tool 选择当前安装的 Qt 版本,点击 “添加或移除…...
【后端】【django】导出 API 文档的几种方法
在 Django 项目里,导出 API 文档是很常见的需求,一般可以借助第三方库来实现。 使用 drf-yasg 导出 Swagger/OpenAPI 格式文档 drf-yasg 是一个用于 Django REST framework 的工具,能够自动生成 Swagger 和 OpenAPI 格式的 API 文档。 步骤…...
【Rust基础】Rust后端开发常用库
使用Rust有一段时间了,期间尝试过使用Rust做后端开发、命令行工具开发,以及做端侧模型部署,也尝试过交叉编译、FFI调用等,也算是基本入门了。在用Rust做后端接口开发时,常常会找不到一些合适库,而这些库在J…...
如何使用Cursor的claude-3.7模型来开发高保真的原型设计图,学会写好的提示词人人都是设计师
1、想要开发出高保真的设计图原型,需要给出cursor具体的提示词:比如我想开发一款IT面试题小程序,给出的提示词是这样的 我想开发一个 {IT面试题库小程序},现在需要输出高保真的原型图,请通过以下方式帮我完成所有界面…...
AGI大模型(5):提示词工程
1 什么是提示词工程(Prompt) 所谓的提示词其实指的就是提供给模型的⼀个⽂本⽚段,⽤于指导模型⽣成特定的输出或回答。提示词的⽬的是为模型提供⼀个任务的上下⽂,以便模型能够更准确地理解⽤户的意图,并⽣成相关的回…...
Redis Sentinel (哨兵模式)深度解析:构建高可用分布式缓存系统的核心机制
一、传统主从复制的痛点 在分布式系统架构中,Redis 作为高性能缓存和数据存储解决方案,其可用性直接关系到整个系统的稳定性。传统的主从复制架构虽然实现了数据冗余,但在面临节点故障时仍存在明显缺陷: 手动故障转移…...
微信小程序-实现锚点跳转,页面加载后自动跳转、点击跳转到指定位置
一、页面加载后滚动到指定位置,onLoad或onReady里执行。 scrollAfterLoading() {const query wx.createSelectorQuery()query.select(#cont1).boundingClientRect()query.selectViewport().scrollOffset()query.exec(function (res) {wx.pageScrollTo({scrollTop:…...
[LeetCode热门100题]|137,260,268,面试17.19
1、137 只出现一次数字|| 1、题目描述 137 只出现一次数字||https://leetcode.cn/problems/single-number-ii/description/ 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你…...
Android子线程更新View的方法原理
对于所有的Android开发者来说,“View的更新必须在UI线程中进行”是一项最基本常识。 如果不在UI线程中更新View,系统会抛出CalledFromWrongThreadException异常。那么有没有什么办法可以不在UI线程中更新View?答案当然是有的! 一…...
Kafka常用指令(详细)
Kafka常用指令(详细) 启停命令 前台启动 前台启动命令 ./bin/kafka-server-start.sh config/server.properties 后台启动方式1 后台启动命令加上参数-daemon,窗口关闭之后kafka后台程序继续运行 ./bin/kafka-server-start.sh -daemon co…...
