利用Jmeter的http请求的时候,例如登陆操作,我们做普通用户名和密码作参数化,循环读取文本里的用户名和密码,可以添加CSV Data Set Config这个原件来控制。
利用Jmeter的CSV Data Set Config,可以实现这个功能,具体如下:
1.新建一个文本文件,里面保存要登录的用户名,密码,文件内容如下:
baidu,123456
coolsin,liujuan
sb,123456
说明:这里用英文逗号为分隔符,也可以用其他为分隔符,在CSV Data Set Config中可以设置。如果此文本文件为CSV格式的,则用豆号分格
2.右键点击Jmeter中需要参数化的某个请求,选择添加——配置原件——CSV Data Set Config,会添加一个CSV Data Set Config,需要设置相关的一些内容,具体如下:
Filename:文件名,,指保存信息的文件目录,可以相对或者绝对路径(比如:D:\user.csv)
Variable Names:参数名称(如:有几个参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,分隔符在下面的“Delimitet”中定义,为了和文件中的“,”对于,这里也用“,”分割每个参数名,(比如:use,password)
说明:这里的username与password为自己定义的名称,请求中要用这个名称,例如${参数名称}
Delimitet:定义分隔符,这里定义某个分隔符,则在“Variable Names”用这里定义的分隔符分割参数。CSV默认为英文的豆号
Recycle on EOF:是否循环读入,因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入
设置CSV Data Set Config如下图所示:
当文本中参数运行完成后,再从第一个开始循环读取,如果选择为false,则停止运行
备注说明:这里我用通俗的语言大概讲一下Recycle on EOF与Stop thread on EOF结果的关联
Recycle on EOF :到了文件尾处,是否循环读取参数,选项:true和false
Stop thread on EOF:到了文件尾处,是否停止线程,选项:true和false
当Recycle on EOF 选择true时,Stop thread on EOF选择true和false无任何意义,通俗的讲,在前面控制了不停的循环读取,后面再来让stop或run没有任何意义
当Recycle on EOF 选择flase时,Stop thread on EOF选择true,线程4个,参数3个,那么只会请求3次
当Recycle on EOF 选择flase时,Stop thread on EOF选择flase,线程4个,参数3个,那么会请求4次,但第4次没有参数可取,不让循环,所以第4次请求错误
3.在需要使用变量的地方,比如在登录操作中,需要提交的表单字段包含用户名密码,我们就可以用${变量名}的形式进行替换,例如${user}和${password}
参数设置如图所示:
Allow quoted data?
|
Should the CSV file allow values to be quoted? If enabled, then values can be enclosed in " - double-quote - allowing values to contain a delimeter.
|
pasting
4. 最后,添加后,可以通过“添加-监视器-查看结果树(请求部分)”,来检验参数化是否成功,运行线程组,如果失败,那么检查一下文本的路径,变量大小写等等,手册上说使用相对文本路径时,要以测试配置文件(默认是jmeter的bin目录)的目录为参考,但是我试过似乎不行,换成绝对路径就可以了
备注说明:
1、使用这个元件做参数时,尽量用CSV格式的表格来做,我试过其它格式的dat和txt,都读取不到
2、这个元件要在该请求下单独添加
parameters
Attribute
|
Description
|
Required
|
Name
|
Descriptive name for this element that is shown in the tree.
|
No
|
Clear cache each iteration
|
If selected, then the cache is cleared at the start of the thread.
|
Yes
|
Use Cache Control/Expires header when processing GET requests
|
See description above.
|
Yes
|
Max Number of elements in cache
|
See description above.
|
ATTENTION:
现在对于JMeter来说,一个测试计划只能有一个cookie管理器。因为当多个magager存在时,JMeter目前还没有方法来指定使用那个manager。同时,一个cookie manager中的存储的cookie也不能被其他cookie manager所引用,所以同一个计划中不建议使用多个cookie manager
HTTP COOKIE Manager管理cookie有两种方法:
-
他可以像浏览器一样存储和发送cookie,如果你要发送一个带cookie的http请求,cookie manager会自动存储该请求的cookies,并且后面如果发送同源站点的http请求时,都可以用这个cookies。每个JMeter线程都有自己的“cookie存储区域”,
所以当你测试一个使用cookie来管理session信息的web站点时,每个JMeter线程都有自己的session。
注意:
以这种自动收集的方式收集到的cookie不会在cookie manager中进行展示,但是运行后,通过:查看结果树(监 听器)可以查看到cookie信息。
早期的JMeter版本(2.3.2或更早)对与cookie的管理是支持跨域的,也就是说不同域名的网站都可以使用cookie manager中 的cookie,2.3.2版本之后,这个就不可以了,必须同源,才能共用cookie,如果你想让JMeter的cookie manager支持跨域, 修改JMeter.property :
CookieManager.check.cookies=false
接受到的cookie会被自动存储在线程变量中,但是从Jmeter2.3.2版本后,默认不再存储,如果你想要manager自动存储收集到 的cookie,你需要修改JMeter.property :
CookieManager.save.cookies=true
存储的时候,cookie的key会以“COOKIE_”为前缀命名(默认情况),如果你想自定义这个前缀,
修改JMeter.property :
CookieManager.name.prefix=
这个配置如果未启用(也就是维持默认),我们可以通过一下方式获取到cookie的值:${COOKIE_name},其 中name为cookie的名称
2. 除了上面说的自动收集,我们还可以手动添加cookie,这里,笔者要给大家一个建议,尽量不要一个一个手动去填写,我们可 以结合firefox的插件firebug,直接将cookie导入,操作如下
点击红色框中的,下拉框中有个导出本站点的cookie,就可以将cookie信息保存为一个cookies.txt文件,接着打开jmeter 的cookie manager:
载入刚才导出的cookies.txt文件即可。
各个参数说明:
名称
|
描述
|
是否必填
|
Name
|
自定义该cookie的描述,例如:tuan.qq.com的cookie
|
N
|
Clear Cookies each Iteration
|
每次线程组运行前,都会清楚cookie,但是如果是手动添加的cookie,不会被清除
|
N
|
Cookie Policy
|
选择cookie的管理策略,建议选择compatibility,兼容性强
|
|
User-Defined Cookies
|
用户自定义cookie
|
|
Add Button
|
。。。略过
|
|
HTTP信息头管理器 信息头部
Parameters
Attribute
|
Description
|
Required
|
Name
|
Descriptive name for this element that is shown in the tree.
|
No
|
Name (Header)
|
Name of the request header. Two common request headers you may want to experiment with are "User-Agent" and "Referer".
|
No (You should have at least one, however)
|
Value
|
Request header value.
|
No (You should have at least one, however)
|
Add Button
|
Add an entry to the header table.
|
N/A
|
Delete Button
|
Delete the currently selected table entry.
|
N/A
|
Load Button
|
Load a previously saved header table and add the entries to the existing header table entries.
|
N/A
|
Save As Button
|
Save the current header table to a file.
|
HTTP授权管理器
例如 授权 访问 tomcat 这里主要是让JMeter能够通过Tomcat的认证,到,在“名”和“密码”中加入对应的值
Attribute
|
Description
|
Required
|
Name
|
Descriptive name for this element that is shown in the tree.
|
No
|
Clear auth on each iteration ?
|
Used by Kerberos authentication. If checked, authentication will be done on each iteration of Main Thread Group loop even if it has already been done in a previous one. This is usually useful if each main thread group iteration represents behaviour of one Virtual User.
|
Yes
|
Base URL
|
A partial or complete URL that matches one or more HTTP Request URLs. As an example, say you specify a Base URL of "" with a username of "jmeter" and a password of "jmeter". If you send an HTTP request to the URL "ant/myPage.html", the Authorization Manager sends the login information for the user named, "jmeter".
|
Yes
|
Username
|
The username to authorize.
|
Yes
|
Password
|
The password for the user. (N.B. this is stored unencrypted in the test plan)
|
Yes
|
Domain
|
The domain to use for NTLM.
|
No
|
Realm
|
The realm to use for NTLM.
|
No
|
Mechanism
|
Type of authentication to perform. JMeter can perform different types of authentications based on used Http Samplers:
Sampler
|
Authentications
|
Java
|
BASIC
|
HttpClient 3.1
|
BASIC, DIGEST
|
HttpClient 4
|
BASIC, DIGEST and Kerberos
|
|
http 默认请求
一个HTTP请求有着许多的配置参数,下面将详细介绍:
名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
端口号:目标服务器的端口号,默认值为80 。
协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。
方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
Content encoding :内容的编码方式,默认值为iso8859
路径:目标URL路径(不包括服务器地址和端口)
自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter 自动重定向到新的页面。
Use keep Alive : 当该选项被选中时,jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。
Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使用Use multipart/from-data方法发送,默认不选中。
同请求一起发送参数 : 在请求中发送URL参数,对于带参数的URL ,jmeter提供了一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应RUL中的 名称1=值1)。
同请求一起发送文件:在请求中发送文件,通常,HTTP文件上传行为可以通过这种方式模拟。
从HTML文件获取所有有内含的资源:当该选项被选中时,jmeter在发出HTTP请求并获得响应的HTML文件内容后,还对该HTML进行Parse 并获取HTML中包含的所有资源(图片、flash等),默认不选中,如果用户只希望获取页面中的特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,这样,只有能匹配指定正则表达式的URL指向资源会被下载。
Java请求默认值
可以使用该请求执行java文件
用jmeter测试java程序
最近在用jmeter进行性能测试,防止被忘记,把步骤写下。
场景:测试java程序
1、右击测试计划-> 添加 -> Threads(Users) -> 线程组
2、设置线程属性,用于并发请求。
介绍:
线程数: 5
Ramp-Up Period(in seconds) : 1
循环次数: 2
含义:1秒种起动5个线程,每个线程循环调用2次java请求
3、线程组右击 -> 添加 -> Sampler -> Java请求
之前建立测试类:
package com.my.test; import java.util.Random; import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; import org.apache.jmeter.samplers.SampleResult; /** * Hello world! * */ public class App extends AbstractJavaSamplerClient{ public static double computer(double a,double b){ return a * b / a * a; } @Override public SampleResult runTest(JavaSamplerContext arg0) { // TODO Auto-generated method stub SampleResult sr = new SampleResult(); sr.sampleStart(); Random random = new Random(); for(int i=0; i<10000; i++){ computer(random.nextDouble(),random.nextDouble()); } sr.setSuccessful(true); sr.sampleEnd(); return sr; } @Override public void setupTest(JavaSamplerContext context) { // TODO Auto-generated method stub super.setupTest(context); } @Override public void teardownTest(JavaSamplerContext context) { // TODO Auto-generated method stub super.teardownTest(context); } }
使用的jar包有:ApacheJMeter_java.jar ,ApacheJMeter_core.jar
上述jar包在 %JMETER_HOME%/lib/ext/下
将测试程序打成jar包,放在%JMETER_HOME%/lib/ext/下
这里会自动识别出该类,选择。
4、线程组右击 -> 添加 -> 监听器 -> 用表格察看结果
Ctrl + R,开始运行,
Ctrl + E,清除历史结果
JDBC Connection Configuration
Database URL: jdbc:oracle:thin:@192.168.1.168:1521:ptoracl
JDBC Driver class: oracle.jdbc.driver.OracleDriver
Username: lianggzone
Password:lianggzone
|
附注:
Database URL 格式:jdbc:oracle:thin:@[IP地址]:[端口号]:[实例名]
用户名、密码就是连接数据库的用户名和密码
阅读(4856) | 评论(0) | 转发(0) |