loadrunner java vuser实例

最近收到一个测试任务,其中性能部分涉及到ssh的并发测试。经过简单调研,找到了一个现成的 jar包“JSch”。JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。而loadrunner的java vuser支持直接导入现有jar包,调用其中的方法。所以,就确定了loadrunenr java vuser+jsch的方式来实现shh的并发在线测试。测试的主要关注点是探测当前服务配置下的最大ssh并发连接数(连接是从A机ssh连接登陆B机后在跳转C机,并在跳转成功后按一定 时间间隔持续执行操作命令)。感觉loadruner java vuser还是蛮方便的,用途也挺广,大家有兴趣不妨了解一下。不费话了,下面是测试脚本:

/*
 * LoadRunner Java script. (Build: _build_number_)
 * 
 * Script Description: 
 *                     
 */


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import com.jcraft.jsch.*;
import lrapi.lr;

public class Actions
{

    String mUserName = "*******";
    String mHostName = "***.***.***.***";
    String mPwd = "*******";
   
        
        public int init() throws Throwable {
            return 0;
        }//end of init
        
        public int action() throws Throwable { 


        lr.start_transaction("ssh jump");
        try{

//配置登陆B机的用户名密码、IP地址
          JSch jsch=new JSch();
          Session session=jsch.getSession("mUserName, mHostName, 22);
          session.setPassword(mPwd );
          session.setConfig("StrictHostKeyChecking", "no");
 try {

//建立连接
     session.connect(50000);

} catch (Exception e) {
System.out.println(e);
return 1;
 }

Channel channel = session.openChannel("shell");
OutputStream outS = channel.getOutputStream();
PrintStream commander = new PrintStream(outS, true);
                        Thread.sleep(1000);
channel.setOutputStream(System.out);
channel.setInputStream(System.in);
channel.connect(10 * 1000);
Thread.sleep(1000);
InputStream instream = channel.getInputStream();

while(true){
int reconnect=0;
commander.println("ssh -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no -t -t rdtest@<mserver> ");
Thread.sleep(5000);


/*将回显打印输出*/
/***********************************************************************************************/
if (instream.available() > 0) {
byte[] data = new byte[instream.available()];
int nLen = instream.read(data);

if (nLen < 0) {
throw new Exception("network error.");
}

//转换输出结果并打印出来
String temp = new String(data, 0, nLen,"iso8859-1");
System.out.println(temp);


//预期字符串在temp中的位置,可以据此判断跳转是否成功。
System.out.println(temp.indexOf("Last login:"));
//如果跳转成功,则跳出跳转循环,开始执行下面的shell指令
if (temp.indexOf("Last login:")!=-1) {
    break;     
}
Thread.sleep(5000);
reconnect++;
if (reconnect>5) {                                        
                        lr.end_transaction("ssh jump", lr.FAIL);
                                lr.message("尝试5次跳转失败,任务结束"); 
return 1;


    } 
}


}
                                


/***********************************************************************************************/
while (1>0) {
   commander.println("ifconfig");
    Thread.sleep(5000);

/***********************************************************************************************/
    if (instream.available() > 0) {
byte[] data = new byte[instream.available()];
int nLen = instream.read(data);

if (nLen < 0) {
throw new Exception("network error.");
}

//转换输出结果并打印出来
String temp = new String(data, 0, nLen,"iso8859-1");
                                if (temp.indexOf("command not found")!=-1) {
    lr.end_transaction("ssh jump", lr.FAIL);
                                    lr.message("堡垒机器与被管理机连接中断,任务结束");
    return 1;
}
System.out.println(temp);
}
/***********************************************************************************************/
    for (int i=0;i<5;i++) {
    commander.println("ls");
    Thread.sleep(1000);
/***********************************************************************************************/
    if (instream.available() > 0) {
byte[] data = new byte[instream.available()];
int nLen = instream.read(data);

if (nLen < 0) {
throw new Exception("network error.");
}

//转换输出结果并打印出来
String temp = new String(data, 0, nLen,"iso8859-1");
System.out.println(temp);
}
/***********************************************************************************************/
    }
}
        }catch(Exception e){
          System.out.println(e);
  lr.end_transaction("ssh jump", lr.FAIL);
          lr.message("任务结束"+e.toString());
  return 1;
        }
            //return 0;
        }//end of action
    
 /*       public int end() throws Throwable {
            return 0;
        }//end of end*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值