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

【自动化测试】使用MeterSphere进行接口测试

  • 一、接口介绍
  • 二、接口测试的过程
  • 三、接口自动化测试
    • 执行自动化流程
  • 四、接口之间的协议
    • HTTP协议
  • 五、 接口测试用例设计
    • 接口文档
  • 六、使用MeterSphere创建接口测试
    • 创建接口定义
    • 设计接口测试用例

一、接口介绍

自动化测试按对象分为:单元测试、接口测试、UI测试等。
接口是指系统或组件之间的交互点,通过这些交互点可以实现数据的交互。接口就好像一根水管,通过这根水管可以把水房的水传输每家每户,而这根水管的容量大小就决定了传输的水容量,水管越粗,一个时间点内流通的水的体积就越大,也就是说接口的传输容量就决定了服务器向客户端一次传输的数据大小,而对于系统的接口就是方法与方法之间、模块与模块之间的交互,主要是校验数据的交换、传递和控制管理过程,以及相互逻辑依赖关系。

二、接口测试的过程

大体流程: 使用工具(Jmeter、postman),模拟客户端向服务器发送请求,服务器接收请求后进行相应的业务处理,然后向客户端返回响应数据,最后检查响应数据是否符合预期。

具体流程: 发送请求->解析结果->验证结果。 简单来说,接口测试就是参照接口文档,调用接口,看结果的返回是否跟文档说明一致;另外,再测试一下接口对异常逻辑的处理比如非法参数或边界值。
在这里插入图片描述

上图是一个典型的测试金字塔模型,在这个模型中,越往下比例会占的越高,也就是说在一个软件测试中,单元测试比例是最高的,依次是接口测试和 UI 自动化测试,接口测试在中部,承上启下,由此可见其重要性。

三、接口自动化测试

接口自动化测试是什么?
简单说自动化测试是把人为操作的测试行为转化为机器执行的一种过程。

接口自动化测试的好处

不管什么样的测试方式,都是为了验证功能与发现 bug。要做接口测试自动化就是为了节省人力成本。具体来说,包括以下几点:

  1. 减轻自己工作量,把测试从枯燥的重复劳动的人工测试中解放出来;
  2. 协助手工测试完成很难模拟或无法模拟的的工作;
  3. 提高工作效率,比如测试环境的自动化编译、打包、部署、持续集成甚至持续交付等;
  4. 协助定位问题,比如通过接口层发现的问题定位问题所在的模块;
  5. 尽早发现 bug,自动通知测试人员。一旦发现问题,立即通知测试人员,快速高效;
  6. 提高软件质量和稳定性,减少潜在风险,提供稳定可靠的软件。

执行自动化流程

  1. 接口文档:接口请求、响应定义清晰、接口参数说明清晰、接口状态准确
  2. 环境管理:包括测试环境和线上环境、脚本和数据在测试环境、线上环境通用、功能测试环境混用
  3. 脚本管理:管理路径:空间-项目-模块-场景(具体软件具体操作)、重复场景复用、减少维护成本、必须添加断言
  4. 场景管理:场景设计用例评审、场景优先级维护、场景状态及时维护更新
  5. 执行频次:新增测试计划执行自动化任务,设计定时任务和通知信息、每天上午6-8点自动化执行所有已完成的自动化脚本、冲刺上线前手动执行相关的业务场景脚本

四、接口之间的协议

接口之间互相调用也需要遵循一定的规则,这个规则就是网络协议,如:http协议、tcp协议,rpc协议。

HTTP协议

HTTP: (HyperText Transfer Protocol)超文本传输协议,是一个基于请求与响应模式的、应用层的协议,也是互联网上应用最为广泛的一种网络协议。

下图是HTTP的URL:

在这里插入图片描述

HTTP请求: 包含4个部分,首行,请求报头,空行,正文

