jmeter脚本写
我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定义脚本的协议,比如"C Vuser","Java Vuser"等协议.同样,Jmeter也支持自定义编写的测试代码,不过与LoadRunner不同的是,Jmeter没有自带编译器,需要借助第三方编译器才能实现.下面举一个简单的Java自定义测试代码例子,使用Java编译器编写测试代码(Java编译器可以用Eclipse,JBulider等),实现功能为:在测试前输入任意一个字符串,然后判断该字符串的长度是否大于5,如果大于则测试结果成功,否则测试结果位失败,然后在放到Jmeter中模拟10个用户测试,同时运行这段代码,具体实现如下:
1.打开Java编译器,新建一个项目"TestLength",然后新建一个包"app".
2.从Jmeter的安装目录lib/ext中拷贝两个文件"ApacheJMeter_core.jar"和"ApacheJMeter_java.jar"到"Tester"的项目中,然后引入这两个JAR文件.(具体的引入方法参考各个Java编译器的使用方法)
3.在"app"包中新建一个类,名字叫"TestLength",不过这个类要继承"AbstractJavaSamplerClient"类,如果项目引入步骤二中的两个文件,就可以找到"AbstractJavaSamplerClient"类了.
4."TestLength"类在继承"AbstractJavaSamplerClient"类的同时也会继承四个方法,分别是"getDefaultParameters","setupTest","runTest"和"teardownTest"方法."getDefaultParameters"方法主要用于设置传入的参数;"setupTest"方法为初始化方法,用于初始化性能测试时的每个线程."runTest"方法为性能测试时的线程运行体;"teardownTest"方法为测试结束方法,用于结束性能测试中的每个线程.
5.具体实现代码如下:
package app;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import com.passpod.core.t8.*;
/**
* @author乐以忘忧
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TestLength extends AbstractJavaSamplerClient{
private SampleResult results;
private String testStr;
//初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行,类似于LoadRunner中的init方法
public void setupTest(JavaSamplerContext arg0) {
results = new SampleResult();
testStr = arg0.getParameter("testString", "");
if (testStr != null && testStr.length() > 0) {
results.setSamplerData(testStr);
}
}
//设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("testStr", ""); //定义一个参数,显示到Jmeter的参数列表中,第一个参数为参数默认的显示名称,第二个参数为默认值
return params;
}
//测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于LoadRunner中的Action方法
public SampleResult runTest(JavaSamplerContext arg0) {
int len = 0;
results.sampleStart(); //定义一个事务,表示这是事务的起始点,类似于LoadRunner的lr.start_transaction
len = testStr.length();
results.sampleEnd(); //定义一个事务,表示这是事务的结束点,类似于LoadRunner的lr.end_transaction
if(len < 5){
System.out.println(testStr);
results.setSuccessful(false); //用于设置运行结果的成功或失败,如果是"false"则表示结果失败,否则则表示成功
}else
results.setSuccessful(true);
return results;
}
//结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行,类似于LoadRunner中的end方法
public void teardownTest(JavaSamplerContext arg0) {
}
}
6.把上面的例子打包,然后把生成的"TestLength.jar"文件拷贝到Jmeter的安装目录lib/ext下.
7.运行Jmeter,添加一个线程组,然后在该线程组下面添加一个Java请求(在Sampler中),在Java请求的类名称中选择咱们刚创建的类"app.TestLength",在下面参数列表的"testStr"后面输入要测试的字符串,然后添加一个监听器(聚合报告),设置一下模拟的用户数就可以测试了.如果测试不成功,Jmeter会在它自己个输出框中抛出这个字符串.
通过上面的例子我们可以发现,使用Jmeter自定义Java测试代码,配合Jmeter自带的函数,就可以实现出LoadRunner中"Java Vuser"协议的绝大多数功能,而且是没有用户数限制和完全免费的(嘿嘿).上面的例子非常简单,而且没有任何实际意义,只是一个简单的Jmeter测试代码示例,用于抛砖引玉,希望大家一起交流,共同 进步.
2. 使用jmeter录制脚本及录制脚本的优化
1.右键测试计划---添加--线程(用户)--线程组
2.添加HTTP代理服务器(即把jmeter当做代理服务器)
3.设置代理服务器
①设置端口;
②设置Test Plan Creation 中的目标控制器(改为测试计划>线程组)注意不修改代理服务器启动时可能会报错;
③设置Requests Filtering (请求过滤器),添加建议排除,会根据设置排除模式,排除录制过程中的某些内容。
④点击“启动”按钮,后会弹出一个证书提示(注意:如果不是管理员使用,会报错,因为没有权限将证书写入到apache-jmeter-5.1.1\bin下)。
4.打开浏览器,设置计算机的代理设置(如图所示)
5.成功设置代理服务器后,在浏览器中输入网址访问,点击线程组中会有录制的脚本,因为再Requests Filtering (请求过滤器)设置了,添加了排除模式,所以录制时有些内容会被过滤。
6.录制成功后可以,添加察看结果树,保存脚本后,运行脚本。
7.录制完脚本后,接下来就是对录制脚本的优化,可以看出添加的排除模式并没有完全过滤CSS,可以禁用或删除无用的css和js(如何判断有这些内容有没有用,可以尝试先禁用掉,然后回放看对脚本有没有影响,如果禁用或者删除了,脚本还能运行成功,说明是无用的,否则反之)。
8.添加HTTP信息头管理器,作用于整个线程组,如果有自己单独的HTTP信息头管理器,则优先使用自己的。
9.如果有登录的脚本时,需要添加cookie管理器(不需要配置,直接添加使用)
3. 浅学Jmeter性能测试:使用代理服务器录制脚本
右上角设置->高级->系统->打开您计算机的代理设置->连接->局域网设置->勾选“为LAN使用代理服务器”->地址输入:127.0.0.1->端友知口输入:8888->勾选‘’对于本地地址不使用代理服务器->确定。好敏消
PS:设置代理时要关掉抓包工具,因为它也是一个代理服务器。
注:jmeter自带代理服务器
1、设置代理
启动Jmeter->测试计划->右键添加“非测试元件”->选择HTTP代理服务器->设置端口:8888->Test Plan Creation-> 目标控制器选择“后面创建的自定义线程组”。
2、创建线程组存放脚本
测试计划->右键添加“Threads”->选择“线程组”-> 自定义线程组名称 ->保存。
3、提前设置过滤
通常会碰到录制完脚本后查看Jmeter有多余的请求,我们可提前设置过滤去掉不需要的请求。
在HTTP代理服务器页面,点击"Requests Filtering",找到“排除模式”后添加并输入多个正则表达式 ,每行一个(.*\.php.* 或 .*\.js.* 或 .*\.png.* 或 .*\.gif.* 或 .*\.txt.* )。设置完成后,再重新启动代理录制脚本即可。
PS:话说之前学到的正则表达式终于用上了~
4、录制脚本
在jmeter代理服务器里“启动”服务器->弹出窗口点击ok->操作浏览器里目标网页->结束录制需要的模块后,点击jmeter“停止”,在Jmeter里查看脚本。
5、优化脚本
录制完成后,可能还存在一些漏网之鱼,可根据实际需要增删请求或配置。
PS:删除了多余的请求;配置了监听器-查看结果树后,有些请求失败了,添加了cookie管理器后全都请求成功。
注:B/S录制完脚本一定要添加cookie管理器
6、浏览器增加证书(如果有需求访问Https,无可省略)
右上角设置->高级->隐私设置与安全性->证书->受信任的证书颁发机构->导入->在jmeter文件夹 bin 目录下 选择证拿亮书(只要开启过代理服务器,都会生成证书)。
录制完成后,一定要记得关闭代理服务器,否则上不了网。问题来了,如何取消代理服务器的设置呢?
右上角设置->高级->系统->打开您计算机的代理设置->连接->局域网设置->取消勾选“为LAN使用代理服务器”->确定。
4. 如何使用Jmeter录制脚本
1、录制脚本:(1)选中Test Plan单击鼠标右键,在弹出菜单中选择Add->Thread Group;
(2)接下来选中WorkBench单击鼠标右键,在弹出菜单中选择Add->Non-Test Elements->HTTP Proxy Server;
(3)在“HTTP Proxy Server”窗口中Target Controller下拉框选择Test Plan > Thread Group(表示脚本生成在这个线程组下),Grouping下拉框选择Put each group in a new controller(表示把每组脚本放到一个新的组中,避免生成的脚本杂乱且无法组织);(4)单击窗口最下方的Start;
(5)打开浏览器,设置代理服务器的设置为localhot,端口号为8080(在“HTTP Proxy Server”窗口中设置了使用8080端口进行侦听);
(6)在地址中键入要录制页面的URL对页面进行操作,Jmeter就会自动把所进行的操作录制成为脚本了,可以看到Thread Group节点下面多了许多的子节点就是录制生成的脚本;
(7)操作完毕后在Jmeter中单击Stop先停止录制,然后把浏览器的代理设置改为原来的设置即可。2、运行及记录结果设置:
(1)完成脚本的录制后还需要定义你所需的结果设置才算完成了Test Plan的设置,首先要设置Thread Group(相当于虚拟用户组)的属性,单击Thread Group,在右边的窗口中设置Number of Thread(相当于虚拟用户数)为5,Ramp-Up Period(in seconds)为1,Loop Cout选项取消选中Forever,在右边的框中输入2。以上设置表示共有5个虚拟用户,每隔1秒运行一个,迭代2次。
(2)要查看运行的结果还需要加入Listener,选中Thread Group单击鼠标右键选择Listener->View Results in Table,通过这个视图可以查看到每个链接的执行情况,包括执行时间和成功与否,再加入Aggregate Report,通过这个视图可以查看每个Thread Group组的最大、最小和平均响应时间。加入View Results Tree,通过这个视图可以查看每个链接的执行情况,包括发出的请求和服务器返回的详细内容。
以上就是录制和运行的全部内容,如果有更复杂的操作需求,Jmeter也可以修改脚本和参数化变量,因为关于Jmeter的脚本录制方法是从网上转载的,不能在下面添加,所以我会另写一遍关于Jmeter的脚本的修改和参数化变量的文章。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/li_ok/archive/2006/12/07/1433159.aspx
5. 使用jmeter做性能测试脚本怎么写
如果只是简单的接口类的脚本,完全可以网络一下,然后照着别人的流程走,主要是注意各种配置和参数的意义就行了,这个其实没多大难度,比loadrunner还简单。
然后是如果你是需要测试端到端的性能测试,就需要借助badboy这个工具来录制脚本,然后导入到jmeter中,后面同样需要做关联或者参数化的工作,这个网络一下同样有。
然后就是自定义的脚本,这个就需要自己有java代码的编写功底了、
6. jmeter入门 设置代理服务器和录制脚本
第一步:
可以设置浏览器代理,本文章推荐使用火狐浏览器
在浏览器—首选项--网络设置里面设置代理服务器
注意:端口号可以自行设置,但是不可以与本机其他代理产生冲突
第二步:
打开jmeter工具,添加非测试原件—HTTP代理服务器,
第三步:
设置端口号与浏览器设置的代理端口保持一致,注意线程组下面记得添加:HTTP Cookie 管理器
第四步:
填写录制的过滤条件,可以过滤掉一些不必要的接口
过滤条件可以使用:
*\.(js|css|PNG|jpg|ico|png|gif|woff|ttf|txt).*
这样基本设置就完成了,可以点击jmeter的代理服务器,录制脚本了;
点击启动,复制要测试的网址在火狐浏览器上,点击项目进行正常操作,接口就会自动录制,录制的接口可以手动筛除重复的;
注意: (这个已经改过了,不需要改,可以按照步骤去看一下文件哪个位置改了)
常见问题:
录制的Jmeter脚本回放时,发现输入的中文解析成乱码了
解决步骤:
1、打开Jmeter的安装目录,进入bin文件夹,编辑文件:jmeter.properties
2、将文件内容#sampleresult.default.encoding=ISO-8859-1
更改为:sampleresult.default.encoding=utf-8
(注意去掉前面的#号注释,否则不生效)。
7. jmeter 压力测试脚本怎么写
1. 运行jmeter
2. 左边树将出现测试计划、工作台两根节点。
3. 选择测试计划,按右键-》添加-》threads(users)线程组
线程组能设置以多少个线程并发做压力测试。
在”循环次数”设置不选择永远,循环次数设置1。
4. 现在先介绍如何设置登录http请求,选择线程组,右键――添加――》sampler-―》http 请求。
8. JMeter之代理服务器录制脚本
在JMeter中可以使用自身就带的HTTP代理服务器组件录制脚本,可以录制在WEB上的操作,也可以录制在手机App上的操作。
1、测试计划内包含的元件
添加元件操作步骤:
创建测试计划
创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组。
在线程组中,添加配置原件“HTTP Cookie管理器”组件:选中“线程组”右键 —> 添加 —> 配置元件 —> HTTP Cookie管理器。
说明:如果录制的操作包括 用户登录操作 ,则需要添加“HTTP Cookie管理器”,添加之后不需要任何配置,录制后,脚本中便保存用户登录的相关信息。
在测试计划下,添加非测试元件“HTTP代理服务器”组件:选中“测试计划”右键 —> 添加 —> 非测试元件 —> HTTP代理服务器。
在HTTP代理服务器组件下,添加监听器“察看结果树”组件:选中“HTTP代理服务器”右键 —> 添加 —> 监听器 —> 察看结果树。
最终测试计划中的元件如下:
点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。
2、HTTP代理服务器的设置内容
在HTTP代理服务器组件中,我们需要编辑:
端口: 默认8888,一般使用默认即可。主要不能与本地其他服务的端口号冲突,否则启动不了。
HTTPS Domains: 我的理解就是,设置代理服务器的主机IP地址或者域名。因为在我们本地使用,一般就是 localhost 或者127.0.0.1即可,当然不填写也是可以的。(此填写的地址一定要能够连接外网)
设置目标控制器: 也就是录制的组件存储到什么位置。这个一定要选,下图中选择了存储到目标线程组中。
配置完的界面内容,如上图所示。
3、设置浏览器的代理服务器
每个浏览器都可以设置服务器的代理,以Chrome浏览器为例。【设置需要区分是否为局域网】
点击右上角的设置 —> 高级 —> 系统 —> 最下面的‘’打开您计算机的代理设置‘’,点击右侧图标,就可以进入到代理服务器的设置页面了。
选要选中手动配置代理服务器,然后输入代理服务器的地址或者域名,还有端口号。
这里的配置,要和上面JMeter的HTTP代理服务器中的端口和HTTPS Domains的配置要对应上。
这样的话,浏览器中的操作,会先发送到JMeter中的HTTP代理服务器,在通过网络进行传输。这样JMeter中就可以录制下我们的操作,生成脚本了。
如下图所示:
4、录制脚本
以上内容设置完毕后,在浏览器地址栏中输入要录制脚本的地址。
然后在JMeter中的HTTP代理服务器界面,点击启动按钮。
提示:在HTTP代理服务器界面点击“启动”时,Meter将生成自己的证书。证书生成可能需要一些时间,在此期间,GUI将无响应。证书生成完成后,GUI将显示一个弹出对话框,其中包含根CA证书的详细信息,证书有效期为7天。该证书需要由浏览器安装,以便接受JMeter生成的主机证书。
如下图所示:
浏览器配置证书: 浏览器中导入证书 ,jmeter安装目录下的ApacheJMeterTemporaryRootCA.crt
之后开始在网站上进行操作,所有操作发出的请求,都会录制到JMeter脚本中。
操作完成之后,到JMeter的HTTP代理服务器中点击“停止”,然后将浏览器的代理设置恢复原样即可。
不恢复的话,会导致你无法使用浏览器访问外网。
如下图所示:【录制时弹出的控制器,不用进行设置,关闭时 点击 停止 即可】
5、查看录制的脚本
在JMeter中我们可以看到已经 记录 了许多请求对应的信息,包括PHP、js、.jpg、.png、.txt等请求。
如下图所示:
我们可以看到,我们只进行了简单的几步操作,却录制这么的请求。是因为JMeter录制很多非关键性的请求,这就需要我们进行一些优化。
录制脚本的优化有两个步骤:
在录制的时候,做一些过滤和排除操作。
在录制后的脚本中手动优化,删除不需要的组件,增加自己需要的组件。
1)服务器名称或IP与目标网站不同的、无关的,可以删除。
2)js/css/png/jpeg等这类请求删掉。
3)没有传递任何数据的请求可以屏蔽掉,等流程能回放成功了,这些再删除。如果回放不成功,再一个一个打开,进行检查。
6、HTTP代理服务器的排除模式
在测试脚本中有一些录制的信息是没有任何作用的,所以我们在录制脚本的时候,就可以通过HTTP代理服务器的排除模式,排除一些不需要的请求信息,如css、gif、png等请求。
例如:
在包含模式添加填上 .*\.jsp,只在请求JSP文件时录制脚本。
这里通常都是设置JSP或者HTML,可以根据具体情况进行填写。
在排除模式处填上.*\.js ,在请求js文件时不录制脚本。
这里通常都是设置js、jpg、png、gif、css等,这些类型文件请求都是不需要录制的。
当然我们也可以点击添加建议排除按钮,会自动生成一个过滤的正则表达式。
如下图所示:
添加上这些时候,录制出来的脚本,多余的累赘会减少很多。
7、保存脚本
脚本录制完成后,需要进行脚本的保存。
把脚本保存到本地,可以分享给其他成员,进行查看、编辑、回放等操作。
9. JMeter 脚本技术(参数化)
前面我们已经学习过用 Badboy 录制 webtours 网站 的注册脚本,录制下来的脚本可以直接回放并注册成功一个新用户(前提是录制脚本时创建的用户要先清除,系统用户名有唯一性)。
如果我们想保留之前注册成功的用户,然后继续创建新的用户,这种情况应该如何操作呢?大家可能想到去改脚本,把之前注册用户时填写的用户信息改成新用户的信息。一个用户可以这样操作,但要注册10个,100个,1000个新用户呢?
大家想想都应该知道不可能每注册一个用户时都去修改一次脚本,这样牛都会累死的。
我们平时录制的脚本内容都是固定死在脚本里的,每次运行脚本时使用的是同样的数据。那我们有没有办法把这些“死”的脚本救“活”呢?这个就是我们接下来要学习的脚本参数化。
在操作之前我们先来看看提交用户注册信息的请求。
上图圈出来的内容就是用户注册时填写的信息,我们需要对这部分的内容进行参数化。参数化其实就是把脚本里具体的内容改成调用变量的方式。
既然我们知道了操作的方向,那如何调用变量呢?变量我们现在还没创建,创建变量有多种方式,可以在测试计划下创建全局变量,也可以在用户参数下创建用户变量,还可以在配置元件下创建数据 CSV 数据文件导入变量。
在这里,我们只学习平时用得比较多的一种方式,在配置元件下添加 CSV 数据文件导入变量。下面我们来看一下配置选项:
名称: 自定义,给该元件起个名字。
注释: 自定义,一般写改元件的作用。
文件名: 表示参数文件存放的路径,文件不一定是 CSV 格式文件,可以是 CSV 文件 ,也可以是 txt 文件,如 d: est.txt 。这个配置项在 JMeter 一些低的版本里面是没有右边的 浏览 按钮选择文件的,只能手写文件路径。
文件编码: 读取文件时的编码格式,如果为空的话则为本地系统默认的编码方式,Windows 默认是 GBK,Linux 默认是 UTF-8。
变量名称: 参数名字,如果有多个就用英文状态下的逗号分隔,如 name,password 。如果参数名称为空, JMeter 会默认将参数文件的第一行值作为参数名字,从第二行开始调用参数值 。
忽略首行: 忽略 CSV 文件的第一行,只在上一项变量名称不为空时使用,如果变量名为空,则第一行必须包含头信息。
分隔符: 一般标准的 CSV 文件都是采用的逗号作为列分隔符,这里只需要和参数文件的分割方式匹配即可。
是否允许带引号?: 是否允许参数中包含被引用的值。这个是什么意思呢?其实 JMeter 允许引用字段中包含 分隔符 ,如逗号,但引用的字段要用双引号括起来。举个栗子: 1,"2,3",4 ,这样表示1是一个整体,2,3是一个整体,4是一个整体。另外, JMeter 还允许引用字段中包含双引号,如果要包含双引号请使用 两个 双引号 。再举栗子: "5""6",7 ,这样表示5"6是一个整体,7是一个整体。
遇到文件结束符再次循环?: 当读取到参数文件的最后一个值时,是否允许循环取值?
遇到文件结束符停止线程?: 当读取到参数文件的最后一个值时,是否停止线程?这个配置项和上一个配置项只能有一个是 true。
线程共享模式: 共享模式,设置线程或者线程组对于参数文件的共享方式。有四种共享方式,默认是所有线程共享一个参数文件。
学习了上面的配置操作后,我们来创建一个 CSV 文件并且把脚本中要使用的数据都准备好。
接着,把 CSV 数据文件设置选项设置好。
设置完成后,接下来要做的是导入 CSV 文件并且调用数据到脚本中使用,在 JMeter 里面调用变量格式是 ${变量名称} 。
设置脚本循环运行4次,看看能否调用到 CSV 文件数据。
从上图可以看出,脚本居然能调用到 CSV 文件的数据,说明脚本已经实现了参数化。