jmeter压力测试
1. jmeter 简介
一个非常优秀的开源的性能测试工具。
优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来。
从性能工具的原理划分:
jmeter工具和其他性能工具在原理上完全一致,工具包含4个部分:
(1)负载发生器:用于产生负载,通常以多线程或是多进程的方式模拟用户行为。
(2)用户运行器:通常是一个脚本运行引擎,用户运行器附加在线程或进程上,根据脚本要求模拟指定的用户行为。
(3)资源生成器:用于生成测试过程中服务器、负载机的资源数据。
(4)报表生成器:根据测试中霍地的数据生成报表,提供可视化的数据显示方式。
2. 安装jmeter
jmeter 是java程序,在linux windows mac系统都可以安装,配置好jdk环境就好
https://jmeter.apache.org/download_jmeter.cgi
双击启动
支持中文,不需要汉化。选项中直接选择中文简体。
3. 测试步骤
1. 写脚本 或者录制脚本
2. 使用用户自定义参数
3. 场景设计
4. 使用控制器,来控制 模拟多少用户。
5. 使用监听器, 查看测试结果
3.1. 测试脚本
3.2. 配置
接口:
http://api.erp.zhaonongzi.com/apicenter/login.wn?loginform=%7b%22device_code%22%3a%22863952037843214%22%2c%22mobile%22%3a%2215991608593%22%2c%22password%22%3a%2204dcf2e8981bf2ba0f35fb8ea4a18396%22%2c%22rs%22%3a1524037195%7d
3.3. 查看结果
3.4. 参数和结果说明
number of threads(users): 一个用户占一个线程, 200个线程就是模拟200个用户
ramp-up period(in seconds): 设置线程需要多长时间全部启动。如果线程数为200 ,准备时长为10 ,那么需要1秒钟启动20个线程。也就是每秒钟启动20个线程。
loop count: 每个线程发送请求的次数。如果线程数为200 ,循环次数为10 ,那么每个线程发送10次请求。总请求数为200*10=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。
ramp-up period(in seconds)
【1】决定多长时间启动所有线程。如果使用10个线程,ramp-up period是100秒,那么jmeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒(100/10)启动。ramp-up需要要充足长以避免在启动测试时有一个太大的工作负载,并且要充足小以至于最后一个线程在第一个完成前启动。 一般设置ramp-up=线程数启动,并上下调整到所需的。
【2】用于告知jmeter 要在多长时间内建立全部的线程。默认值是0。如果未指定ramp-up period ,也就是说ramp-up period 为零, jmeter 将立即建立所有线程。假设ramp-up period 设置成t 秒, 全部线程数设置成n个, jmeter 将每隔t/n秒建立一个线程。
【3】ramp-up period(in-seconds)代表隔多长时间执行,0代表同时并发
samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
average:平均响应时间——默认情况下是单个 request 的平均响应时间,当使用了 transaction controller 时,也可以以transaction 为单位显示平均响应时间
median:中位数,也就是 50% 用户的响应时间
90% line:90% 用户的响应时间
note:关于 50% 和 90% 并发用户数的含义,
min:最小响应时间
max:最大响应时间
error%:本次测试中出现错误的请求的数量/请求的总数
throughput:吞吐量——默认情况下表示每秒完成的请求数(request per second),当使用了 transaction controller 时,也可以表示类似 loadrunner 的 transaction per second 数
kb/sec:每秒从服务器端接收到的数据量,相当于loadrunner中的throughput/sec
4. 压力测试样例
http://api.erp.zhaonongzi.com/apicenter/login.wn?loginform={%22device_code%22%3a%22863952037843214%22%2c%22mobile%22%3a%2215991608593%22%2c%22password%22%3a%2204dcf2e8981bf2ba0f35fb8ea4a18396%22%2c%22rs%22%3a1524037195}
100 10 10
server cpu 170%
db cpu 40%
100 10 50
150 10 10
200 10 10
server cpu 200%
500 10 10
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="x-ua-compatible" content="ie=edge"><title>oops, you&#39;ve found a dead link. - jira</title><script type="text/javascript">contextpath = "";</script><link type='text/css' rel='stylesheet' href='/static-assets/metal-all.css' media='all'><script src='/static-assets/metal-all.js'></script><!--[if lt ie 9]><link type='text/css' rel='stylesheet' href='/static-assets/metal-all-ie.css' media='all'><script src='/static-assets/metal-all-ie.js'></script><![endif]--><!--[if ie 9]><link type='text/css' rel='stylesheet' href='/static-assets/metal-all-ie9.css' media='all'><![endif]--><meta name="decorator" content="none" /></head><body class=" error-page error404"><script type="text/javascript">document.body.classname += " js-enabled";</script><div id="page"><header id="header" role="banner"></header><!-- #header --><section id="content" role="main"><div class="aui-page-panel"><div class="aui-page-panel-inner"><section class="aui-page-panel-content lowercontent"><div id="error-state"><span class="error-type"></span><h1>oops, you&#39;ve found a dead link.</h1><ul><li>返回 <a href="javascript:window.history.back()">上一页</a></li><li>跳转到 <a href="/secure/myjirahome.jspa">主页</a></li></ul></div></section><!-- .aui-page-panel-content --></div><!-- .aui-page-panel-inner --></div><!-- .aui-page-panel --></section><!-- #content --><footer id="footer" role="contentinfo"><section class="footer-body">
5. 参数接口测试
我所测试的就是带参数的接口,只不过拼接到url中了