jmeter接口测试、压力测试简单实现

jmeter测试的组件执行顺序:

测试计划—>线程组—>配置元件—>前置处理器—>定时器—>逻辑控制器—>取样器—>后置处理器—>断言—>监听器

组件的作用范围:

  • 同级组件
  • 同级组件下的子组件
  • 父组件

目前市面上的三类接口

1、基于webservice协议接口,通过xml传输数据

2、基于dubbo协议接口,通过json传输数据

3、基于http协议接口,通过json传输数据

[ ]:数组,多个值

{ }:对象,键值对

接口项目实战:

端口号:http:80

             https:443

接口测试实战

  • 创建一个线程计划
  • 在线程计划中创建一个线程组
  • 在线程组中添加配置元件(HTTP信息头管理器、HTTP请求默认值、HTTP Cookie管理器、用户定义的变量)
  • 在线程组添加一个结果树来查看测试结果

        在HTTP请求默认值中配置测试接口的请求协议、ip、端口号。在这里统一配置后,在接口测试时就不用重复配置这些前缀,只需要把URL填上即可。

        在 HTTP信息头管理器,添加请求头信息     

        在线程组添加一个取样器—HTTP请求。这个组件就是填写要测试接口的信息。接口路径、参数、返回格式都在这里填写。

        比如,我要测试的一个接口为用户登录接口,填写好接口路径以及参数后,点击运行,即可在查看树查看结果。

          填写完接口信息后,点击运行按钮,然后在结果树查看测试结果。

 

现在正式开始一组接口测试:

要测试的接口流程:

验证码加载==>用户登录==>查看商品信息==>添加商品到购物车==>结算生成订单==>查看订单

用户登录接口:

方法:post

地址:/sysUser/listb

参数:

  • username: admin
  • password: admin
  • code: aaaaa
  • picture: aaaaa
  • 不需要鉴权

结果:

{"msg":"操作成功!","code":200,"data":{"jwt":"token值","username":"用户名"}}

查看信息接口:

方法:get

地址:/login

参数:无

结果:

{{"code":200,"msg":"操作成功!","data":[{数据}]}}

添加商品到购物车

方法:post

地址:/sysUser/insertcar

参数:

{"gname": "string","num": 0,"price": 0,"seller": "string","username": "string"
}

结果:

{{"code":200,"msg":"操作成功!","data":[{数据}]}}

结算生成订单

方法:post

地址:/sysUser/insertcar

参数:

{"oid": "string","address": "string","buyer": "string","gname": "string","num": 0,"seller": "string","created": "2023-07-26T09:11:10.237Z",}

结果:

{{"code":200,"msg":"操作成功!","data":[{数据}]}}

查看订单

方法:get

地址:/sysUser/insertcar

参数:

  • name(当前的用户名)

结果:

{{"code":200,"msg":"操作成功!","data":[{数据}]}}

测试登录接口

现在开始测试用户登录接口

添加一个http请求

填入传输类型post,填入url,填入参数

然后,运行,查看结果树

 测试查看商品的接口    

        测试查看商品的接口,除了登录接口的其他接口都需要登录时生成的token,也就是上图的jwt值,没有这个值,是无权进行查看接口这个操作。登录接口与查看商品接口有关联的,我们需要获取到这个token值,添加到后续接口的请求头。 

接口关联:有两种方法

正则表达式提取器

1、变量名:可以随意定义

2、正则表达式:要包括左边界、右边界以及(.*?),

3、$1$表示取第一个正则。$2$表示取第二个正则

4、匹配数字,1表示取第一个匹配到的值

5、默认值,没有匹配到使用默认值。

然后在HTTP信息头管理器添加token信息

JSON提取器

例子

