大家好,我是温大大
最近在看大家简历的时候,发现大部分同学都写过用过jmeter,但再面试过程中还是发现其实对jmeter不太熟练,例:如何断言,如何自定义参数,如何对请求进行关联,这些其实都是必问,如果你做过一定会回答,并且会一门性能压测工具面试时真的比较加分。
![](https://i-blog.csdnimg.cn/blog_migrate/b361312ae1ead3c02286a9a29cc3e407.png)
所以今天给带大家入门jmeter http请求模拟,全程保姆式教学,希望大家喜欢。
目录:
-
Jmeter 准备 -
1.1 jmeter 安装包下载 -
1.2 jmeter 启动
-
-
Jmeter 运行1个Web请求的demo -
2.1 添加1个 Thread Group 线程组 -
2.2 添加1个 HTTP Request 请求 -
2.3 乱码问题解决 -
2.4 添加1个 HTTP Header 请求头 -
2.5 添加1个 View Result Tree 结果报告 -
2.6 运行测试,查看结果 -
2.7 添加1个 Assertion和Assert Results -
2.8 使用用户自定义变量 -
2.9 关联
-
-
Jmeter 并发设置 -
3.1 Number of Threads(users) -
3.2 Ram-Up Period(in seconds) -
3.3 Loop Count
-
1. Jmeter 准备
1.1 jmeter 安装包下载
公众后后台回复:jmeter
1.2 jmeter 启动
mac为例:
1、解压:
unzip apache-jmeter-5.1.1.zip
2、jdk 版本1.8 或 1.8+:
java -version
显示:java version "1.8.0_271"
3、赋权 + 启动
chmod +x /apache-jmeter-5.1.1/bin/jmeter
sh /apache-jmeter-5.1.1/bin/jmeter
windos为例:
1、配置环境变量:
-
此电脑-右键-属性-高级系统设置-环境变量-系统变量: -
1、JMETER_HOME E:\jmeter\apache-jmeter-5.1.1\apache-jmeter-5.1.1(此路径为jmeter放置位置,根据实际情况调整) -
2、Path %JMETER_HOME%\bin
2、启动:
-
进入E:\jmeter\apache-jmeter-5.1.1\apache-jmeter-5.1.1\bin,双击jmeter.bat
1.3 jmeter 语言选择
![](https://i-blog.csdnimg.cn/blog_migrate/16c8ec1ab8232d7cae5141fef0781630.png)
2. Jmeter 运行1个Web请求的demo
2.1 添加1个 Thread Group 线程组
必须新建一个Thread Group, jmeter的所有任务都必须由线程处理,所有任务都必须在线程组下面创建
![](https://i-blog.csdnimg.cn/blog_migrate/8175d9c41b260e7d873940c81cefc040.png)
2.2 添加1个 HTTP Request 请求
![](https://i-blog.csdnimg.cn/blog_migrate/6023fd21b5f99f0772c2d1e74b2e807f.png)
比如我要发送一个Get 方法的http 请求: toy1.weather.com.cn/search?cityname=上海
![](https://i-blog.csdnimg.cn/blog_migrate/37d853b5945aa95de77c2c79af346e62.png)
2.3 乱码问题
如果返回结果存在乱码
方法1:
-
添加BeanShell Sampler注意要在HTTP请求后面添加 -
在Script处填写如下代码:prev.setDataEncoding("utf-8");
方法2:
-
修改bin下的配置文件并重启:jmeter.properties
-
优点:一次修改,长久使用
![](https://i-blog.csdnimg.cn/blog_migrate/750973e8bf4b21927bdb6defdf5731fc.png)
2.4 添加1个 HTTP Header 请求头
选中上一步新建的HTTP request. 右键,新建一个Http Header manager. 添加一个header
![](https://i-blog.csdnimg.cn/blog_migrate/1b185e3cf7d0097526d628c801b5dba5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e29405cbf874a6939bbb0bb9db881920.png)
2.4 添加1个 View Result Tree 结果报告
View Results Tree 是用来看运行的结果的
![](https://i-blog.csdnimg.cn/blog_migrate/f4ae6141a190c08cec17667e653d0bb1.png)
2.5 运行测试,查看结果
![](https://i-blog.csdnimg.cn/blog_migrate/701462b72bbbbd78b25100f5b64bac15.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d906e4cc110d25890d74207c823022b2.png)
到这里。 我们已经成功运行起来了(有可能返回的中文显示乱码,但不影响我们后续的教程)。
2.6 添加1个 Assertion和Assert Results
选择HTTP Request, 右键 Add-> Assertions -> Response Assertion. 添加 Patterns To Test
![](https://i-blog.csdnimg.cn/blog_migrate/e11ed32fc2734fa04dfcb2bc23b63293.png)
然后添加一个Assetion Results 用来查看Assertion执行的结果.
选中Thread Group 右键 Add -> Listener -> Assertion Results.
运行后, 如果HTTP Response中没有包含期待的字符串。 那么test 就会Fail.
![](https://i-blog.csdnimg.cn/blog_migrate/595ef7e8f45452800f5f58d4cbcd0f8a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9b9c9b70d52b7464034acd898b4b54b9.png)
2.7 使用用户自定义变量
我们还可以在Jmeter中定义变量。 比如我定义一个变量叫 city. 使用它的时候用 ${city}
添加一个 User Defined Variables. 选中Thread Group: 右键 Add -> Config Element -> User Defined Variables.
我们添加一个变量: city
![](https://i-blog.csdnimg.cn/blog_migrate/329c353b4c58cc5a4a6e1ef004efb5e0.png)
然后在Http Request中使用这个变量
![](https://i-blog.csdnimg.cn/blog_migrate/7207884e472fa1f93c048800b13def7c.png)
2.8 关联
所谓关联, 就是第二个Requst, 使用第一个Request中的数据
我们需要在第一个Http Requst 中新建一个正则表达式,把Response的值提取到变量中,提供给别的Http Request 使用
选择第一个Http Request, 右键 Add -> Post Processors -> Regular Expresstion Extractor
![](https://i-blog.csdnimg.cn/blog_migrate/90395e6ea11abcab0c757997ff517f57.png)
现在新建第二个Http Request, 发送到: http://www.weather.com.cn/weather2d/${citycode}.html
${citycode} 中的数据, 是从Regular Expression Extractor 中取来的
![](https://i-blog.csdnimg.cn/blog_migrate/46f0a43ae44944b5895754212a2f9a9e.png)
到这, 脚本就全部写好了, 运行下, 请求参数里面http://www.weather.com.cn/weather2d/101020100.shhtml ${citycode}被替换数字
![](https://i-blog.csdnimg.cn/blog_migrate/037e21362031534e08a94b13f211ec2f.png)
3. Jmeter 并发设置
3.1 Number of Threads(users)
-
用于设置线程数,即用户数
3.2 Ram-Up Period(in seconds)
-
用于告知JMeter要在多长时间内建立全部的线程。 -
假如Ramp-Up设置了1秒,而Number of Thread(users), 即线程数,也是用户数,设置了10,则代表JMeter会每在1秒内建立10个线程,即1/10=0.1秒建立一个线程。 Ramp-Up的值默认为0,代表立即建立所有线程,即同时并发。
3.3 Loop Count
-
用于设置循环次数
如图,此处代表300个用户并发处理,并只执行一次脚本
![](https://i-blog.csdnimg.cn/blog_migrate/a49e850fd4dadb9a1ed499ad8a45590f.png)
关注我,加我好友拉你进面试群,一起讨论面试干货 / 套路, 大家一起升职加薪