Jmeter参数化的4种方法

Jmeter测试时包含两种情况的参数,一种是在url中,一种是请求中需要发送的参数。

URL中的参数,如:http://blog.da-fang.com/index.php/2010/06/01/jmeter参数/,其中“2010/06/01/jmeter参数”为url参数。
请求中的参数,此处只能举例get请求,如:http://blog.da-fang.com/?category=Web,其中“category”是参数名,“Web”是它的值。
对于post请求,用jmeter录制后,可以在请求的“同请求一起发送参数”和“同请求一起发送文件”中找到。

参数化Jmeter脚本时,使用参数的地方书写格式为${参数名}
对于URL“http://blog.da-fang.com/index.php/2010/06/01/jmeter参数/”,在Jmeter的http请求中blog.da-fang.com填写在“服务器名称或IP”中;/index.php/${url_parameter}/填写在“路径”中。
对于请求中的参数http://blog.da-fang.com/?category=Web,在Jmeter的http请求中blog.da-fang.com填写在“服务器名称或IP”中;/填写在“路径”中;参数名称category填写在“同请求一起发送参数”的“名称”中,参数值${category_name}填写在对应的“值”中。

设置参数值的方法有如下几种:

1. 用Jmeter中的函数获取参数值,__Random,__threadNum,__CSVRead,__StringFromFile,具体调用方法如下:
${__Random(,,)},${__threadNum},${__CSVRead(,)},${__StringFromFile(,,,)}。
参看Jmeter函数的使用,通过菜单“选项”->“函数助手对话框”,即可在“函数助手”弹出框上找到Jmeter的函数。
其中${__Random(,,)}方法的第一个参数为随机数的下限,第二个参数为随机数的上限,第三个参数为储存随机数的变量名;${__CSVRead(,)}方法中第一个参数是文件名,第二个参数是文件中的列(列数从0开始);${__StringFromFile(,,,)}方法中第一个参数是文件名,${__StringFromFile(,,,)}方法中没有指定读取文件中的哪一列的参数,所以${__StringFromFile(,,,)}只能读取包含一列的文件。

2.用户定义的变量
2.1 添加“配置元件”->“用户定义的变量”
2.2 “名称”中输入变量名称,此处以登录为例,定义两个变量username和password。“值”中可以直接输入值,也可以通过Jmeter的函数__CSVRead,__StringFromFile从csv或dat文件中读取,还可以通过前缀加随机数的方法设置参数。
当参数值是某个前缀加一个数字时,可以用前缀名加${__Random(,,)}或${__threadNum}的方法设置参数值。如进行登录测试之前,先准备了用户名为perf_0到perf_1000的用户,那么用户名就可以设为perf_{__Random(0,1000,)}。
当参数值没有规律的且量不太大时,可以通过${__CSVRead(,)},${__StringFromFile(,,,)}从文件中读取,如将用户名和密码保存在user.csv文件中,user.csv的内容如下:
oriana,123456
admin,admin
dandan,123456
因为user.csv文件中有两列数据,所以只能用${__CSVRead(,)}函数,username参数后的值设为${__CSVRead(user.csv,0)},password参数后的值设为${__CSVRead(user.csv,1)}。

3. 从csv文件中读取
当参数的值没有规律且量不太大时,可以用这种方法。
具体做法如下:
3.1 创建一个csv文件,内容为参数的值集,每一个参数占一列,第一行就开始写参数值,不要写参数名
3.2 在测试计划或线程组中添加一个“配置元件”->“CSV Data Set Config”
3.3 Filename中填写步骤2.1中csv文件的完整路径(当csv文件在bin目录下时,只需给出文件名即可)
3.4 Virable Names中填写变量名,如果csv文件中有多个变量,则用逗号隔开

在jmeter中,可以用CSV Data Set Config实现参数化。

1、准备参数化数据

2、添加CSV Data Set Config

3、设置参数
4、调用
调用是${字段名}这样来调用的
线程组设置
运行后查看结果
 
如果参数文件是utf-8的,设置参数后,编码也是utf-8的,读出来的数据会乱码。解决办法是,把文件的编码格式改成ANSI就好了
 

5.用正则表达式从前面请求的响应数据中提取,具体操作见Jmeter正则表达式提取器

 
 
