JMeter:基本及参数化、关联

一、JMeter和LoadRunner对比

1、lr稳定,使用c写,jmeter跨平台,免费,开源,小巧,java写的;

2、jmeter没有进程方式,只有线程;

3、jmeter没有IP欺骗;

4、lr有不同带宽下的测试,jmeter没有。

二、JMeter的配置

1、path环境变量的配置:

程序的执行需要使用外部的指令javac,但是javac仅仅只能在jdk安装目录下的bin目录下执行,因此程序只能写入bin目录。程序开发过程中,不能将源代码写入JDK的安装目录,因此需要将源程序保存到任意位置的指定目录(英文目录),所以需要使javac指令在任意目录下可以运行。

path环境变量的参照形配置方式
创建新的变量名称:JAVA_HOME
为JAVA_HOME添加变量值:JDK安装目录
将path环境变量中JDK目录修改
%JAVA_HOME%\bin;

在切换jdk时,只需要修改JAVA_HOME

2、classpath环境变量的配置:

classpath环境变量配置方式
创建新的变量名称:classpath
值设定为指定的还有class文件的目录,多个目录间使用分号(;)分割
作用:使classpath目录中的.class文件可以在任意目录运行
技巧:通常将配置的目录最前面添加.配置,即当前目录,使.class文件搜索时首先搜索当前目录,然后根据目录配置的顺序依次查找,找到后即运行,因此classpath目录中的配置存在先后顺序

在jmeter配置过程中,jdk的配置中classpath的配置:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

3、配置jmeter环境变量:

JMETER_HOME:D:\apache-jmeter-3.2   → 根据jmeter实际的解压路径填写

calsspath:%JMETER_HOME%\lib\ext \ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\log4j-1.2-api-2.8.1.jar;

jmeter最小组成单元是测试计划

任何性能测试工具的实质是:一个请求,外边套上多线程,使用多线程发请求

jmeter录制脚本(如何录制?)

拓展:常见的服务器软件(应用程序)分配端口如下:

FTP:21
SSH:22
MYSQL:3306
DNS:53
HTTP:80
POP3:109
Https:443

三、JMeter基本说明

使用JMeter录制豆瓣api接口:

1、添加http请求:

2、参数:

3、JMeter变量/参数作用域:

新增"线程组2":

由此可知全局变量Identify一样作用于线程组2

如果将查看结果树,放置和线程组同级,那么在请求完毕后,查看结果树中,会出现两个请求,如上图。

发送请求后:

四、参数化

1、取值方式

1)随机取值:

2)固定取值:

在D盘下,建立文本文件lhy.txt,并初始化文本文件内容:

文件值以参数的形式传递:

配置Jmeter如下图:

相关字段说明:

filename:文件的绝对路径和文件名
file encoding:文件的编码方式,一般情况下,留空就好
varable names:对外进行值传递的key(key的名称不能重复,即使有多个CSV DATA SET Config),jmeter的文本文件中,没有key列,数据全部标识值
delimeter:分隔符
如果不想定义多个CSV DATA SET Config的话,就在一个CSV DATA SET Config文件中,配置多列,用约定的分隔符进行列的分割;如果想一个CSV DATA SET Config对应的文件中,只有一列,当需要传递多个参数时,就定义多个CSV DATA SET Config,并建立对应的文本文件保存相关的值。

http请求中,配置参数wd取配置的参数文件中的key2即lhy.txt文件的第二列的值:

发送请求,测试参数化的值传递:

对应lhy.txt文本文件第二列的值,已经对服务器发送了请求。

是否去除引号:

修改lhy.txt文件,如下图:

修改http请求中参数wd的取值:

发送请求:

反之,可以测试"Allow quoted data?:"值为true的情况,在请求中双引号给去除了。

值不够是否循环:

修改lhy.txt文件,如下图:

修改线程组循环次数:

执行请求:

查看结果可知,向服务器发送了3次请求,并且3次请求中wd的取值分别对应lhy.txt文本文件第一列的值。

在线程组中设置循环次数为4,发送请求:

sharing mode  → All threads:

首先来看下线程组(相当于lr中的场景设置)的基本设置:

如果使用使用调度器的话,图中的循环次数就失效了,调度器下的持续时间(秒),相当于lr中controller里的运行时间

如果启动延时,那么图中线程属性里的Ramp -Up Period就失效了

如果设置了启动时间和结束时间,那么持续时间就失效了

线程组中的循环相当于lr中的迭代,线程数相当于lr中的vu即并发用户数

