【自动化测试】使用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参数传参

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

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

相关文章

LeetCode 每日一题 Day 144-157

2385. 感染二叉树需要的总时间 给你一棵二叉树的根节点 root ,二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟,感染 将会从值为 start 的节点开始爆发。 每分钟,如果节点满足以下全部条件,就会被感染&#xf…

分类规则挖掘(三)

目录 四、贝叶斯分类方法(一)贝叶斯定理(二)朴素贝叶斯分类器(三)朴素贝叶斯分类方法的改进 五、其它分类方法 四、贝叶斯分类方法 贝叶斯 (Bayes) 分类方法是以贝叶斯定理为基础的一系列分类算法的总称。贝…

本地运行AI大模型简单示例

一、引言 大模型LLM英文全称是Large Language Model,是指包含超大规模参数(通常在十亿个以上)的神经网络模型。2022年11月底,人工智能对话聊天机器人ChatGPT一经推出,人们利用ChatGPT这样的大模型帮助解决很多事情&am…

解决问题:Docker证书到期(Error grabbing logs: rpc error: code = Unknown)导致无法查看日志

问题描述 Docker查看日志时portainer报错信息如下: Error grabbing logs: rpc error: code Unknown desc warning: incomplete log stream. some logs could not be retrieved for the following reasons: node klf9fdsjjt5tb0w4hxgr4s231 is not available报错…

KIE关键信息抽取——SDMG-R

https://arxiv.org/pdf/2103.14470https://arxiv.org/pdf/2103.14470 1.概述 背景:传统的关键信息提取方法依赖于模板匹配,这使它们难以泛化到未见过的模板,且对文本识别错误不够鲁棒。SDMG-R方法:提出一种端到端的双模态图推理方法,通过构建双模态图(视觉和文本特征),…

ROS服务器通信

目录 一、角色 二、流程 注意 三、例子描述 四、srv文件 编译配置文件 vscode配置 五、Server.cpp编写例子 编写CMakeList 六、观察server的效果 七、Client编写例子 编写CMakeList 八、观察Client的结果 九、Client优化(动态输入) 了解argc…

Go Web 开发 Demo【用户登录、注册、验证】

前言 这篇文章主要是学习怎么用 Go 语言(Gin)开发Web程序,前端太弱了,得好好补补课,完了再来更新。 1、环境准备 新建项目,生成 go.mod 文件: 出现报错:go: modules disabled by G…

[论文阅读] 测试时间自适应TTA

最初接触 CVPR2024 TEA: Test-time Energy Adaptation [B站](1:35:00-1:53:00)https://www.bilibili.com/video/BV1wx4y1v7Jb/?spm_id_from333.788&vd_source145b0308ef7fee4449f12e1adb7b9de2 实现: 读取预训练好的模型参数设计需要更…

Re69:读论文 LaMDA: Language Models for Dialog Applications

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称:LaMDA: Language Models for Dialog Applications ArXiv网址:https://arxiv.org/abs/2201.08239 本文介绍谷歌提出的对话大模型LaMDA,主要关注对各项指标&#x…

一文带你了解 Oracle 23ai 新特性 Vector 的基础用法

Oracle Database 23ai 来了,虽然目前只是云上可商用,但是 OP 有 FREE 版本可以进行开发。 本文将介绍 Oracle 23ai 的新特性之一: AI 向量搜索,的部分内容。 向量数据类型 23ai 新增向量数据类型,可以用于表示一系列的…

【LeetCode刷题】875. 爱吃香蕉的珂珂

1. 题目链接 875. 爱吃香蕉的珂珂 2. 题目描述 3. 解题方法 简单的用我自己的理解来解释一下这道题的意思。 所以也就是说找到一个速度k,看还有没有比k更小的速度能吃完数组中的香蕉,如果有则继续寻找,没有则是k这个速度。就好比上面的解释…

成人职场英语口语柯桥外语培训之Big deal不是“大事”!别再翻译错啦!

关于deal, 其实有很多容易被人误解的表达, 小编今天就来给大家一一盘点~ 1, deal n. deal 作名词的时候意思是“交易;买卖”。 ❖ She got a new car for $1000! That was really a good deal! 她一千美金买了辆车!真是158575…

图片编辑工具-Gimp

一、前言 GIMP(GNU Image Manipulation Program)是一款免费开源的图像编辑软件,具有功能强大和跨平台的特性。 GIMP作为一个图像编辑器,它提供了广泛的图像处理功能,包括但不限于照片修饰、图像合成以及创建艺术作品…

新的循环体和define

目录 do while讲解 练习: 结果: 分析: 定义:宏(define) 练习: 结果: 分析: define的优缺点 优点: 缺点: 作业: 大家假期…

搭建父模块和工具子模块

第一章 项目父模块搭建 1.1 nancal-idsa 作为所有工程的父工程&#xff0c;用于管理项目的所有依赖版本。 1.2 指定 pom 类型模块&#xff0c;删除 src 目录&#xff0c;点击Reload project 1.3 添加依赖 pom.xml <parent> <groupId>org.springframework.…

很快就可以试用Domino 15了

大家好&#xff0c;才是真的好。 前几天在比利时的安普卫特举办的Engage2024大会已经结束&#xff0c;流出的现场照片很多&#xff0c;主要是会议场地照片很多&#xff0c;说是令人震撼&#xff1b;可惜这次一手的PPT和会议内容不多.是的&#xff0c;本来我也是在等与会者写的…

人脸识别开源算法库和开源数据库

目录 1. 人脸识别开源算法库 1.1 OpenCV人脸识别模块 1.2 Dlib人脸识别模块 1.3 SeetaFace6 1.4 DeepFace 1.5 InsightFace 2. 人脸识别开源数据库 2.1 CelebA 2.2 LFW 2.3 MegaFace 2.4 Glint360K 2.5 WebFace260M 人脸识别 (Face Recognition) 是一种基于人的面部…

2022 年全国职业院校技能大赛高职组云计算赛项试卷(私有云)

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

代码随想录刷题随记30-贪心4

代码随想录刷题随记30-贪心4 860.柠檬水找零 leetcode链接 比较显然 class Solution {public boolean lemonadeChange(int[] bills) {int []accountnew int[3];for(int cur:bills){if(cur5)account[0];else if(cur10){account[0]--;if(account[0]<0)return false;account…

ICode国际青少年编程竞赛- Python-1级训练场-路线规划

ICode国际青少年编程竞赛- Python-1级训练场-路线规划 1、 Dev.step(3) Dev.turnLeft() Dev.step(4)2、 Dev.step(3) Dev.turnLeft() Dev.step(3) Dev.step(-6)3、 Dev.step(-2) Dev.step(4) Dev.turnLeft() Dev.step(3)4、 Dev.step(2) Spaceship.step(2) Dev.step(3)5、…