4.从数据库中获取
当参数的值没有规律且量比较大时,可以选用这种方法。具体做法如下:
4.1 下载MySQL JDBC “http://dev.mysql.com/get/Downloa ... st.ac.jp/pub/mysql/
4.2 解压下载的zip包后,将其中的mysql-connector-java-5.1.12-bin.jar放到Jmeter的lib目录下
4.3 添加“配置元件”->“JDBC Connection Configuration”,设置下列参数:
Database URL:jdbc:mysql://host:port/db(如jdbc:mysql://localhost:3306/testlink
JDBC Driver class:com.mysql.jdbc.Driver
username:连接数据库的用户名(如root)
password:连接数据库的密码
4.4 添加“Sampler”->“JDBC Request”,在SQL Query中输入查询语句,如下:
SELECT CONCAT (“[",
GROUP_CONCAT(
CONCAT("{username:'",login,"'"),
CONCAT("{password:'",password),"'}"),"]“) AS json FROM users
4.5 在4.4中的JDBC请求中添加“后置处理器”->“正则表达式提取器”,以提取3.4中的用户名和密码为例设置正则表达式提取器的参数:
引用名称:user
正则表达式:username:’(.+?)’\{password:’(.+?)’
模板:$1$$2$
使用时,user_g1即为用户名,user_g2即为对应用户名的密码;更多正则表达式提取方法参见Jmeter正则表达式提取器
 
 
 
 
 

实现Jmeter关联----JsonPath:(返回值是json串时才可用)

DestinationVariable Name随意填写,表示返回值的参数化
Default Value随便填写
JSONPath Expression填写需要获取的返回值,格式为$.parameter
在需要传这个返回值的其他接口中,传这个返回值的参数化变量${DestinationVariable Name}即可-----如${ninanie}

实现Jmeter关联----正则表达式方式:

引用名:正则表达式参数化的名称
正则表达式匹配:"token": "(.*?)"------(.*?)表示要匹配的值,括号左右分别为值的左右两边的显示
模板:固定值
匹配数值:1表示有多个匹配值时取第一个
缺省值:匹配失败时默认取的值

jmeter添加压力机:
1、谁的电脑做压力机,就把谁电脑上的jmeter-server.bat启动
2、这两台电脑要能ping通
3、在配置文件中加入这个IP,jmeter.properties,搜索"remote_hosts",如"remote_hosts=localhost:1099,192.168.2.119:1099"(端口号默认为1099)
4、重启jmeter
5、若有参数化的文件,则在压力机的同样目录下也必须有这个文件
运行压力机:

 
 
 
 

jmeter使用IP欺骗进行压力测试

loadrunner的IP欺骗功能很强大,耐心研究jmeter官方文档,发现在jmeter2.5以上的版本有此功能的实现~

准备工作:

1、window7一台,安装jdk1.6环境。
 
2、下载最新jmeter,链接地址:http://jmeter.apache.org/download_jmeter.cgi,下载zip包解压即可,双击bin/jmeter.bat启动jmeter;
 
3、使用IP欺骗功能必须得本地有多个可用IP,通常普通的PC机只有一个物理网卡,这就需要我们手工设置多IP绑定同一网卡:
 
      a、开始菜单 -> 控制面板 -> 网络共享中心 -> 更改适配器设置 -> 本地链接 
      b、右键本地链接 -> 属性,选择Internet 协议版本4(双击打开窗口),如果是采用自动获取IP,得通过手工设置IP
      c、在属性窗口中选择高级按钮,选择IP设置,点击添加,输入新的IP地址(须要注意在局域网内不要有IP冲突,可以事先ping一下找没有使用的IP),但子网掩码必须一致。
 
4、设置好多个IP后就可以开始使用jmeter的IP欺骗功能了,这里要注意的是到目前为止,基于http 请求必须使用httpClient4方可成功。首先我们把设置好的IP保存在cvs文件中方便我们导入到jmeter参数中:
   
5、在jmeter测试计划中添加配置元件 并配置IP参数
6、对http 请求进行调整
针对每个http都要设置一遍,jmeter在每个并发线程开始时从文件中取一个IP值;
 
 
测试结果:
结果可以从服务端通过日志观察变化,也可以通过jmeter 的察看结果树看到效果:
 

Jmeter技巧的更多相关文章

  1. JMeter技巧集锦

    收藏些介绍JMeter使用知识的文章 1.JMeter技巧集锦 http://www.javaworld.com/javaworld/jw-07-2005/jw-0711-jmeter.html (网 ...

  2. 转: JMeter技巧集锦

    from:http://java.chinaitlab.com/tools/355421.html JMeter 是一个流行的用于负载测试的开源工具, 具有许多有用的功能元件,如线程组(thread ...

  3. 【转】JMeter技巧集锦

    JMeter是一个流行的用于负载测试的开源工具,具有许多有用的功能元件,如线程组(threadgroup),定时器(timer),和HTTP取样(sampler)元件.本文是对JMeter用户手册的补 ...

  4. JMeter入门介绍

    目录 概述 下载&安装 实战JMetetr 测试计划简述 准备测试计划 编写测试计划 录制测试脚本 执行性能测试 单机测试 分布式测试 分析测试报告 APDEX 响应时间和吞吐量统计 测试结果 ...

  5. 接口自动化的根基--HTTP协议

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  6. 使用jmeter进行性能测试-Jmeter教程及技巧汇总 (转)

    http://www.jmeter.cf/loadtesting-jmeter.html 为什么使用jmeter, 它免费开源, 不断发展, 功能逐渐强大. 可以做功能,负载, 性能测试.一套脚本可以 ...

  7. 【JMeter】教程及技巧汇总(转载)

    转载地址:http://www.hissummer.com/jmeter-summary.html 参考/学习资料:http://www.yiibai.com/jmeter/jmeter_build_ ...

  8. JMeter基础之-使用技巧

    在这此对新版本jmeter的学习+温习的过程,发现了一些以前不知道的功能,所以,整理出来与大分享.本文内容如下. 如何使用英文界面的jmeter 如何使用镜像服务器 Jmeter分布式测试 启动Deb ...

  9. 【转】性能测试工具JMeter的使用技巧

    在这此对新版本jmeter的学习+温习的过程,发现了一些以前不知道的功能,所以,整理出来与大分享.本文内容如下. 1.如何使用英文界面的jmeter 2.如何使用镜像服务器 3.Jmeter分布式测试 ...

随机推荐

  1. /etc/auto.master - automounter的主映射文件

    描述(DESCRIPTION) 当机器启动自动挂载器时, autofs(8) 脚本就会查寻 auto.master 这个主映射文件.文件中的每行分别指明,一个挂载点以及与对应的需要被挂载的文件系统.通 ...

  2. Flutter走过的坑(持续更新)

    1 Target of URI doesn't exist 'package:flutter/material.dart' 官方下载的flutter中有一个example文件夹,里面有很多flutte ...

  3. SVG 浏览器支持

    可以参考以下链接: https://caniuse.com/#search=svg https://en.wikipedia.org/wiki/Comparison_of_layout_engines ...

  4. java_StringBuffer、StringBuilder

    StringBuffer和StringBuider是可变的字符串,使用方法 相同,StringBuffer是线程安全的,StringBuider是线程不安全的 public class StringT ...

  5. Android反编译初步

    网上关于Android反编译的帖子很多,反编译的步骤也是很详细,本文Android反编译参考博客:https://www.cnblogs.com/dhcn/p/7120891.html 而反编译中最主 ...

  6. Android中notifyDataSetInvalidated()和notifyDataSetChanged()有什么区别

     看下源码中对于这两个方法   public void notifyDataSetChanged () 该方法内部实现了在每个观察者上面调用onChanged事件.每当发现数据集有改变的情况,或者读取 ...

  7. 显微镜下的webpack4入门

    前端的构建打包工具很多,比如grunt,gulp.相信这两者大家应该是耳熟能详的,上手相对简单,而且所需手敲的代码都是比较简单的.然后webpack的出现,让这两者打包工具都有点失宠了.webpack ...

  8. GNU编译器学习 --> 如何链接外部库【Linking with external libraries】

    库也就是我们常说的library,一个库是若干个已经编译过的目标文件(.obj)的集合,它可以被链接到程序里.那么我们最常见的使用就是,我们在编程时会调用一些函数,这些函数别人已经写好了,它就放在库里 ...

  9. tomcat无法正确解析请求参数

    24-Mar-2018 14:11:20.564 INFO [http-nio-8080-exec-3] org.apache.coyote.http11.Http11Processor.servic ...

  10. [Python3网络爬虫开发实战] 1.2.3-ChromeDriver的安装

    前面我们成功安装好了Selenium库,但是它是一个自动化测试工具,需要浏览器来配合使用,本节中我们就介绍一下Chrome浏览器及ChromeDriver驱动的配置. 首先,下载Chrome浏览器,方 ...