-10 +

jmeter tips

上一篇文章中介绍了 jmeter 和 badboy 搭配使用。现在我们介绍下 jmeter 的一些隐性好用的方面。

jmeter plugins

我们使用 jmeter 做性能测试时,会发现有时候 jmeter 的原生支持有时候也不是很好用,比如 jmeter 的图表报告就比较难看,这个时候我们可以使用 jmeter-plugins。我么可以去官方网站上下载,它包括下面几个类型的插件

从 Extras Set 就包含了各种图表报告,在 Extras with Libs Set 中有 json 和 OAuth 协议的支持。

安装

我们只需要将下载的 plugins 解压到

apache-jmeter-2.11\lib\ext

即可。

jmeter 测试非 http 协议

我们有时候测试可能不止是 http 协议或者 http 协议之上(如 OAuth1, OAuth2 等)的软件,如:自定义的协议,像自己设计的 IM 聊天系统,现在非常火的推送系统等。jmeter 也有相关的接口可以完成这种需求。我们可以自己自定义实现测试。首先我们只需要继承

org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient

我们可以看到 AbstractJavaSamplerClient 覆盖下面的这些方法。

   /**
	* lable 属性将能显示在 jmeter 面板上
	*/
  private static String label = "im.test";

  /**
    * 执行runTest()方法前会调用此方法,可放一些初始化代码
    */
  public void setupTest(JavaSamplerContext context);

  /**
    * JMeter测试用例入口
    */
  public SampleResult runTest(JavaSamplerContext context);

  /**
    * JMeter界面中可手工输入参数,代码里面通过此方法获取
    */
  public Arguments getDefaultParameters();

  /**
    * JMeter 日志记录
    */
  protected Logger getLogger();

完成我们自己的业务操作后,可以将其 export 为一个 jar 文件,我们将其放置在

apache-jmeter-2.11\lib\ext

目录下,打开 jmeter 我们能看到:

jmeter 分布式测试

jmeter 做性能测试时候由于是 jvm 上的应用,那么这个就限制了不能够无限制的启动线程,那么这就会有限制,如:

一个 jvm 一台机器貌似是不能满足需求的,因为一个 jvm 的内存是有限,开启一个 thread 默认就需要 1M 的内存,虽然这个是可以通过参数来调小。一台机器的端口号也是有限的,只有 65535 个。这个时候我们希望能有多台机器联合测试,jmeter 对于这个需求是满足的。jmeter 的分布式测试设计师 master-slave 的结构设计,其中一台作为 control 将自身的测试脚本通过 RMI 发送到 slave 中,slave 做实际的测试,然后将测试的结构通过 RIM 发送给 master,master 做统计分析报表的工作,当然你也可以让 master 也做测试的工作。只需要将本机的 ip 和 端口 也填入配置文件即可。jmeter 分布式的架构图下:

首先我们修改 slaver 的配置,找到如下文件

linux:

apache-jmeter-2.9/bin/jmeter-server

windows:

apache-jmeter-2.9/bin/jmeter-server.bat

修改如下:

# One way to fix this is to define RMI_HOST_DEF below
#RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.1.237

${DIRNAME}/jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1099} -s -j jmeter-server.log "$@"

其中 SERVER_PORT 后面指定就是端口号,启动 jmeter-server。

在 master 的机器中的

apache-jmeter-2.9/bin/jmeter.properties

文件中找到

# Remote Hosts - comma delimited
#remote_hosts=192.168.1.221:1099,192.168.1.102:1099,localhost:1099,192.168.0.22:1099
remote_hosts=192.168.1.237:1099,192.168.1.237:1097,192.168.1.238:1099,192.168.1.238:1097

添加上一步的机器 ip 和 端口,完成以上步骤我们就可以在 master 上控制上面填写的 ip:port 对用的机器了进行 jmeter 分布式测试了。

注意点:

jmeter 参数化

我们着重来看看 jmeter csv 的参数化,步骤如下:

1.在本地磁盘下新建一个文本。比如:F:\test.txt 文件的内容如下:

user,passwd
user1,passwd1
user2,passwd2

2.右键点击 jmeter 中需要参数化的某个请求,选择添加——配置原件——CSV Data Set Config,会添加一个CSV Data Set Config,需要设置相关的一些内容,具体如下:

3.在需要使用变量的地方,比如在登录操作中,需要提交的表单字段包含用户名密码,我们就可以用 ${变量名} 的形式进行替换,例如 ${user}。

关于我

85 后程序员, 比较熟悉 Java,JVM,Golang 相关技术栈, 关注 Liunx kernel,目前痴迷于分布式系统的设计和实践。 研究包括但不限于 Docker Kubernetes eBPF 等相关技术。

Blog

Code

Life

Archive