基于Loadrunner平台Socket协议的JavaVuser(多线程)

/* 
     * LoadRunner Java script. (Build: 15) 
     * Script Description:  
     * 
     * 作者:谷博涛 
     * 制作时间:2012-1-18 
     * E-mail:gubotao@foxmail.com 
     * Loadrunner:11.00 
     *  
     * 内容概要: 
     * 模拟基于Socket协议的即时消息系统中的客户端行为LR脚本, 
     * 为模拟真实IM客户端,接收消息和发送消息分两个线程工作。 
     *  
     */  
      
    import lrapi.lr;  
    import java.io.IOException;  
    import java.io.InputStream;  
    import java.io.OutputStream;  
    import java.net.Socket;  
    import java.net.UnknownHostException;  
    import java.util.Iterator;  
    import java.util.concurrent.atomic.AtomicBoolean;  
      
    public class Actions  
    {  
        // 客户端  
        private Socket client;  
        // 房间号  
        private String roomId;  
        // 用户ID  
        private String id;  
        // 输出流  
        private OutputStream out;  
        // 输入流  
        private InputStream in;  
        // 连接标志  
        //private boolean connFlag = false;  
        private  AtomicBoolean connFlag =new AtomicBoolean(false);  
      
        // 客户端是否结束标志  
        //private boolean endFlag = true;  
        private  AtomicBoolean endFlag =new AtomicBoolean(true);  
      
      
        public int init() throws Throwable {  
            connect();   
        //lr.think_time(10);  
            return 0;  
        }//end of init  
      
      
        public int action() throws Throwable {  
            sendAction();  
            return 0;  
        }//end of action  
      
      
        public int end() throws Throwable {  
            sendEnd();  
            return 0;  
        }//end of end  
      
    //====主题代码==================//  
      
        //连接服务器  
        private void connect() {  
            try {  
                    client = new Socket("127.0.0.1", 5222);  
                    System.out.println("connect success!!!");  
                    out = client.getOutputStream();  
                    in = client.getInputStream();  
                    receiveAction();  
                    login();  
            } catch (UnknownHostException e) {  
                    System.out.println("UnknownHostException=" + e);  
                    e.printStackTrace();  
            } catch (IOException e) {  
                    System.out.println("IOException=" + e);  
                    e.printStackTrace();  
            }  
        }  
      
        //登录服务器  
        private void login() {  
            String loginMsg = "<msg type=\"login\" channel=\"CCTV1\"></msg>";  
            sendMsg(loginMsg);  
        }  
      
        //启动接收线程  
        private void receiveAction() {  
        new ReceiveThread().start();  
        }  
      
        //得到房间号码和用户ID  
        private void getEleVal(String msg) {  
        int index =0;  
      
        index = msg.indexOf("to");  
        msg = msg.substring(index + 4, msg.length());  
        index = msg.indexOf("'");  
        id = msg.substring(0, index);  
        System.out.println(roomId);  
      
        index = msg.indexOf("roomId");  
        msg = msg.substring(index + 8, msg.length());  
        index = msg.indexOf("'");  
        roomId = msg.substring(0, index);  
        System.out.println(id);  
      
        connFlag.set(true);  
        }  
      
        //发送消息  
        private void sendAction() {  
        if(connFlag.get()){  
            System.out.println("发送消息----->");  
            String msg = "<msg type=\"groupchat\" channel=\"CCTV1\" from=\"" + id  
            + "\" to=\"" + roomId + "\"><body>test</body></msg>";  
          
            sendMsg(msg);  
        }  
        }  
      
        //调用写入流方法  
        private void sendMsg(String msg) {  
        //new SendThread(msg).start();  
        writeMsg(msg);  
        }  
      
        //将消息写入流  
        private void writeMsg(String msg) {  
        try {  
            if (out != null) {  
            out.write(msg.getBytes("UTF-8"));  
            out.flush();  
            }  
        } catch (Exception e) {  
            System.out.println("Exception=" + e);  
        }  
        }  
      
        //关闭客户端  
        private void sendEnd() {  
        endFlag.set(false);  
        try {  
            client.close();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        }  
        /** 
         * 接收消息线程类 
         *  
         * @author Administrator 
         *  
         */  
        private class ReceiveThread extends Thread {  
        @Override  
        public void run() {  
            while (endFlag.get()) {// 循环接收消息  
                try {  
                int len = in.available();  
      
                if(len>0){  
                    System.out.println(len);  
                    byte[] bytes = new byte[len];  
                    in.read(bytes);  
                    String result = new String(bytes);  
                    System.out.println("接收到的消息:" + result);  
      
                    if(result != null && !"".equals(result)&& result.contains("res_bind")){  
                    getEleVal(result);  
                    }  
                }  
                } catch (Exception e) {  
                // TODO: handle exception  
                }  
            }  
        }  
        }  
      
      
    //======发送消息线程类(本代码未用到)=========  
        private class SendThread extends Thread {  
        private String msg;  
          
        public SendThread(String msg) {  
            this.msg = msg;  
        }  
          
        @Override  
        public void run() {  
            if (connFlag.get()) {  
            writeMsg(msg);  
            }  
        }  
        }  
      
    }//end for class Actions  

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-12 10:55:22

基于Loadrunner平台Socket协议的JavaVuser(多线程)的相关文章

LoadRunner编写Socket协议脚本方法

本文主要介绍使用LoadRunner手工编写Windows Socket协议测试脚本的方法. 通过LoadRunner编写Windows Socket协议测试脚本,总体说来,比较简单.就像把大象放进冰箱一样,总共分三步: 第一步:把冰箱门打开 //建立到服务端的连接 rc = lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=128.64.64.23:8988&

利用LoadRunner编写socket性能测试脚本

一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socket概述 socket是操作系统中I/O系统的网络延伸部分,它扩展了操作系统的基本I/O到网络通信,使进程和机器之间的通信成为可能.如果想完全地理解socket在Loadrunner中如何工作的,熟悉一些关于它的历史会很有帮助. 当前常用的socket,最早起源于BSD UNIX类的操作系统.在UNIX系统上,比如BSD,把对网络的支持加入操作系统,以一

基于UDP高性能传输协议UDT doc翻译(一)

原文转自:http://hi.baidu.com/doodlezone/item/74a203155efe26dbbf9042dd                                                       UDT文档阅读理解 一.  概述 UDT是一个高性能的基于UDP的数据传输协议,它是为支持高速广域网上海量数据传输而设计,为解决TCP的效率和公平问题,同时提供可靠的数据流和报文传输. UDT是C++库,几乎类同于BSD socket APIs. UDT是多线

基于.NET平台常用的框架整理

原文:基于.NET平台常用的框架整理 转:http://www.cnblogs.com/hgmyz/p/5313983.html 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库. 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分

基于Java的UDP协议程序设计初探

在Java中进行网络编程是相对容易的,因为J2SE中的java.net包已经对各种通信协议很好的进行了封装,本文主要讲述如何基于UDP(用户数据报)协议编写应用程序. 通常我们进行网络编程一般都是使用基于socket的TCP/IP编程,毕竟TCP/IP应用非常的广泛,比如我们浏览互联网就是基于HTTP协议.我们发送邮件是通过SMTP协议.它们都是基于TCP/IP的.TCP/IP的传输最重要的是它可以保证数据到达目的地,而UDP则不同他并不保证准确的传输,数据有可能丢失.如果有兴趣的话,读者可以参

基于X86平台的PC机通过网络发送一个int(32位)整数的字节顺序

1.字节顺序 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端.大端两种字节顺序.小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处:大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处.计算机中读取数据的时候是从低地址到高地址,存储数据时候相反! 2.主机字节序到网络字节序 基于X86平台的PC机是小端字节序的,而有的嵌入式平台则是大端字节序的.因而对int.uint16.uint32等多于1字节类型的数据,在这些嵌入式平台上应该变换其存储顺

基于云计算平台的EPC中间件系统

去年,温家宝总理在政府工作报告中明确提出"加快物联网的研发应用 ,再一次体现了政府高度重视物联网的发展.在国家政策推动下,电信运营商积极介入物联网业务,把物联网作为未来重要的赢利点. 1 物联网体系结构及现有EPC中间件设计特点 物联网是通过射频识别(RFID).红外感应器.全球定位系统.激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网连接起来,进行信息交换和通讯,以实现智能化识别.定位.跟踪.监控和管理的一种网络.在业界,物联刚一般被公认为分成三个层次,底层是感知和收集前端数据的感知

linux网络编程之TCP/IP基础(五) 分析一帧基于UDP的TFTP协议帧

下图是UDP的段格式: 相比TCP段格式,UDP要简单得多,也没啥好 说的,需要注意的是UDP数据长度指payload加上首部的长度. 下面分析一帧基于UDP的TFTP协议帧: 以太网 首部 0000: 00 05 5d 67 d0 b1 00 05 5d 61 58 a8 08 00 IP首部 0000: 45 00 0010: 00 53 93 25 00 00 80 11 25 ec c0 a8 00 37 c0 a8 0020: 00 01 UDP首部 0020: 05 d4 00 45

基于UNIX平台FTP服务器的建立

目前很多企业单位正在构架自己的Intranet,FTP服务器是其中的一个服务支持,有很多单位购置了基于UNIX平台的计算机,为了在网上能够提供FTP服务支持,专门购置基于UNIX平台的FTP Server软件,其实在基于UNIX平台的计算机系统中,采取一定的技术方法,就可以建立自己的FTP Server,实现网上文件上下载服务,无须再购置专门的软件,和乐而不为之呢?下面就其建立过程阐述如下: 1.确定FTP Server的共享目录 为FTP Server建立一个FTP工作目录,在此设定为/hom