`

Loadrunner11以Java Vuser进行socket压力测试

 
阅读更多

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
}



 

 

 

 

分享到:
评论

相关推荐

    LoadRunner用Java Vuser做性能测试

    这篇文章写的很不错,是在http://www.open-open.com资料网站上发现的,很感谢站长的慷慨,在我积分不够的情况下,把此文章给我,互联网需要这样的行动,技术的发展需要共享资源。

    10 Loadrunner中Java Vuser协议脚本1

    在LoadRunner中,Java Vuser协议是用于对Java应用程序进行负载和性能测试的重要工具。它允许测试人员模拟大量用户同时访问Java应用,以检测系统的稳定性和性能。以下将详细讲解如何使用Java Vuser协议创建和执行性能...

    loadrunner(JavaVuser)将excel信息读到数据库所依赖的jar包

    这是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

    标题中的"web test LoadRunner SAP / java / Java Vuser / web_set_max_html_param_len"涉及到的是性能测试领域,特别是使用HP LoadRunner工具进行Web应用程序的压力测试。LoadRunner是一款功能强大的性能测试工具,...

    在Loadrunner中使用JAVAVuser协议如何将线程改为进程模式

    errorError在Loadrunner中使用JAVAVuser协议如何将线程改为进程模式当我们初始化java程序时,必须初始化classloader.这个会与JNDI校验时非常关键的!当Vuser作一个进程时时每个进程都会缺省的加载进来,这是没有什么...

    loadrunner_java_vuser实现smtp邮件发送的脚本.doc

    在进行性能测试时,关键是要模拟大量并发用户发送邮件,因此,你可以通过调整Vuser数量来增加压力,并使用LoadRunner的监控工具分析服务器响应时间、吞吐量、错误率等性能指标,以评估邮件系统的稳定性和性能。...

    LR中使用Java Vuser测试Java类功能

    在LR(LoadRunner)性能测试工具中,使用Java Vuser测试Java类功能是一项常见的任务,这对于验证和优化Java应用程序的性能至关重要。以下是一篇关于如何在LR中利用Java Vuser进行此类测试的详细概述。 首先,理解...

    HP-Socket压力测试 易源代码

    HP-Socket通常会结合第三方压力测试工具,如JMeter、LoadRunner等,进行集成测试。开发者也可以根据自身需求编写特定的测试脚本来模拟各种场景。 五、易源代码分析与优化 在获取到HP-Socket的压力测试源代码后,...

    Loadrunner Webservice压力测试

    本文将详细介绍如何使用LoadRunner进行Webservice的压力测试,结合具体的步骤示例,帮助你理解并掌握这一关键技能。 1. **LoadRunner简介** LoadRunner由Micro Focus公司开发,它通过模拟大量用户并发执行业务流程...

    loadrunner7.8Controller、vuser、Analysis使用指南

    《LoadRunner 7.8 Controller、Vuser、Analysis 使用指南》是针对HP LoadRunner这款强大的性能测试工具的一份详尽教程。LoadRunner是一款业界广泛使用的性能测试工具,它能够模拟大量用户并发执行业务流程,以此来...

    LOADRUNNER进行自动化性能和压力测试

    【LOADRUNNER自动化性能和压力测试详解】 LoadRunner是一款强大的性能测试工具,它能够预测和分析系统的性能行为,尤其在高并发用户负载下。通过模拟数以万计的虚拟用户,LoadRunner可以真实反映出系统在实际操作...

    LoadRunner_Java.zip_压力测试

    LoadRunner支持多种协议,包括Java Virtual Machine(JVM)协议,使得它可以模拟Java应用的行为并进行压力测试。在"LoadRunner_Java.zip"这个压缩包中,我们可以看到它专门针对Java应用的测试场景。 【ODBC】(Open...

    使用LoadRunner-编写JAVA-测试脚本.docx

    LoadRunner是一款强大的负载测试工具,它允许测试人员模拟大量用户并发执行任务,以评估应用程序的性能和稳定性。在本文档中,我们将重点讨论如何使用LoadRunner来编写JAVA测试脚本。 首先,LoadRunner支持多种编程...

    LoadRunner详解(vuser/controller/analysis)之vuser

    在LoadRunner中,创建Vuser脚本是非常关键的一步,因为它直接关系到性能测试的效果。Vuser脚本可以手动编写或者通过录制的方式生成。LoadRunner提供了一个名为VuGen的工具,专门用于脚本的创建和编辑。 ##### 1. ...

    LoadRunner 压力测试完整报告

    要求使用 LoadRunner 进行压力测试。录制用户登录系统过程。然后分别模拟 10 个、20 个、50 个用户登录系统,分别获得响应时间、吞吐量等性能指标,并适度给出分析。 4.4、实验要求 (1) 撰写实验报告,包括但不限于...

    loadrunner 创建 vuser 脚本指南(一)

    在IT性能测试领域,LoadRunner是一款备受推崇的工具,它能够模拟大量虚拟用户(VUser)来对应用系统进行压力测试,从而评估系统的性能和稳定性。本指南将深入探讨如何使用LoadRunner创建VUser脚本,这对于初学者来说...

    LoadRunner压力测试实例

    在使用 LoadRunner 进行负载/压力测试时,需要录制基本的用户脚本。录制用户脚本需要用到 Visual User Generator。首先,启动 Visual User Generator,然后新建一个用户脚本,选择系统通讯的协议。这里我们需要测试...

Global site tag (gtag.js) - Google Analytics