51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2376|回复: 0
打印 上一主题 下一主题

[求助] 使用loadrunner Java协议脚本测试socket接口遇到的效率问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-12-28 19:20:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在eclips里面调用代码向socket 接口发送xml发送及接收仅需要不到2s.
但是将代码写到loadrunner中调用至少需要14秒。
在运行时明显的卡在了           
Socket mSocket = new Socket(cIP, cPort);
这是什么问题啊。有办法解决么?
我的loadrunner中的代码如下:
/*
* LoadRunner Java script. (Build: _build_number_)
*
* Script Description:
*                     
*/

import lrapi.lr;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import org.apache.log4j.Logger;
import com.sinosoft.midplat.common.IOTrans;

public class Actions
{       private String cIP;
        private int cPort;

        public int action() throws Throwable {
                System.out.println("程序开始...");

                //本地
                String mIP = "10.50.102.47";
               
                int mPort = 7032;

                /**
                 * 1021-新单投保
                 * 1022-承保收费
                 * 1013-保单重打
                 * 1002-当日撤单
                 */
                String mFuncFlag = null;

                //返盘
                mFuncFlag = "1021";
                String fileName = "<xml_name>";
                String mInFilePath = "C:\\create_xml/"+fileName+".xml";
                String mOutFilePath = "C:\\out_xml\\"+fileName+"out.xml";
               

                Actions mTestUI = new Actions();
                mTestUI.setParmar("10.50.102.47",7032);
                InputStream mIs = new FileInputStream(mInFilePath);
                byte[] mOutBytes = mTestUI.sendRequest(mFuncFlag, mIs);

                OutputStream mFos = new FileOutputStream(mOutFilePath);
                mFos.write(mOutBytes);

                System.out.println("成功结束!");
                return 0;
        }

        public void setParmar(String pIP, int pPort) {
                this.cIP = pIP;
                this.cPort = pPort;
        }

        public byte[] sendRequest(String pFuncFlag, InputStream pInputStream) throws Exception {
                Socket mSocket = new Socket(cIP, cPort);
                long mOldTimeMillis = System.currentTimeMillis();
                long mCurTimeMillis = mOldTimeMillis;

                byte[] mInBodyBytes = IOTrans.toBytes(pInputStream);

                byte[] mInTotalBytes = new byte[mInBodyBytes.length + 16];

                //报文体长度
                String mInBodyLengthStr = String.valueOf(mInBodyBytes.length);
                int length = mInBodyLengthStr.length();
                for(int i=0;i<8-length;i++){
                        mInBodyLengthStr="0"+mInBodyLengthStr;
                }
                byte[] mInLengthBytes = mInBodyLengthStr.getBytes();
Throwable                System.arraycopy(InsuBytes, 0, mInTotalBytes, 0, InsuBytes.length);
                byte[] mFuncFlagBytes = pFuncFlag.getBytes();
                System.arraycopy(mFuncFlagBytes, 0, mInTotalBytes, 4, mFuncFlagBytes.length);

                System.arraycopy(mInLengthBytes, 0, mInTotalBytes, 8, mInLengthBytes.length);
                System.arraycopy(mInBodyBytes, 0, mInTotalBytes, 16, mInBodyBytes.length);

                mSocket.getOutputStream().write(mInTotalBytes);
                mSocket.shutdownOutput();
                mCurTimeMillis = System.currentTimeMillis();
                System.out.println();
                InputStream mSocketIs = mSocket.getInputStream();
                byte[] mOutHeadBytes = new byte[16];
                for (int tReadSize = 0; tReadSize < mOutHeadBytes.length;) {
                        int tRead = mSocketIs.read(mOutHeadBytes, tReadSize, mOutHeadBytes.length-tReadSize);
                        if (-1 == tRead) {
                                throw new EOFException("获取报文头出错!实际读入:" + new String(mOutHeadBytes));
                        }
                        tReadSize += tRead;
                }
                int mOutBodyLengthInt = Integer.parseInt(new String(mOutHeadBytes, 8, 8).trim());
                byte[] mOutBodyBytes = new byte[mOutBodyLengthInt];
                for (int tReadSize = 0; tReadSize < mOutBodyBytes.length;) {
                        int tRead = mSocketIs.read(mOutBodyBytes, tReadSize, mOutBodyBytes.length-tReadSize);
                        if (-1 == tRead) {
                                throw new EOFException("获取报文体出错!实际读入长度为:" + tReadSize);
                        }
                        tReadSize += tRead;
                }
                mSocket.close();
                mCurTimeMillis = System.currentTimeMillis();

                return mOutBodyBytes;
        }

        public int init() throws Throwable {
                return 0;
        }//end of init

        public int end() throws Throwable {
                return 0;
        }//end of end
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-22 04:16 , Processed in 0.069695 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表