Java 接口并发性能测试——loadrunner11
最近在使用loadrunner11测试Java 接口的并发性能,记录自己从小白到勉强做出合理的结果的过程,以便有需要的朋友参照,欢迎挑错。
1.loadrunner11介绍
LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。企业使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。 LoadRunner可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。-百度百科。
loadrunner是惠普公司开发的测试工具,目前有社区版可以免费无限期试用。下载注册方式参见:http://www.oschina.net/news/59345/loadrunner-free
本人是测试小白,目前了解到的测试工具:
①loadrunner 做性能测试,并发性能、负载测试。收费版功能强大,能够模拟各种情况。
② Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、 数据库, FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的 强度和分析整体性能。开源免费。
③JUnit 单元测试
我选择loadrunner11,是因为服务器上有现成的,不用自己安装,直接拿来用。此处省略安装步骤……
2.测试Java接口
2.1编写测试脚本
打开loadrunner,首先是创建测试脚本,loadrunner有很强大的录制脚本功能。可以录制模拟web页面登陆、点击等复杂的脚本。
我要测试的是Java 接口,需要创建Java Vuser。具体步骤:Create/Edit Scripts—>File—>New—>New Single Protocol Script—>Java Vuser
在action中编写你的Java代码。下面是我写的脚本:
import lrapi.lr; public class Actions{ public int init() throws Throwable { return 0; }//end of init public int action() throws Throwable { try{ CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("http://www.xx.com/detect"); String text = "我爱这蓝色的海杨。"; String type = "字词;"; List<NameValuePair> parameters = new ArrayList<NameValuePair>(); parameters.add(new BasicNameValuePair("text", text)); parameters.add(new BasicNameValuePair("type", type)); HttpEntity entity1 = new UrlEncodedFormEntity(parameters, "utf-8"); httpPost.setEntity(entity1); lr.rendezvous("point");//设置集合点 lr.start_transaction("auto");//设置事务开始点 HttpResponse response = httpClient.execute(httpPost); lr.end_transaction("auto", lr.AUTO);//设置事务结束点 StatusLine statusLine = response.getStatusLine(); int code = statusLine.getStatusCode(); if (code == 200) { HttpEntity entity2 = response.getEntity(); System.out.println(EntityUtils.toString(entity2, "utf-8")); } }catch(IOException e){ e.printStackTrace(); } return 0; }//end of action public int end() throws Throwable { return 0; }//end of end }
保存脚本,运行一下脚本(Vuser—>Run),测试一下是否有错误。
解释几个概念:
①集合点
用以同步虚拟用户,以便恰好在同一时刻执行任务。集合点更多用于混合并发,只是为了严格意义所谓的并发二设置。觉得理解困难的请参照:http://www.cnblogs.com/Uther/p/5301958.html。设置集合点方式,直接写代码或者Insert—>Rendezvous—>输入Rendezvous Name
②事务
loadrunner运行到事务start时开始计时,运行到end时结束计时。这个时间loadrunner会记录下来,并帮你分析平均响应时间等一些特征。
事务是LoadRunner度量系统性能指标的唯一手段,事务用来衡量系统的响应时间。我之前在脚本代码中计算响应时间,写到日志中。但是日志分析起来十分麻烦,写日志的过程涉及Java多并发,不如loadrunner事务简单方便准确。了解更多请参照:http://blog.csdn.net/liuyuzhu111/article/details/49803813
设置事务方式,直接写代码或者Insert—>Start Transaction/End Transaction
2.2 运行负载测试
Run Load Tests—>选择刚才编写的测试脚本—>选择Manual Scenario 手动场景
设置完场景之后Run即可。注意点:
在Global Schedule中设置Vuser个数,也就是并发数。
由于我测试的接口比较简单,只添加一个组。多个组时设置Vuser个数及运行原理目前没搞懂,等有空继续学习。
3.记录和分析结果数据
运行结束后,Results—>Analyze Result
4.编写测试报告
我认为并发性能需要考虑两点:①在程序不崩溃的情况下,可承受的最大并发数②在某一并发下,性能最优。
测试1-1000并发下,5min成功处理的请求数来衡量性能。
测试总数据量为1w条数据,在1-1000并发下,控制迭代次数(即处理完1w条数据),用耗时来衡量性能。