Loadrunner11模拟多客户端并发对服务器并发处理socket请求的能力进行性能测试,C语言编写的winsocket Vuser脚本比较常见和简单,Java由于第三方库的庞大,能做的事情很多,这里介绍一下用Java写的脚本模拟socket客户端的压力测试情况。
主要环境:
1,JDK1.6
2,LoadRunner11
3,ApacheMINA2.09
基本流程是:
1,以MINA写成的java 同步客户端,打包为jar文件,需要参数,在LR11中为File形式提供参数;
2,在LR11的Vuser Generator中选择建立Java Vuser
3,在Vuser Generator的Run-time Setting > Java Enviroment settings > Classpath 中选择 Add Jar or zip file,把打包的java mina同步客户端jar文件和必要的库文件引入。
4,Vuser Generator的 Parameters List设定页,新建一个File类型的参数列表PARAMS,引入实现编辑好的参数列文件。
5,在Vuser Generator的View Script,在Actions中加入Java socket客户端调用。
6,建立测试场景。
7,在LR11的Controller中引入测试场景,设定并发测试参数。
8,在LR11的Controller中启动场景对服务器进行并发测试。
9,在LR11和服务端日志中分析测试结果 。
部分代码:
MINA同步客户端
package lr.test1; import java.net.InetSocketAddress; import java.nio.charset.Charset; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.future.ReadFuture; import org.apache.mina.core.future.WriteFuture; import org.apache.mina.core.service.IoConnector; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.transport.socket.nio.NioSocketConnector; public class CommandSender { private static Logger logger = Logger.getLogger(CommandSender.class.getName()); private String port ; private String ip ; private String cmdtype; private int poolSize = 1; private LinkedBlockingQueue<IoSession> pool; private IoConnector connector = null; private static int CMDTIMEOUT_MILL = 2000;//等待回应的超时时间(毫秒) public CommandSender(String ip,String port, String cmdtype) { this.ip = ip; this.port = port; this.cmdtype = cmdtype; } public String sendpacket(String cmd){ if( !initclient() ){ logger.error("Connect failed!"); return null; } String res = sendmsg(cmd); this.close(); return res; } public boolean initclient() { boolean res = true; try { connector = new NioSocketConnector(); connector.getSessionConfig().setUseReadOperation(true); DefaultIoFilterChainBuilder chain = connector.getFilterChain(); ProtocolCodecFilter cd = new ProtocolCodecFilter(new minaCodeFactory(Charset.forName("UTF-8"))); chain.addLast("chainin", cd); connector.getSessionConfig().setReadBufferSize(1024); connector.getSessionConfig().setMaxReadBufferSize(2048); pool = new LinkedBlockingQueue<IoSession>(poolSize); for (int i = 0; i < poolSize; i++) { ConnectFuture connectF = connector.connect(new InetSocketAddress(ip, Integer.valueOf(port))); connectF.awaitUninterruptibly(); IoSession session = connectF.getSession(); pool.put(session); } } catch (Exception e) { logger.error("Connected to server failed, "+e.toString()); res = false; } return res; } private String sendmsg(String msg){ IoSession session = null; String res = ""; try { session = pool.take(); if (session == null) { logger.error("CommandSender sendmsg session null. ["+msg+"]"); return res; }; WriteFuture writeF = session.write(msg).awaitUninterruptibly(); if (writeF.getException() != null) { logger.error("CommandSender sendmsg,"+writeF.getException().getMessage()+",["+msg +"]"); }else if (writeF.isWritten() ){ ReadFuture readF = session.read(); if( readF.awaitUninterruptibly(CMDTIMEOUT_MILL,TimeUnit.MILLISECONDS) ){ res = readF.getMessage().toString().trim(); logger.info("CommandSender sendmsg complete, response: "+ res + ",[" + msg + "]"); }else{ logger.error("CommandSender sendmsg,response timeout! ["+ msg +"]"); } }else{ logger.error("CommandSender sendmsg error, "+msg); } } catch (Exception e) { logger.error("CommandSender sendmsg error, "+e.toString()); }finally { try { pool.put(session); } catch (Exception e) { logger.error("CommandSender sendmsg error, "+e.toString()); } } return res; } public void close() { this.connector.dispose(); } } package lr.test1; public class LRJava1 { /** * @param args */ public static void main(String[] args) { String ip = args[0]; String port = args[1]; String param = args[2]; String cmdtype = args[3]; CommandSender c = new CommandSender(ip,port,cmdtype); c.sendpacket("^HEADER^"+ param +"^^content"); } }
Vuser Script Actions部分代码:
/* * LoadRunner Java script. (Build: _build_number_) * * Script Description: * */ import lrapi.*; import lr.test1.LRJava1; public class Actions { public int init() throws Throwable { return 0; }//end of init public int action() throws Throwable { //设置集合点 lr.rendezvous("集合点"); lr.start_transaction("j1"); LRJava1.main(new String[]{"192.168.1.2","9999", "<PARAMS>", "REQUEST1"}); lr.end_transaction("j1", lr.AUTO); return 0; } public int end() throws Throwable { return 0; }//end of end }
相关推荐
这篇文章写的很不错,是在http://www.open-open.com资料网站上发现的,很感谢站长的慷慨,在我积分不够的情况下,把此文章给我,互联网需要这样的行动,技术的发展需要共享资源。
在LoadRunner中,Java Vuser协议是用于对Java应用程序进行负载和性能测试的重要工具。它允许测试人员模拟大量用户同时访问Java应用,以检测系统的稳定性和性能。以下将详细讲解如何使用Java Vuser协议创建和执行性能...
这是loadrunner(Java_Vuser)将excel信息读到数据库所依赖的jar包,支持Excel 95-2003的所有版本(特别说明2007需要将excel另存为95-2003版本,才能被正常调用)。
标题中的"web test LoadRunner SAP / java / Java Vuser / web_set_max_html_param_len"涉及到的是性能测试领域,特别是使用HP LoadRunner工具进行Web应用程序的压力测试。LoadRunner是一款功能强大的性能测试工具,...
errorError在Loadrunner中使用JAVAVuser协议如何将线程改为进程模式当我们初始化java程序时,必须初始化classloader.这个会与JNDI校验时非常关键的!当Vuser作一个进程时时每个进程都会缺省的加载进来,这是没有什么...
在进行性能测试时,关键是要模拟大量并发用户发送邮件,因此,你可以通过调整Vuser数量来增加压力,并使用LoadRunner的监控工具分析服务器响应时间、吞吐量、错误率等性能指标,以评估邮件系统的稳定性和性能。...
在LR(LoadRunner)性能测试工具中,使用Java Vuser测试Java类功能是一项常见的任务,这对于验证和优化Java应用程序的性能至关重要。以下是一篇关于如何在LR中利用Java Vuser进行此类测试的详细概述。 首先,理解...
HP-Socket通常会结合第三方压力测试工具,如JMeter、LoadRunner等,进行集成测试。开发者也可以根据自身需求编写特定的测试脚本来模拟各种场景。 五、易源代码分析与优化 在获取到HP-Socket的压力测试源代码后,...
本文将详细介绍如何使用LoadRunner进行Webservice的压力测试,结合具体的步骤示例,帮助你理解并掌握这一关键技能。 1. **LoadRunner简介** LoadRunner由Micro Focus公司开发,它通过模拟大量用户并发执行业务流程...
《LoadRunner 7.8 Controller、Vuser、Analysis 使用指南》是针对HP LoadRunner这款强大的性能测试工具的一份详尽教程。LoadRunner是一款业界广泛使用的性能测试工具,它能够模拟大量用户并发执行业务流程,以此来...
【LOADRUNNER自动化性能和压力测试详解】 LoadRunner是一款强大的性能测试工具,它能够预测和分析系统的性能行为,尤其在高并发用户负载下。通过模拟数以万计的虚拟用户,LoadRunner可以真实反映出系统在实际操作...
LoadRunner支持多种协议,包括Java Virtual Machine(JVM)协议,使得它可以模拟Java应用的行为并进行压力测试。在"LoadRunner_Java.zip"这个压缩包中,我们可以看到它专门针对Java应用的测试场景。 【ODBC】(Open...
LoadRunner是一款强大的负载测试工具,它允许测试人员模拟大量用户并发执行任务,以评估应用程序的性能和稳定性。在本文档中,我们将重点讨论如何使用LoadRunner来编写JAVA测试脚本。 首先,LoadRunner支持多种编程...
在LoadRunner中,创建Vuser脚本是非常关键的一步,因为它直接关系到性能测试的效果。Vuser脚本可以手动编写或者通过录制的方式生成。LoadRunner提供了一个名为VuGen的工具,专门用于脚本的创建和编辑。 ##### 1. ...
要求使用 LoadRunner 进行压力测试。录制用户登录系统过程。然后分别模拟 10 个、20 个、50 个用户登录系统,分别获得响应时间、吞吐量等性能指标,并适度给出分析。 4.4、实验要求 (1) 撰写实验报告,包括但不限于...
在IT性能测试领域,LoadRunner是一款备受推崇的工具,它能够模拟大量虚拟用户(VUser)来对应用系统进行压力测试,从而评估系统的性能和稳定性。本指南将深入探讨如何使用LoadRunner创建VUser脚本,这对于初学者来说...
在使用 LoadRunner 进行负载/压力测试时,需要录制基本的用户脚本。录制用户脚本需要用到 Visual User Generator。首先,启动 Visual User Generator,然后新建一个用户脚本,选择系统通讯的协议。这里我们需要测试...