测试CSV Data Set Config中的Sharing mode,如下图:

①首先测试All threads:

思想:lr中的取值策略分为:顺序、随机、唯一,更新lhy.txt文件,增加key1列的值到10记录

A、在线程组中,设置线程数为1,循环次数为4,发送请求,分析请求中的wd参数的值分别为lhy1,lhy2,lhy3,lhy4,由此可以排除该项取值策略为随机的可能;

B、那么如何验证该选项的取值策略到底是顺序还是唯一呢?

加并发。在线程组中,设置线程数(并发)为2,循环次数为3:

如果是顺序:线程1 → lhy1,lhy2,lhy3  线程2 → lhy1,lhy2,lhy3

如果是唯一:线程1 → lhy1,lhy2,lhy3  线程2 → lhy4,lhy5,lhy6

发送请求,查看结果:

线程1 → lhy1,lhy2,lhy3  线程2 → lhy4,lhy5,lhy6

可以确定,All threads的取值策略是唯一的。

C、对比lr中,值的变更方式有迭代、每次出现、OCNE,那么如何验证All threads值的变更策略呢?

思考:All threads值的变更策略如果是ONCE的话,如上B的设置,2个线程,3次循环,执行的结果应该是:

线程1 → lhy1,lhy1,lhy1  线程2 → lhy2,lhy2,lhy2

那么,在线程组的step1下,再新增一个请求,以确定值的更新方式:

上图中,step1相对于lr脚本中的循环,step中的循环和线程组中的循环(迭代)构成嵌套循环,添加方式:

设置线程数(用户数)为1,循环次(迭代)为1:

如果是唯一+每次迭代:线程1 → lhy1  线程2 → lhy1

如果是唯一+每次出现:线程1 → lhy1  线程2 → lhy2

查看请求发送的参数,得到如下的执行结果:

线程1 → lhy1  线程2 → lhy1

由此可知All threads对应的是唯一+每次迭代。线程组和线程组之间严格的遵循唯一。

练习:设置3线程,4次迭代,2次循环,Recycle on EOF(false),Stop thread on EOF(false),预计输出:

T1: 1 1     4 4   7 7     10 10

T2: 2 2     5 5   8 8     EOF EOF

T3: 3 3     6 6   9 9     EOF EOF

sharing mode  → Current  threads:

同上:

A、设置 1线程  3次迭代 得到结果如下:

T:lhy1,lhy2,lhy3,确定取值方式唯一或者顺序

B、设置 2线程  3次迭代 得到结果如下:

线程      第一次迭代    第二次迭代     第三次迭代

T1:         lhy1,          lhy2,           lhy3

T2:         lhy1,          lhy2,           lhy3

由此可以确定取值方式为顺序

C、增加一个请求数,确定值更新策略,设置 1线程  1次迭代,得到结果如下:

线程    第一次请求   第二次请求

T1:       lhy1            lhy1

由此可以确定Current threads 方式为:顺序+每次迭代。不同线程组间也是一样,遵循顺序+迭代这个标准。

sharing mode  → All threads:

分别设置两个线程组中的线程数为2,循环次数为3:

线程组1的取值:

T1:1 3 5

T2:2 4 6

线程组2的取值:

T1:1 3 5

T2:2 4 6

由此可得出结论:

同线程组下是唯一+每次遇见的取值,不同线程组之间取值是顺序+迭代的取值方式。

五、关联

JMeter的关联是用正则表达式完成的

Apply to:在哪里取关联的值
引用名称:关联值的变量名
模版:默认$1$
匹配数字:相当于lr关联函数web_reg_parameter_ex中的ordinal

关联的步骤:

1、设置要传递的值:在request1的请求中,设置参数wd的值为besttest;

2、在查询结果树的返回值里边搜索需要关联值,确定要取值的位置;

3、通过正则表达式界面,确定需要关联值的左右边界:

4、在request2的请求参数中,将wd的值替换为:${tital};

5、发送请求,查询值是否关联成功。

六、断言

相当于lr中检查点的概念

请求没有报错,说明断言成功。

--------------------------------------------

所有困难终会过去,努力才不枉来这世上走一遭... ...

时间: 2024-10-08 17:08:44

JMeter:基本及参数化、关联的相关文章

2、jmeter元件作用域&参数化&关联

学习视频:https://ke.qq.com/webcourse/index.html#cid=324256&term_id=100384842&taid=2579720567059104&type=512&vid=k1429w4de8t https://www.cnblogs.com/qinlijie/p/7920753.html#undefined 前置处理器是对请求数据做处理后置处理器是对响应数据做处理 原文地址:https://www.cnblogs.com/yhm

