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

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请求,填好数据(如接口测试那样操作)。运行测试,查看结果:

聚合报告 

 表格统计

 

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

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

相关文章:

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

jmeter测试的组件执行顺序: 测试计划—>线程组—>配置元件—>前置处理器—>定时器—>逻辑控制器—>取样器—>后置处理器—>断言—>监听器 组件的作用范围: 同级组件同级组件下的子组件父组件 目前市面上的三类接口 1、基…...

PysparkNote006---pycharm加载spark环境

pycharm配置pyspark环境,本地执行pyspark代码 spark安装、添加环境变量不提了 File-Settings-Project-Project Structure-add content root添加如下两个路径 D:\code\spark\python\lib\py4j-0.10.7-src.zipD:\code\spark\python\lib\pyspark.zip 2023-07-26 阴 于…...

19套项目实战系列--Spring Cloud Spring Boot(整套源码)

整套大型项目源码,需要的回复私信:19 ┃ ┣━01.19套项目实战系列 ┃ ┃ ┣━第04套【项目实战】Spring Cloud分布式微服务实战,打造大型自媒体3大业务平台 分布式前后端分离项目分层聚合 养成应对复杂业务的综合技术能力 ┃ ┃ ┃ ┣━1-…...

TCP/IP协议详解(二)

目录内容 TCP协议的可靠性 TCP的三次握手 TCP的四次挥手 C#中,TCP/IP建立 三次握手和四次挥手常见面试题 在上一篇文章中讲解了TCP/IP的由来以及报文格式,详情请见上一篇文章,现在接着来讲讲TCP/IP的可靠性以及通过代码的实现。 在TCP首部的…...

Linux6.2 ansible 自动化运维工具(机器管理工具)

文章目录 计算机系统5G云计算第一章 LINUX ansible 自动化运维工具(机器管理工具)一、概述二、ansible 环境安装部署三、ansible 命令行模块1.command 模块2.shell 模块3.cron 模块4.user 模块5.group 模块6.copy 模块7.file 模块8.hostname 模块9.ping …...

前端面试题 —— React (二)

目录 一、React 组件中怎么做事件代理?它的原理是什么? 二、React.Component 和 React.PureComponent 的区别 三、Component, Element, Instance 之间有什么区别和联系? 四、React声明组件有哪几种方法,有什么不同&#xff1f…...

【分享帖】LCD的MCU接口和SPI接口详解

LCD(Liquid Crystal Display)液晶屏,作为电子产品的重要组成部分,是终端用户与电子产品交互的重要载体。现在市场上的LCD,按照尺寸、功能、接口、用途等分为很多种,本文主要介绍如下两种LCD物理接口&#x…...

【Java】使用@Expose注解和excludeFieldsWithoutExposeAnnotatGson()方法将toJson()过程的部分字段忽略

要在使用 Gson 的 toJson() 方法时忽略 List 中的某些字段,你可以使用 Gson 的 Expose 注解和 excludeFieldsWithoutExposeAnnotation() 方法。 首先,在 List 中的 Bean 类中,使用 Expose 注解标记你想要序列化的字段: public c…...

移动硬盘不显示怎么办?正确解决方式看这里!

移动硬盘为存储带来了很大的方便,在对数据存储时,可做到即插即用,且其体积小、容量大,且比较安全可靠。但在实际的使用中,也会出现各种问题。请看下面2个常见案例。 案例1:“各位朋友,我新买了一…...

MySQL 5.7.39 关于时间精度

前情提要 当EndTime的数据类型为datetime when the end_time’s dataType is datetime; entity.EndTime DateTime.MaxValue; context.Set<T>().Add(entity);当保存 ‘9999-12-31 23:59:59’ 这个值时,发生报错。 A crash has happended in the program when saving ‘…...

宝塔设置云服务器mysql端口转发,实现本地电脑访问云mysql

环境&#xff1a;centos系统使用宝塔面板 实现功能&#xff1a;宝塔设置云服务器mysql端口转发&#xff0c;实现本地电脑访问mysql 1.安装mysql、PHP-7.4.33、phpMyAdmin 5.0 软件商店》搜索 mysql安装即可 软件商店》搜索 PHP安装7.4.33即可&#xff08;只需要勾选快速安装&…...

centos下安装ftp-读取目录列表失败-

1.下载安装ftp服务器端和客户端 #1.安装yum -y install vsftpdyum -y install ftp #2.修改配置文件vim /etc/vsftpd.conflocal_enablesYESwrite_enableYESanonymous_enableYESanon_mkdir_write_enableYES //允许匿名用户在FTP上创建目录anon_upload_enableYES //允许匿名用户…...

0101sub-process /usr/bin/dpkg returned an error code-dpkg-linux问题集

kali linux有段时间没用了&#xff0c;现在有点时间想着继续学习下网络安全&#xff0c;那就升级更新下。 apt-get update && apt-get upgrade等待一段时间后&#xff0c;下载完毕执行安装和更新&#xff0c;更新的过程中报错退出了 问题1 更新kali-themes 需要kali-t…...

流控平台Sentinel搭建和接入教程

流量控制和限流是大型系统必不可少的组成部分&#xff0c;Sentinel是Alibaba提供的一款特别好用的专业工具&#xff0c;属于那种看起来很牛&#xff0c;用起来也很牛的工具&#xff0c;下面记录一下接入的过程。 一&#xff0c;搭建平台 1&#xff0c;下载jar包 地址&#x…...

使用 docker 一键部署 MongoDB

目录 1. 前期准备 2. 导入镜像 3. 部署MongoDB脚本 4. 配置模板文件 5. 部署MongoDB 6. 部署后配置 7. 基本维护 1. 前期准备 新部署前可以从仓库&#xff08;repository&#xff09;下载 MongoDB 镜像&#xff0c;或者从已有部署中的镜像生成文件&#xff1a; # 查看…...

【深度学习】Inst-Inpaint: Instructing to Remove Objects with Diffusion Models,指令式图像修复

论文&#xff1a;https://arxiv.org/abs/2304.03246 code:http://instinpaint.abyildirim.com/ 文章目录 AbstractIntroductionRelated WorkDataset GenerationMethodPS Abstract 图像修复任务是指从图像中擦除不需要的像素&#xff0c;并以语义一致且逼真的方式填充它们。传统…...

创建维基WIKI百科和建立百度百科有何不同?

很多企业有出口业务&#xff0c;想在互联网上开展全球性网络营销&#xff0c;维基百科往往被认为是开展海外营销的第一站。其作用相当于开展国内网络营销的百度百科&#xff0c;经常有些企业给小马识途营销顾问提供的词条内容就是百度百科的内容&#xff0c;可事实上两个平台的…...

Python小红书旋转验证码识别

本周免费接了一个用户的需求&#xff0c;研究了一下小红书旋转验证码。刚开始小瞧了它&#xff0c;觉得它应该没有百度旋转验证码那么难&#xff0c;毕竟图像没有干扰&#xff0c;需要的训练样本就可以很少。然而事情并没有这么简单&#xff0c;所以记录一下。 首先看一下最终…...

ELK搭建

ELK概述 ELK是elasticsearch Logstash Kibana 这种架构的简写。这是一种日志分平台析的架构&#xff0c; Elasticsearch Logstash filebeat Kibana 这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理&#xff0c;用来部署在客户端&#xff0c;优势是消耗…...

webyog最新社区版免费版下载地址

好用的sql管理工具分享&#xff1a; https://github.com/webyog/sqlyog-community/wiki/Downloads webyog最新社区版免费使用下载。从此不用在找mysql的管理工具而烦恼。...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...