JMeter---HTTP压测

一、创建线程组

右击-->添加-->Threads(Users)-->线程组

下面对比较重要的几个参数,讲解下:

名称: 就是给你这个线程组起名字。

线程数:指压力测试时候模拟几个用户测试接口。

Ramp-Up:这里指几秒运行完上面的模拟用户数。

循环次数:指循环几次线程数。

总的理解下:上面的意思是2秒内模拟5个用户请求API,循环2次。

二、添加HTTP

在线程组上右击-->添加-->Sampler-->HTTP请求

在java代码中添加API接口

@RequestMapping(value = "users", method = RequestMethod.GET)
public @ResponseBody Object users() {
List<String> userList = new ArrayList<>();
userList.add("张三");
userList.add("李四");
userList.add("王五");
System.out.println("获取用户接口......");
return userList;
}

三、查看结果树

在线程组上右击-->添加-->监听器-->察看结果树

运行JMter查看结果:

通过测试可以发现,已经向users接口请求10次,10次都成功,也都有返回数据。

四、响应断言

响应断言: 断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。

增加断言: 在线程组上右击--> 添加--> 断言 --> 响应断言

apply to(应用范围):

Main sample only: 仅当前父取样器 进行断言,一般一个请求,如果发一个请求会触发多个,则就有sub sample(比较少用)

常用响应字段:

响应文本:即响应的数据,比如json等文本

响应代码:http的响应状态码,比如200,302,404这些

响应信息:http响应代码对应的响应信息,例如:OK, Found

Response Header: 响应头

模式匹配规则:

包括:包含在里面就成功

 equals:完全匹配,区分大小写

再次运行JMeter,查看结果:

发现http请求报错,因为返回数据不包含断言中所设定的数据。(一般调试阶段可以设置断言,但真实压力测试情况下建议不要开启断言和查看结果树,因为会因为性能问题,使测试结果不十分准确)

五、聚合报告

线程组右击-->添加->监听器->聚合报告(Aggregate Report)

lable: sampler的名称

Samples: 一共发出去多少请求,例如5个用户,循环2次,则是 10

Average: 平均响应时间

Median: 中位数,也就是 50% 用户的响应时间

90% Line : 90% 用户的响应不会超过该时间 (90%的样本不超过这个时间。 剩下的样本至少与此一样长)

95% Line : 95% 用户的响应不会超过该时间

99% Line : 99% 用户的响应不会超过该时间

min : 最小响应时间

max : 最大响应时间

Error%:错误的请求的数量/请求的总数

Throughput: 吞吐量——默认情况下表示每秒完成的请求数(Request per Second) 可类比为qps

KB/Sec: 每秒接收数据量

六、自定义变量

为什么使用:很多变量在全局中都有使用,或者测试数据更改,可以在一处定义,四处使用比如服务器地址你如果每一个里面都手动输入127.0.0.1,那万一那天服务器地址变了,总不能在一个一个改服务器地址

吧,那么这里我们可以写在全局配置文件中。

线程组->add -> Config Element(配置原件)-> User Definde Variable(用户定义的变量)

上面配置了两个全局变量:

引用方式${XXX},在接口中变量中使用:

七、CSV可变参数压测

作用:你在API接口传入参数的时候,不可能100次请求都传一样的参数,为了更真是的模拟用户,所传的参数当然也是随机的,这样才更真实。

线程组右击-->add -> Config Element(配置原件)--> CSV data set config (CSV数据文件设置)

比较关键的参数:

 文件名:就是你引用的文件地址(因为大量的数据都会写在外部文件中)

变量名称:如果有多个用逗号隔开

分隔符:csv默认用逗号,如果是txt文件这个需要设置符号

 1、user.csv文件

2、HTTP请求

3、API接口

@RequestMapping(value = "login", method = RequestMethod.POST)
public @ResponseBody Object login(String name, String pwd) { List<String> userList = new ArrayList<>();
userList.add(name);
userList.add(pwd);
userList.add(name.length()+"");
//输出客户端传来的值
System.out.println("name:"+name+"----pwd:"+pwd);
return userList;
}

测试运行(看java控制台)