{"jwt":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTY5MDM1OTczNiwiZXhwIjoxNjkwOTY0NTM2fQ.1HPGr2RLQpW8SzcRfHzWhMmJ9zMOVQXqe8g69tkOPF-QbdEPj7N0ASXW86lL0KxQ_rGcNdZ-WYmV9cbUpj8dCw","username":"admin"}

语法规则:只适用于json数据

  • $代表根目录
  • .代表子节点

$.jwt=>eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTY5MDM1OTczNiwiZXhwIjoxNjkwOTY0NTM2fQ.1HPGr2RLQpW8SzcRfHzWhMmJ9zMOVQXqe8g69tkOPF-QbdEPj7N0ASXW86lL0KxQ_rGcNdZ-WYmV9cbUpj8dCw

  • $.username=>admin
  • $.* 取所有的值即jwt和username的值

如果没有通过鉴权测试,是无法访问其他接口的

 在登录接口添加一个正则表达式管理器来获取token值

 在线程组添加一个HTTP请求(查看商品接口),在接口下添加HTTP信息头管理器,并在信息头管理器里面填写token配置

  

然后在查看商品接口填写传输方式:get,参数:无;

运行测试,可以看到成功获得商品列表

 测试添加商品到购物车

在线程组添加一个HTTP请求(添加商品接口),在接口下添加HTTP信息头管理器,并在信息头管理器里面填写token配置。

在添加商品接口内填写:

传输方式:post

参数:

{ "gname": "苹果手机", "num": 1, "price":4000.00, "seller": "root", "username": "${username}" }

username为当前登录的用户名,所以我们可以通过json提取器来获得登录时的用户名,并在此引用。

然后启动测试,查看结果数

 测试结算生成订单接口

 在线程组添加一个HTTP请求(生成订单接口),在接口下添加HTTP信息头管理器,并在信息头管理器里面填写token配置

在添加商品接口内填写:

传输方式:post

参数:

[{"gname": "苹果手机","num": 1,"buyer": "${username}","seller": "root","address": "广东省xx市xx区","created": "2023-06-27T03:19:43.460Z"}]

运行测试,得到结果

 测试查看订单接口

 在线程组添加一个HTTP请求(查看订单接口),在接口下添加HTTP信息头管理器,并在信息头管理器里面填写token配置

传输方式:post

参数:

String username

 

运行,查看结果树

 以上就是jmeter测试接口的基本流程,但是以上例子都是正例。我们可以csv参数化来设置正例、反例来测试接口。以登录接口为例。

csv参数化

  • 创建一个csv文件
  • 打开文件
  • 输入数据

第1行为属性名

username为登录接口的账号,password为密码,code和picture为验证码,duanyan为断言

第1行下面的则为属性值

第2行:账号密码、验证码都正确

第3行:账号为空,密码、验证码正确

第4行:账号、验证码正确、密码为空

第5行 :账号、密码正确、验证码错误

然后再登录接口下面添加一个csv数据文件设置,并配置

 然后修改接口的参数

在线程组添加一个循环控制器 ,因为这里有4个用例,所以循环次数为4

 把验证码接口和登录接口放到循环控制器中,运行测试,查看结果树,可以得到4组测试结果

 

 

 

压力测试 

添加一个线程组,设置线程数为10,线程多少内启动完成,循环次数为1.

然后添加查看结果的页面:(聚合报告)、表格统计结果界面(根据需要,可选)、添加图形结果页面(根据需要,可选)。

然后添加要压力测试的接口,运行测试。

我要测试登录接口以及获取商品库存的接口,添加两个http请求,填好数据(如接口测试那样操作)。运行测试,查看结果:

聚合报告 

 表格统计

 

性能测试主要关注如下三个指标

  • 吞吐量:每秒钟系统能够处理的请求数、任务数,该值越大越好
  • 响应时间:服务处理一个请求或一个任务的耗时
  • 错误率:一批请求中结果出错的请求所占比例

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

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

相关文章

10分钟带你实现一个Android自定义View:带动画的等级经验条

先展示一下静态效果图 介绍一下我们的实现流程: 首先整个经验条有一个圆角边框的背景打底;然后给经验条绘制一条轨道,让用户比较直观地看到总进度的长度;在轨道的上层绘制我们的渐变色经验条;在经验条的上层绘制等级…

用html+javascript打造公文一键排版系统8:附件及标题排版

最近工作有点忙,所 以没能及时完善公文一键排版系统,现在只好熬夜更新一下。 有时公文有包括附件,招照公文排版规范: 附件应当另面编排,并在版记之前,与公文正文一起装订。“附件”二字及附件顺序号用3号黑…

Python(四十六)列表

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

MyBatis基本用法-@TableField

MyBatis Plus是一个强大的持久层框架,提供了很多方便的注解和配置,其中包括TableField注解用于配置字段映射。 TableField注解 TableField注解用于配置字段映射信息,可以用于在实体类中指定数据库字段名、字段策略等属性。 基本用法 impo…

【Java基础教程】(四十八)集合体系篇 · 上:全面解析 Collection、List、Set常用子接口及集合元素迭代遍历方式~【文末送书】

Java基础教程之集合体系 上 🔹本章学习目标1️⃣ 类集框架介绍2️⃣ 单列集合顶层接口:Collection3️⃣ List 子接口3.1 ArrayList 类🔍 数组(Array)与列表(ArrayList)有什么区别?3.2 LinkedL…

在 ArcGIS Pro 中使用 H3 创建蜂窝六边形

H3是Uber开发的分层索引系统,它使用六边形来平铺地球表面。H3在二十面体(一个具有20个三角形面和12个顶点的形状)上构建其六边形网格。由于仅用六边形不可能平铺二十面体,因此每个分辨率需要12个五边形来完成网格。分层索引网格意味着每个六边形都可以细分为子单元六边形。…

5.4 命令行传递参数

5.4 命令行传递参数 有时候你希望运行一个程序时再传递给它消息。这要靠传递命令行参数给main()方法实现,这里只做了解即可,在实际工作生活中也并不一定能用得到。 package com.baidu.www.method;public class Demo03 {public static void main(String[]…

给jupter设置新环境

文章目录 给jupternotebook设置新环境遇到的报错添加路径的方法 给jupternotebook设置新环境 # 先在anaconda界面新建环境 conda env list # 查看conda prompt下的有的环境变量 带星号的是当前活跃的 activate XXXX pip install ipykernel ipython ipython kernel install --u…

合宙Air724UG LuatOS-Air script lib API--http

Table of Contents http http.request(method, url, cert, head, body, timeout, cbFnc, rcvFileName, tCoreExtPara) http 模块功能:HTTP客户端 http.request(method, url, cert, head, body, timeout, cbFnc, rcvFileName, tCoreExtPara) 发送HTTP请求 参数 名称…

MongoDB——命令详解

db.fruit.remove({name:apple})//删除a为apple的记录db.fruit.remove({})//删除所有的记录db.fruit.remove()//报错 MongoDB使用及命令大全(一)_mongodb 删除命令_言不及行yyds的博客-CSDN博客

如何安装mmcv?官网解答

pip install -U openmim mim install mmcv

【高分论文密码】大尺度空间模拟预测与数字制图教程

详情点击链接:【高分论文密码】大尺度空间模拟预测与数字制图 一,R语言空间数据及数据挖掘关键技术 1、R语言空间数据及应用特点 1)R语言基础与数据科学 2)R空间矢量数据 3)R栅格数据 2、R语言空间数据挖掘关键技术 二,R语言空间数据高…

