前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jmeter 使用总结

jmeter 使用总结

原创
作者头像
安宁
修改2020-07-06 11:44:35
6160
修改2020-07-06 11:44:35
举报

参考 jmeter 官网,笔者使用的是 5.3 版本。

基本操作

jmeter 界面打开后,会初始化一个名为 Test Plan 的测试计划:

初始测试计划
初始测试计划

测试计划下面可以添加多个线程组:

添加线程组
添加线程组

线程组下可以添加多个 HTTP 请求:

添加http请求
添加http请求

HTTP 请求下可以添加查看结果树监听器:

查看结果树
查看结果树

至此,我们就有了一个测试计划最基础的元件,接下来配置请求的具体信息:

请求百度首页
请求百度首页

Figure 1. 请求百度首页

简单做个测试,请求百度首页。执行请求后,查看响应结果:

查看响应结果
查看响应结果

至此,我们就完成了一个最简单的请求。

为了方便学习,可以检出 https://github.com/peacetrue/learn-jmeter 资源库,里面有一些具体的测试计划文件(后缀为 jmx),可以直接导入后运行:

打开测试计划 1
打开测试计划 1

Figure 2. 测试计划-步骤1

选择测试计划 2
选择测试计划 2

Figure 3. 测试计划-步骤2

定位 jmeter.properties

jmeter.properties 是 jmeter 的配置文件,接下来有些操作会涉及到修改配置信息,所以提前找好 jmeter.properties 的位置:

代码语言:javascript
复制
$ find /usr/local -name jmeter.properties

/usr/local/Cellar/jmeter/5.3/libexec/bin/jmeter.properties

响应乱码

默认情况下,返回数据的编码格式为 ISO-8859-1,这会导致返回数据出现乱码:

响应乱码
响应乱码

需要将编码格式改为 UTF-8。打开 jmeter.properties 配置文件,找到配置项 sampleresult.default.encoding,修改其值为 UTF-8:

jmeter响应编码
jmeter响应编码

改完之后,重新打开 jmeter 界面,再次执行请求,可以看到返回数据正常了:

jmeter响应正常
jmeter响应正常

登陆后执行操作

创建一个线程组,添加一个 Cookie 管理器,添加一个登陆请求,然后再添加其他依赖登陆的请求:

线程组内登陆
线程组内登陆

最后运行该线程组,这样登陆请求成功后,其他请求也都是经过身份认证的:

登陆成功
登陆成功

Figure 4. 登陆成功

登陆后请求成功
登陆后请求成功

Figure 5. 登陆后请求成功

在一个线程组内,请求是顺序执行的,Cookie 管理器会在请求之间传递 cookie,类似于在浏览器中运行。

如果有多个线程组,每个线程组都添加一个登陆请求,会很繁琐,有没有更好的办法呢?

登陆后手动设置会话 Cookie

创建一个测试计划(或者导入资源库中已经提供的测试计划):

测试计划 登陆后手动设置
测试计划 登陆后手动设置

单独运行登陆线程组:

单独运行登陆线程组
单独运行登陆线程组

查看返回的 Cookie 信息:

查看登陆后的Cookie
查看登陆后的Cookie

手动添加到 Cookie 管理器中:

添加Cookie值
添加Cookie值

这样单独运行【依赖登陆的线程组1】和【依赖登陆的线程组2】都能通过认证。

手动设置会话 Cookie 也有些麻烦,有没有方法可以自动设置会话 Cookie 呢?

登陆后自动设置会话 Cookie

首先,启用 cookie 缓存为变量,打开 jmeter.properties 文件,找到 #CookieManager.save.cookies=false, 取消该行注释,修改值为 true:

jmeter cookie
jmeter cookie

这样可以通过变量(COOKIE_{名称})取得 cookie 值。

基于 登陆后手动设置会话 Cookie 进行修改,在登陆请求下添加后置处理器:

添加登陆后置处理器
添加登陆后置处理器

然后,编写后置处理器的脚本内容:

登陆后置处理器脚本
登陆后置处理器脚本
代码语言:javascript
复制
String session = vars.get("COOKIE_SESSION"); //<1>
props.put("session",session); //<2>

1

从变量集合中取出会话 cookie 值

2

将会话 cookie 值存储到属性集合中

为什么要将 cookie 值,从变量集合转存到属性集合呢,因为变量只能在线程内使用,跨线程变量无法共享,但属性可以持久化,也能跨线程共享。

最后,在 Cookie 管理器中添加会话 Cookie:

设置会话Cookie值
设置会话Cookie值

会话 Cookie 名为 SESSION,会话 Cookie 值为 ${__property(session)},即获取 session 属性的值,之前我们已经在后置处理器中设置过 session 属性值了。

至此就完成了所有配置,接下来查看运行效果。首先,单独运行【登陆线程组】;然后禁用【登陆线程组】,最后运行所有线程组。

负载测试

当启动 jmeter 时,jmeter 会在客户端提示:

代码语言:javascript
复制
$ jmeter
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

不要使用界面模式做负载测试,界面模式只用于测试创建和调试测试。负载测试需要使用命令行模式。

做负载测试时,我们可以通过界面模式调整参数,但不要通过界面模式直接运行,要使用命令行模式。参考之前【登陆后自动设置会话 Cookie】所描述的,运用于命令行模式会有问题。通过界面模式登陆后,再使用命令行模式执行其他请求,此时会提示尚未登陆。

这里我们需要使用【登陆后手动设置会话 Cookie】,通过界面模式登陆后,取得会话 Cookie,然后存储在 Cookie 管理器中:

设置Cookie默认值
设置Cookie默认值

直接基于 ${__property(session)},添加一个默认值 ${__property(session,,e0efbaaa-dbba-41b2-b260-76723650381c)},这样界面模式和命令行模式都可以使用。

本文源码位于 https://github.com/peacetrue/learn-jmeter

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本操作
  • 定位 jmeter.properties
  • 响应乱码
  • 登陆后执行操作
  • 登陆后手动设置会话 Cookie
  • 登陆后自动设置会话 Cookie
  • 负载测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档