1.首行: 包含三个部分,之间使用空格分隔。1、get /post(http方法) 2、url唯一资源定位符 ;3、http/1.1 版本号(GET https://www.baidu.com/ HTTP/1.1)

  • GET、POST:一般一个url的请求通常使用get和post两种方法,当然还有其他的请求方法。GET一般是向服务器获取资源,POST一般是向服务器提交数据。在浏览器地址栏直接输入url和html里面的link,script,img,a…,或者通过js构造get请求,这些都会生成get请求。get请求内容里有首行,header,空行就没了;post的典型场景是登录,上传文件,内容里有首行,请求头header,空行,正文body。所以http请求分为四个部分:首行,请求头,空行,正文。get请求没有正文,正文内容格式是程序猿自己定义。
  • Url:最关键四个部分,协议名称//域名:端口号//带层次的路劲?查询字符串。http默认端口80,https默认端口443

2 .请求报头: 请求头部由键值对组成,每行一对。 请求头部通知服务器有关于客户端请求的信息,典型 的请求头有:

  • host:表示服务器所在地址和端口,表示最终要访问的目标,大概率和url里的是一样的

  • content-length:body里的数据长度

  • content-type:body里的数据格式。get请求没body,就没这两个content字段,post有body,就必须有这两个字段。content-type取值范围:text/html、application/json、image/png…等

  • user-agent(UA):以前服务器根据这个字段来判断要发送什么样的响应,要不要带图片、视频等,现在主要用于区分pc端和移动端。

  • referer:表示当前页面的来源,通过收藏夹、手动输入url是没有referer的。通过跳转的网页才会带有referer,表示从哪个网页跳转过来的。

  • cookie:本质上是浏览器给网页提供的本地存储数据的机制。网页是默认不允许访问计算机的硬盘,但是由于需要在本地存储一些数据,所以提供了一个cookie,此时网页就可以去操作cookie。cookie通过键值対方式组织数据,存储的是程序员自定义内容。键值用=分割,键值対之间用;分割。
    请添加图片描述

3.空行: 表示请求头的结束标记。
4.正文(body): 请求头content-type指定什么类型,就决定正文的数据怎么组织的,具体数据是程序猿决定的。比如登录场景:使用POST方法,一般把账号和密码放入body里;而使用GET方法,一般把请求的参数放入query String里。

  • query string:是以?开头,键值对方式组织,键值对之间用&分隔,键值直接用=分隔。
    请添加图片描述

HTTP响应: 四个部分构造,首行(版本号,状态码,状态码描述)、header响应头(键值対格式)、空行(表示header的结束标记)、正文。
请添加图片描述

  • 状态码:表示此次请求的结果,成功or失败。分为1** 等待、2** 成功、3** 重定向、4** 客户端错误、 5** 服务器错误。
  • 200 OK
  • 404 Not Found 访问资源不存在,在服务器上没找到。
  • 403 Forbidden 访问被拒绝,没有权限访问
  • 302 Move temporarily 重定向,在header里有个location属性,通过这个属性描述要跳转到哪个新页面。重定向是服务器返回一个新地址让客户端重新访问,两次相互;请求转发是服务器自己访问新的网站然后把新的结果返回给客户端,一次交互。
  • 500 服务器内部错误,服务器代码抛异常 504 gateway timeout 请求超时,服务器响应时间太久

五、 接口测试用例设计

接口文档

在这里插入图片描述
接口文档: 又称为API文档,一般是由开发人员所编写的,用来描述系统所提供接口信息的文档。 大家都根据这个 接口文档进行开发,并需要一直维护和遵守。

一个规范的接口文档,要包含以下信息:

  1. 基本信息: 接口名称、请求方法、请求路径、接口描述
  2. 请求参数: 请求头,请求体(包含具体的请求参数名称、参数类型、是否必须、示例、备注)
    返回数据
  3. 不同情况的响应状态码
  4. 响应数据 (包含具体的响应数据名称、类型、是否必须、默认值、示例、备注)

六、使用MeterSphere创建接口测试

前面说过一般接口测试工具可以使用Jmeter和Postman,但是我使用的是MeterSphere,这是我在实习中企业使用的一款不错的平台。 因为MeterSphere 是一站式开源持续测试平台,涵盖测试跟踪、接口测试、UI 测试和性能测试等,全面兼容 JMeter、Selenium 等主流开源标准,有效助力开发和测试团队在线共享协作,实现端到端的测试管理跟踪可视化、自动化测试、性能测试及融入持续交付 DevOps 体系,并充分利用云弹性进行高度可扩展的自动化测试,从而加速高质量的软件交付,推动中国测试行业整体效率的提升。

具体操作可以看官网文档:

  • MeterSphere官方文档
  • MeterSphere接口测试文档
  • MeterSphere接口自动化测试文档

创建接口定义

注意:这是企业里使用的,一般来说需要有企业管理员授权,给你一个账号才能登录进去使用。

目标: 测试MeterSphere的登录接口
URL: http://192.168.62.51:8079/signin

进入MeterSphere,点击左侧任务栏,选中【接口测试】,紧接着选择【接口定义】,进入下图页面

在这里插入图片描述

创建一个接口

在这里插入图片描述

此时打开了创建接口页面,输入相关内容
1、请求栏部分:完整的请求地址是 http://192.168.62.51:8079/signin ,但是此处的url只用输入接口的URL,也就是/signin,选择POST请求方法
2、选中请求体
3、选择JSON格式
4、根据接口文档,输入请求体内容,或者通过Fiddler抓包,抓到该URL请求里的请求体内容
5、点击保存

在这里插入图片描述

配置该接口的使用环境
点击两处任意一处,进入编辑页面
在这里插入图片描述

在编辑接口页面,右上角的下拉框,选中【环境配置】

在这里插入图片描述

进入到环境配置页面
1、点击左上角【+】,新建一个环境,选中【HTTP配置】
2、环境域名:以完整的请求地址是 http://192.168.62.51:8079/signin ,那么此处就填写域名为192.168.62.51:8079
3、点击右下角【添加】
4、点击右上角【确定】,完成配置

在这里插入图片描述

执行接口测试
1、选中刚才配置的环境
2、点击【测试】
3、执行接口测试后,会返回一个响应结果

在这里插入图片描述

设计接口测试用例

  1. 可以更换请求方法,进行测试
  2. 可以点击【请求体】,把请求体里的参数更换,比如输入有效、无效参数、不输入参数,进行测试
  3. 可以更换传参的格式进行测试,比如请求体里使用JSON格式传参,XML传参;或者使用QUERY参数传参

相关文章:

【自动化测试】使用MeterSphere进行接口测试

一、接口介绍二、接口测试的过程三、接口自动化测试执行自动化流程 四、接口之间的协议HTTP协议 五、 接口测试用例设计接口文档 六、使用MeterSphere创建接口测试创建接口定义设计接口测试用例 一、接口介绍 自动化测试按对象分为:单元测试、接口测试、UI测试等。…...

C语言 main( ) 函数的指针数组形参是怎么回事?

一、问题 在使⽤⼀些开发⼯具⽣成C语⾔⽂件时,主函数 mian( ) 中会有参数,这个参数到底是怎么回事⼉呢? 二、解答 mian( ) 称为主函数,是所有程序运⾏的⼊口。 mian( ) 函数是由系统调⽤的,当处于操作命令状态下&…...

汽车 - 什么是车轮抱死

车轮抱死分为两种情况,一种是车辆故障层面,另一种是驾驶过程中的物理现象。我们先来说最通俗的刹车车轮抱死吧。 刹车制动车轮抱死 车轮停止轴向转动就是抱死,有速度的情况下抱死车轮,如果车辆的惯性动能大于轮胎抓地力&#xff0…...

环保设备统一管理系统

在环保意识日益增强的今天,企业如何有效管理环保设备,确保其正常运行,减少环境污染,成为了一个重要议题。HiWoo Cloud平台以其独特的环保设备统一管理系统,为企业提供了一套完整的解决方案,帮助企业实现绿色…...

python 11Pandas数据可视化实验

实验目的: 学会使用Pandas操作数据集,并进行可视化。 数据集描述: 该数据集是CNKI中与“中药毒理反应”相关的文献信息,包含文章题目、作者、来源(出版社)、摘要、发表时间等信息。 实验要求&#xff1…...

【JUC】并发编程 AQS,ReentryLock,CyclicBarrier,CountDownLatch 原理总结

AQS AQS是什么?重写AQS就能实现锁的效果? AQS是一个抽象类,是一个并发包的基础组件,用来实现各种锁,同步组件的工具(通过volatile cas进行实现)。它包含了共享成员变量state、等待队列、条件…...

移动端底层事件(如左滑返回事件)在同一个路由下不同页面需要不同的处理要怎样才能做到统一处理?

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐,直接移步总结即可! 一、问题 1.测试提了个bug:进入了一个模块A里面的子页面 a1,左滑后按照用户预期应该是返回到模块A,结果回到了app首页。 二、解决方法 1.一开始:啊,…...

hive中开窗函数row_number的使用

row_number()函数介绍 row_number()开窗函数的一种,和over()函数结合一起使用,可以实现对数据的分组和排序。 使用示例 现在有一张表,数据如下 ----------------------- | Year | Region | Sales | ----------------------- | 2022 | E…...

华为数据之道第三部分导读

目录 导读 第三部分 第7章 打造“数字孪生”的数据全量感知能力 “全量、无接触”的数据感知能力框架 数据感知能力的需求起源:数字孪生 数据感知能力架构 基于物理世界的“硬感知”能力 “硬感知”能力的分类 “硬感知”能力在华为的实践 基于数字世界的…...

【Qt】常用控件(一)

文章目录 一、核心属性1、enabled代码示例: 通过按钮2 切换按钮1 的禁用状态 2、geometry代码示例: 控制按钮的位置代码示例:window frame 的影响代码示例: 感受 geometry 和 frameGeometry 的区别 3、windowTitle4、windowIcon代码示例: 通过 qrc 管理图片作为图标…...

Python基础之流程控制语句

在Python中流程控制语句包括条件控制语句、循环语句、以及控制流程循环语句等,下面我们就来详细介绍一下这些语句的使用。 条件语句 首先我们来看条件语句,条件语句是需要根据不同的判断条件来执行不同的代码操作,如下所示。 if 条件1:执行语句块1 elif 条件2:执行语句块…...

2024蓝桥杯网络安全部分赛题wp

爬虫协议 题目给了提示访问robots.txt 会出三个目录 访问最后一个 点进去就flag{22560c15-577c-4c8b-9944-815473758bad} packet 下载附件,这个是流量包 放wireshark流量分析 搜http协议 发现有cat flag命令,直接看他返回的流量 最后base64解码即可…...

Android版本依赖Version catalog

曾经我们使用config.gradle文件进行版本依赖配置,然后在project的build.gradle.kts中使用如下方式引入: apply(from "./config.gradle") 缺点:在project的module中引用无任何提示,无法跳转到指定引用 一、创建versio…...

Redis---------实现商品秒杀业务,包括唯一ID,超卖问题,分布式锁

订单ID必须是唯一 唯一ID构成: 代码生成唯一ID: import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.tim…...

C++之QT文本处理QDir、QFileDialog、QStringList、QFile

一、相应的头文件 #include <QFileDialog> #include <QDir> #include <QStringList> 二、简介 1.QFileDialog 实际效果如下&#xff1a;比如需要选择打开的文件夹或者文件名&#xff0c;通过调用资源管理器的方式进行可视化操作。 代码示例为&#xff1a…...

24.5.8数据结构|单向循环链表

一、理解原理&#xff1a; 初始状态&#xff1a; 1、对比前两种的不同之处 1&#xff09;保存到栈空间&#xff08;局部变量&#xff09;。静态初始化。 2&#xff09; 二、代码实现 1、initLinkLoop函数 疑问&#xff1a; 1、地址怎么处理&#xff1f; 注意&#xff1…...

2024年,抖音小店开通需要多少钱?一篇详解!

大家好&#xff0c;我是电商糖果 2024年了&#xff0c;想在抖音开店卖货的朋友越来越多。 主要原因还是看到&#xff0c;这几年在抖音上赚到钱的人越来越多。 于是大家在今年比较关心的问题&#xff0c;就是抖音小店开通需要多少钱&#xff1f; 糖果做抖音小店四年了&#…...

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷1(私有云)

#需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包…...

Python数据可视化------地图

基础地图使用 # 地图基本演示 # 导包 from pyecharts.charts import Map from pyecharts.options import TitleOpts, VisualMapOpts# 准备地图对象 cmap Map() # 准备数据&#xff08;列表&#xff09; data [("北京市", 99), ("上海市", 199), ("…...

Rust中的并发性:Sync 和 Send Traits

在并发的世界中&#xff0c;最常见的并发安全问题就是数据竞争&#xff0c;也就是两个线程同时对一个变量进行读写操作。但当你在 Safe Rust 中写出有数据竞争的代码时&#xff0c;编译器会直接拒绝编译。那么它是靠什么魔法做到的呢&#xff1f; 这就不得不谈 Send 和 Sync 这…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...