之前用LR,到新公司了不能用了,只能用jmeter.
想实现参数化随机取值的效果.参考了下面的链接
http://lijingshou.iteye.com/blog/2047613 链接A
http://www.51testing.com/html/12/252512-222896.html 链接B
使用All threads,比如说参数化文件里有4个值
1
2
3
4
两个线程,迭代两次,那么第一个线程使用的数据是1和3,第二个线程使用的是2和4.
下面是从链接B中取出来的内容
jmeter 2.3闪退
一直用jmeter3.1做做接口测试,有一天要做压测了,沟通了之后发现公司用的压测机是2.3版本的.
下载了jmeter2.3,竟然闪退,日志根本没有看清就消失了,查看了一下java版本,发现java -version和ehco %java_home%竟然不对应,在网上找了一通,说是把%JAVA_HOME%\bin提到path环境变量的最前面,但是我已经提到最前面的了还是不行,后来想想是不是因为我一直有用户的环境变量下配置的原因.于是换到系统环境变量的配置JAVA_HOME和path并且把java_home的配置放到path的最前面,最后在cmd里看就改好了.java -version和java_home已经一致了.
jmeter加载依赖包
参考自 http://blog.csdn.net/musen518/article/details/50233897
jmeter依赖包加载方式很多的
常规方法
jmeter_home/lib,这里可以放依赖包,重启jmeter生效,但是这样不便于包管理
点击测试计划根节点,右下角有”Add directory or jar to classpath“,可以选择需要加载的jar包,相对前一种方法有所改善,可以自主管理不同测试依赖包
进阶方法
修改jmeter.properties配置项,找到# Classpath configuration区域(修改下面一种就行)
1. 修改user.classpath选项,指定为单个路径,该目录下所有包都自动加载(这里jar多了容易出现jvm oom,谨慎使用)
2. 修改plugin_dependency_paths选项,指定为单个路径,该目录下所有包都自动加载(推荐,还没出现oom现象)
填写项说明:
1、名称、注释:元件的名称及注释
2、Config the CSV Data Source:
1)Filename:csv文件的名称(包括绝对路径,当csv文件在bin目录下时,只需给出文件名即可)
2)File encoding:csv文件编码,可以不填
3)Variable Names(comma-delimited):csv文件中各列的名字(有多列时,用英文逗号隔开列名),这个变量名称是在其他处被引用的,所以为必填项。
4)Delimiter(use “\t” for tab):csv文件中的分隔符(用”\t”代替tab键)(一般情况下,分隔符为英文逗号)
5)Allow quoted data?:是否允许引用数据,---这个目前还未弄明白,设置成True或者False都能正常引用数据。
6)Recycle on EOF?:到了文件尾是否循环,True—继续从文件第一行开始读取,False—不再循环
7)Stop thread on EOF?:到了文件尾是否停止线程,True—停止,False—不停止,注:当Recycle on EOF设置为True时,此项设置无效。
8)Sharing mode:共享模式,All threads –所有线程,Current thread group—当前线程组,Current thread—当前线程。这个地方和LoadRunner中的迭代取之相反,经试验得出来的结果是:
All threads:测试计划中所有线程,假如说有线程1到线程n (n>1),线程1取了一次值后,线程2取值时,取到的是csv文件中的下一行,即与线程1取的不是同一行。
Current thread group:当前线程组,假设有线程组A、线程组B,A组内有线程A1到线程An,线程组B内有线程B1到线程Bn。取之情况是:线程A1取到了第1行,线程A2取第2行,现在B1取第1行,线程B2取第2行。
Current thread:当前线程。假设测试计划内有线程1到线程n (n>1),则线程1取了第1行,线程2也取第1行。
【在试验的过程中,发现:线程循环时,去取csv值时,也算入迭代。例如,当设置为Current thread时,线程1第1次取了第1行,第2次取的就是第2行】
配置好CSV Data Set Config后,就可以在需要调用参数的地方进行调用了,如上图中配置的pp.csv文件,就可以用${passport},进行调用了。
JMETER取当前时间参数
${__time(,)} 1450056496991 //无格式化参数,返回当前毫秒时间 ${__time(yyyyMMdd,)} 20151214 //返回年月日 ${__time(HHmmss,)} 092816 //返回时分秒 ${__time(yyyyMMdd-HHmmss,)} 20151214-092816 //全 //线程ID-迭代次数ID-当时时间精确到秒-当前时间精确到毫秒数计数 ${__threadNum}_${__counter(true)}_${__time(yyyyMMddHHmmss,)}_${__time(,)} Jmeter函数Random自动生成随机数 Random使用方式:${__Random( param1,param2 ,param3 )} param1为随机数的下限 param2为随机数的上限 param3为存储随机数的变量名,是选填项。 ${__Random(100,200,id)}
JMETER响应断言 Response_Assertion
今天写脚本的时候遇到一个场景,响应里有个字段,比如 isblackuser,这个字段是false或者true都是正确的.但是如果没有值那就是接口有问题.即需要判断响应里包含 "isblackuser":false, 或者 isblackuser":true, 很明显,这里要用正则匹配了,写起来比较简单,直接是 "isblackuser":(false|true), 不能用默认的substring了,得用contains,因为substring不支持正则,contains才支持正则.
参考的页面是: https://jmeter.apache.org/usermanual/component_reference.html#Response_Assertion
JMETER设置超时时间 Duration Assertion
参考的网页为:https://jmeter.apache.org/usermanual/component_reference.html#Duration_Assertion
The Duration Assertion tests that each response was received within a given amount of time. Any response that takes longer than the given number of milliseconds (specified by the user) is marked as a failed response.
Screenshot of Control-Panel of Duration Assertion
还可以对响应的大小进行判断,不过这个应该用的比较少
参考的网页: https://jmeter.apache.org/usermanual/component_reference.html#Size_Assertion
JMETER中使用正则表达式提取器
http://jmeter.apache.org/usermanual/component_reference.html#Regular_Expression_Extractor
Screenshot of Control-Panel of Regular Expression Extractor这里在写regular expression时,如果用了*来匹配,要注意是否使用贪婪,比如响应是
{"id":123456,""isSuccess":true,"code":"0","info":"成功"}如果要获取ID值,regular如果写成id":(.*),那么匹配出来的值是123456,""isSuccess":true,"code":"0",因为*在正则表达式里默认是贪婪的,会一直匹配到最后一个逗号,这里就需要用到非贪婪,写regular expression时使用id":(.*?),加一个问号.
参考于: http://www.cnblogs.com/wuyepiaoxue/p/5661194.html
JMETER参数跨线程组共享
参考的链接为: http://blog.csdn.net/jasonliujintao/article/details/71542021
假设脚本里有2个线程组A和B,如何在线程组B中使用线程组A里提取出的参数值?
如在线程A的某个sample的响应里提取到了一个参数名为ID
在线程A的最后添加BeanShell Sampler,内容为
${__setProperty(idBeanShell,${id},)}
注意,这个BeanShell Sampler一定要添加到已经提取参数ID的sample之后,否则脚本内容无法生效,一般放在最在线程组的最后面即可.
然后在线程组B里使用的时候这样写
${__property(idBeanShell)}
上面两个红色的参数要一致,否则无法实现效果
还有用其它方法实现的,使用的是BeanShell PostProcessor,写法比这个复杂,
参考: http://www.cnblogs.com/allen-zml/p/6552535.html
JMETER响应乱码
参与出处: http://tenfee.blog.51cto.com/6353835/1915332
Jmeter安装目录/bin/jmeter.properties中sampleresult.default.encoding默认为ISO-8859-1,将参数修改为
sampleresult.default.encoding=utf-8 即可
同时注意将注释符号#去掉,否则不会生效
JMETER二次开发-在eclipse里调试
参考于: http://www.cnblogs.com/taoSir/p/5144274.html
JMETER二次开发-修改编译语言为英语
来源于: https://my.oschina.net/u/1245468/blog/863053
JMETER二次开发-基于jmeter3.0版本的csv data set config二次开发(实现从指定行开始读取)
来源于: http://zfy421.iteye.com/blog/2322251
jmeter随机取参数值
jmeter能用来做参数化的组件有几个,但是都没有随机取值的功能,遇到随机取值的需求怎么办呢?
突发奇想,可以用函数__CSVRead()来实现:
__CSVRead()
CSV file to get values from | *alias:表示要读取的文件路径
CSV文件列号| next| *alias:表示当前变量读取第几列数据,注意第一列是0;
由此可见我们只需将参数化数据在csv中横向排列,然后用随机函数__Random()指定文件序列号即可。
${__CSVRead(D:\t.txt,${__Random(1,6,)})} t.txt文件内容:a,s,d,f,g,h
上面的方法亲测可用,但是也不足的地方,如果参数值的数量过大的话,处理起来比较麻烦,不过notepad++可以轻松搞定.但即便如此,也不如一行行地看方便对吧.
其中的${__Random(1,6,)}中的6,表示有多少个参数值,如果有70000个参数值,这里就写70000就好了;
注意用了上面的方法后就不用再设置CSV Data Set Config了,直接在写参数对就可以了
注意,上面的D:\t.txt是指的参数文件的位置,这个必须写绝对路径,相对路径这里不好使;
另外,如果脚本里没有成功获取参数值,而是把整个函数打出来了,说明可能是函数的格式不对,少了大括号,小括号等等.
Jmeter之Constant Timer与constant throughput timer的区别
http://www.cnblogs.com/111testing/p/6729551.html
Constant Throughput Timer 的主要属性介绍:
名称 :定时器的名称
Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20 QPS ,这里的值应该是1200 。
Calculate Throughput based on :有5个选项,分别是:
This thread only :控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的 target Throughput 乘以矣线程的数量。
All active threads : 设置的target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。
All active threads in current thread group :设置的target Throughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,
该选项和All active threads选项的效果完全相同。
All active threads (shared ):与All active threads 的选项基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
All cative threads in current thread group (shared ):与All active threads in current thread group 基本相同,唯一的区别是,
每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。
如上图,该元件仅作用于fnng.cnblogs.com ,设置定时器的Target throughput为1200/分钟(20 QPS),设置Calculate Throughput based on 的值为All active threads 。
当然,Constant Throughput Timer只有在线程组中的线程产生足够多的request 的情况下才有意义,因此,即使设置了Constant Throughput Timer的值,也可能由于线程组中的线程数量不够,或是定时器设置不合理等原因导致总体的QPS不能达到预期目标。
关于jmeter控制并发量的设置
为了控制量,需要计算每个线程每分钟的请求数,使用Constant throughout timer,比如需求是每分钟10万的请求量, 我现在有16台压测机,每个压测机20个线程,那么每个线程每分钟的请求数大概是32个.
线程组的设置
控制并发量
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。