想太多,做太少,中间的落差就是烦恼。想没有烦恼,要么别想,要么多做。少校【20】

【JMeter】(2)---HTTP压测的更多相关文章

  1. jmeter的dubbo压测,依赖jar包要放到执行机的lib/ext下

    对于jmeter的dubbo压测场景的master-slave结构: 即master的jmeter进行任务的下发和报告的生成,slave进行任务的执行 因为dubbo压测需要依赖很多三方jar包,那么 ...

  2. 1. 堪比JMeter的.Net压测工具 - Crank 入门篇

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  3. 2. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  4. 3. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识bombardier

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  5. 4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  6. 5. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 接口以及场景压测

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  7. 6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  8. 7. 堪比JMeter的.Net压测工具 - Crank 总结篇 - crank带来了什么

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  9. Jmeter之性能压测Stepping Thread Group 逐步增加并发数 阶梯式加压并发 (十五)

    前段时间有描述过性能的测试类型 配置负载 Big Bang: 负载同时产生 Ramp up: 开始时候产生一定负载,然后每隔一段时间增加一些负载直到达到目标负载,这是典型模式 Ramp-up (wit ...

  10. jmeter导入csv压测

    压测csv数据源(设置为utf-8格式),jmeter不需要第一行参数名 新建一个线程组,根据压测数据调整设置需要的循环次数(测试数据有9行,设置循环次数为9) 添加http头信息 Content-T ...

随机推荐

  1. UOJ#450. 【集训队作业2018】复读机 排列组合 生成函数 单位根反演

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ450.html 题解 首先有一个东西叫做“单位根反演”,它在 FFT 的时候用到过: $$\frac 1 ...

  2. Django:django-cors-headers 报错no module named "corsheaders"

    django跨域使用 pip install django-cors-headers 然后在settings文件中加上参数设置 # app配置 INSTALLED_APPS = [ 'django.c ...

  3. ImCash:论拥有靠谱数字钱包的重要性!

    数字货币被盗已经不是什么新鲜事,前有交易所币安被黑客攻击,Youbit破产,后有“钓鱼邮件“盗号木马,安全对于数字货币用户来讲至关重要. 现行市场痛点:   2017年9月以太坊Parity钱包的漏洞 ...

  4. 运用SqlSugar框架+Axios写的增删查案例

    使用SqlSugar框架需要引用NuGet程序包否则会出现报错. 前台页面创建代码: @{    ViewBag.Title = "Index";}<h2>Index& ...

  5. JS实现快速排序,冒泡排序

    JS-排序详解-冒泡排序   说明 时间复杂度指的是一个算法执行所耗费的时间 空间复杂度指运行完一个程序所需内存的大小 稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面 不稳定指,如果a=b, ...

  6. JS精度问题(0.1+0.2 = 0.3吗?)

    一.引出问题 0.1+0.2 = 0.3吗?在JS中是这样的吗?我们写个测试代码不就知道了吗? 结果出人意料,并不像我们所想象的那样.那么这到底是为什么呢? 二.原因分析 JS浮点数存储机制: 三.解 ...

  7. MyBatis3系列__03几个常用的属性配置

    本文主要讲几个xml配置属性: 其都写在mybatis配置文件中 1.properties属性:其作用主要是可以动态引进外部的配置文件中的相关配置 resource:引入类路径下的资源 url:引入网 ...

  8. MyBatis(十一) 嵌套结果集的方式,使用collection标签定义关联的集合类型的属性封装规则

    (1)接口中编写方法 public Dept getDeptPlusById(Integer id); (2)Mapper文件 <resultMap type="com.eu.bean ...

  9. 自己封装element-ui树组件的过滤

    前言:vue开发项目时用到了element-ui的树组件,但是发现一执行过滤事件,树就全部都展开了,为了解决这个问题,只能自己先过滤数剧,再赋值给树组件的data,就避免了一上来全部展开的尴尬. 一. ...

  10. vue-router下的html5 history在iis服务器上的设置 vue去掉#

    转自:https://www.cnblogs.com/zzsdream/p/6576639.html 1.安装 url rewrite模块到IIS 下载地址 2.在web.config文件中 syst ...