素描基础知识

素描基础入门 1.基础线条 1.1 握笔姿势及长线条 2.排线 2.1 不同姿势画排线 2.1.1 姿势画排线 2.1.2 用手腕画排线 2.1.3 小拇指画排线 2.1.4 叠加排线 2.1.5交叉排线 2.2 纸张擦法 2.3 排线学习榜样 2.4 四种常见的排线 3、定向连线 4、一点透视 4.1 透视的规律 4.2 焦点透视…

SpringCloudAlibaba:服务网关之Gateway的cors跨域问题

目录 一:解决问题 二:什么是跨域 三:cors跨域是什么? 一:解决问题 遇到错误: 前端请求时报错 解决: 网关中添加配置文件,注意springboot版本,添加配置。 springboo…

Hive 调优集锦(1)

一、前言 1.1 概念 Hive 依赖于 HDFS 存储数据,Hive 将 HQL 转换成 MapReduce 执行,所以说 Hive 是基于Hadoop 的一个数据仓库工具,实质就是一款基于 HDFS 的 MapReduce 计算框架,对存储在HDFS 中的数据进行分析和管理。 1.2 架…

删除每行中的最大值

给你一个 m x n 大小的矩阵 grid ,由若干正整数组成。 执行下述操作,直到 grid 变为空矩阵: 从每一行删除值最大的元素。如果存在多个这样的值,删除其中任何一个。 将删除元素中的最大值与答案相加。 注意 每执行一次操作&…

【iOS】懒加载

文章目录 前言一、懒加载的意义二、懒加载的原理三、懒加载优缺点 前言 iOS懒加载(Lazy Loading)是一种延迟加载的技术,它允许在需要的时候才初始化对象或执行某些操作,而不是在对象创建的时候立即执行。懒加载主要用于优化应用程…

从JVM指令看String对象的比较

在翻看各类 java 知识中,总会提到如下知识:比较 String 对象,例如: String a1new String("10"); String a2"10"; String a3"1""0";//结果 System.out.println(a1a2); //false System.ou…

Django接口返回JSON格式数据报文

目录 遇到问题 Django返回json结构报文 不可行方式python json 可行方式JsonResponseQuerySet.values()。 python的两个web框架,flask和django,两者都具有view 模板的章节,但是当前开发一个应用,大部分采用前后端分离的合作方式。…

Vscode python Debug环境异常Timed out waiting for launcher to connet

文章目录 launch.json配置console launch.json配置console {"configurations": [{"name": "Python: Current File","type": "python","request": "launch","program": "${file}",…