目的好处:
1.我们把做接口测试的代码直接移植到jmeter,用jmeter来做稳定性测试比较方便,也可以直接做性能,但是考虑到监控插件太烂,还是建议用loadrunner做性能监控
2.公司较多使用java,高手也很多,用java写脚本更加容易上手loadrunner的性能测试
方法:
1.通过jmeter的java请求来直接运行我们上传的jar包中的用例
jar中的规范必须严格符合jmeter要求的格式继承AbstractJavaSamplerClient类
下面是将coa一个接口测试移植的小例子,整包见附件
//初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行,类似于LoadRunner中的init方法
public void setupTest(JavaSamplerContext arg0) {
results = new SampleResult();
domain = arg0.getParameter("domain", "");
if (domain != null && domain.length() > 0)
{
results.setSamplerData(domain);
}
appsec = arg0.getParameter("appsec", "");
if (appsec != null && appsec.length() > 0)
{
results.setSamplerData(appsec);
}
appkey = arg0.getParameter("appkey", "");
if (appkey != null && appkey.length() > 0)
{
results.setSamplerData(appkey);
}
}
//设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("domain", "https://10.249.192.87:8003/getSubscriber?data=");
params.addArgument("appsec", "yw0QjdmJmM");
params.addArgument("appkey", "ATcapideOxHLEfIq");
return params;
}
//测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于LoadRunner中的Action方法
@SuppressWarnings("deprecation")
public SampleResult runTest(JavaSamplerContext context) {
int len = 0;
results.sampleStart(); //定义一个事务,表示这是事务的起始点,类似于LoadRunner的 lr.start_transaction
domain = context.getParameter("domain");
appsec = context.getParameter("appsec");
appkey = context.getParameter("appkey");
//coa_test test1 = new coa_test();
try {
flag = test_getSubscriber_basic_1(domain, appkey, appsec, glresponse);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
results.sampleEnd(); //定义一个事务,表示这是事务的结束点,类似于LoadRunner的 lr.end_transaction
results.setDataEncoding("UTF-8");
if(flag == true){
System.out.println("test1 pass");
results.setResponseCode("200");
results.setResponseData(glresponse);
results.setSuccessful(true); //用于设置运行结果的成功或失败,如果是"false"则表示结果失败,否则则表示成功
}else{
//
results.setResponseCode("doamin:"+domain);
// results.setResponseData("doamin:"+domain);
results.setResponseCode("201");
results.setSuccessful(false);
}
return results;
}
//结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行,类似于LoadRunner中的end方法
public void teardownTest(JavaSamplerContext arg0) {
}
将jar包打好后放入jmeter安装目录\lib\ext下,重新打开就可以看到coa的test代码了
优点:可以测试并发调用接口可能出现的问题,不用在代码中起多线程
缺点:1.没有控制台可以看log,只能在把log打在文件中查看
2.只能在察看结果树里看执行状态,其他有待摸索,相关资料支持少
3.java gui做图像监控插件很烂,做性能建议用loadrunner监控
2.loadrunner我们组使用的人还比较少,大部分还在学习阶段,**算是lr的专家了,但是它写事务脚本是用c#,这个加大了
我们的学习成本,现在loadrunner对jdk的支持越来越好,所以考虑用java来写事务脚本测服务器性能。
方法:
LR11貌似不用装支持java的插件了,直接 Create Scripts->New->Java->Java Vuser生成脚本
vuser_int和vuser_end不用管了,代码直接整合到actions的init和end方法中了,我们需要做的就是在action方法里写我们 的事务脚本,简单的例子:
import lrapi.lr;
import org.apache.log4j.*;
public class testjava1
{
public static void main(String args[])
{
System.out.println("hello world");
}
public String getStr()
{
return "hello world";
}
public String getStr(String str)
{
return str;
}
}
public class Actions
{
static Logger logger = Logger.getLogger(Actions.class.getName());
int i=10;
public int init() {
PropertyConfigurator.configure("C:\\Users-now\\yang.kongy\\workspace\\koubei-hawkeye-openapi\\src\\main\\java\\resource\\log4j.properties");
return 0;
}
public int action() {
lr.start_transaction("事务");
testjava t=new testjava();
lr.rendezvous("集合");
lr.think_time(2);
lr.end_transaction("事务",lr.PASS);
return 0;
}
public int end() {
return 0;
}
}
框架写好后,脚本多多向**请教了~
基本的loadrunner的函数库还是要熟悉的,比如thinktime,事务集合,输出等等
在Vuser->Runtime settings里classpath 引入函数需要的jar包,设置对jdk的路径,否则会出现无法找到类
这里一定要注意LR11不支持64bit的jdk,由于我机子是64bit的安装的64bit的jdk,一直报无法找到jdk,安装了jdk32bit就好了
附:jmeter java请求显示response信息
results.setDataType(SampleResult.TEXT);
results.setContentType("text/html; charset=utf-8");
results.setResponseData("res-yangk","utf-8");
results.setResponseCode("200");