Jmeter使用BeanShell进行关联

所谓关联,多大数是通过相应信息抓取部分信息,例如hidden或session等. 在jmeter中要使用关联,分为2步: Step 1. 在Sampler请求下添加正则表达式,获得信息,Add > Post Processors>Regular Expression Extractor; 1.1绝大多数我们需要截取部分信息,可以通过查看源代码,找到需要的代码,然后通过正则处理,下面举一个例子: 功能是提取userSession中的值 1.2有时候,我们需要提取所有的响应信息,可采用下面的正则:

如何通过jmeter使用beanshell进行关联

关联,大多数都是通过响应的信息抓取部分信息,例如session或者hidden等 在jmeter中要使用关联,分为以下2步: Step 1. 在Sampler请求下添加正则表达式,获得信息,添加 >后置处理器>正则表达式提取器; 1.1绝大多数我们需要截取部分信息,可以通过查看源代码,找到需要的代码,然后通过正则处理,下面举一个例子: 功能是提取userSession中的值 1.2有时候,我们需要提取所有的响应信息,可采用下面的正则: Step2. 添加PostProcessers,选择Bea

jmeter(六)关联

话说LoadRunner有的一些功能,比如:参数化.检查点.集合点.关联,Jmeter也都有这些功能,只是功能可能稍弱一些,今天就关联来讲解一下. JMeter的关联方法有两种:后置处理器-正则表达式提取器与XPath Extractor. 一.正则表达式提取器 1.添加正则表达式 在需要获得数据的上一个请求上右击添加一个后置处理器-->正则表达式提取器 解释: (1)引用名称:下一个请求要引用的参数名称,如填写activityID,则可用${activityID}引用它. (2)正则表达式:

【转】jmeter学习笔记——参数化

JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现. 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统. 这个时候就需要对用户名和密码进行参数化,使每个虚拟用户都使用不同的用户名和密码进行访问. 一.准备脚本,测试数据 1.录制一个脚本(可以用badboy工具录制),在jmeter中打开,找到有用户名和密码的页面.如下: 2.我们需要“参数化”的数据,用记事本写了五个用户名和密码,保存为.

JMeter学习3 - 参数化

JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现. 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统. 这个时候就需要对用户名和密码进行参数化,使每个虚拟用户都使用不同的用户名和密码进行访问. 一.准备脚本,测试数据 1.录制一个脚本(可以用badboy工具录制),在jmeter中打开,找到有用户名和密码的页面.如下: 2.我们需要“参数化”的数据,用记事本写了五个用户名和密码,保存为.

Jmeter使用csv参数化Json数据

参考:JMeter 压力测试使用函数和 CSV 文件参数化 json 数据http://blog.csdn.net/defonds/article/details/40824011 结合自己的实践经验重新整理

Jmeter——两种参数化

参数化前期准备: 1.先将badboy录制的脚本导进Jmeter:测试计划--(右键)打开...--导进Script.jmx(我放在桌面) 导进后的界面是下面这样的-> 2.如下图,在这张图上我做了几件事: a.禁用Step1,将Step1下面的内容放到线程组下面,禁用掉不符合我们需求的http请求. b.将我们要测的两个http请求页的"自动重定向"或"跟随重定向"前面的勾去掉,这里不要选中. c.将"同请求一起发送参数"下面参数&quo

jmeter正则表达式提取器--关联

http://desert3.iteye.com/blog/1394934 1.http://www.cnblogs.com/quange/archive/2010/06/11/1756260.html 2.http://blog.csdn.net/zhangren07/archive/2010/10/15/5944158.aspx <input type="hidden" name="hidName" value="(.*)">  

Jmeter接口自动化参数化 (转)

测试场景: 有个查询城市(大概一百个 )天气预报的接口(需求参考第一课),需要根据不同的citycode,去查询对应城市的天气预报,这种接口该如何去测试呢? 分析需求: 不管是功能测试需求,还是接口测试需求,首先要先学会分析需求,然后设计测试用例.对于上面的一百多个城市天气预报,小伙伴们是如何设计用例的呢? 一百多个城市的天气预报,我不可能一个个去手工测,一是比较耗时间,二是重复劳动.就算你这次一口气测了一百多个,下次版本更新,你做回归测试也得重新测.(也许你会偷懒,只测两三个,但是做测试不要抱