首页 文章

如何通过JMeter更改远程linux服务器上的当前时间?

提问于
浏览
0

我正在测试一个安全服务( running on remote linux server ),它返回一个访问令牌 valid for 1 day .

我正在编写一个 JMeter 脚本来测试这个场景 . 以下是我要遵循的步骤:

  • 向服务发出http令牌请求 .

  • 收到访问令牌后,通过将其重新发送到安全服务来验证它是否是有效令牌 .

  • Change system date and increment it by 1 day so that the token becomes invalid .

  • 一旦无效,请通过将其发送到安全服务再次验证它 .

我不知道如何执行第3步,如果可以通过JMeter首先执行 .

卡住 . 请建议 .

谢谢 .

2 回答

  • 1

    我建议做一个Linux date命令的Java ProcessBuilder.start() .

    一个问题是您需要适当的权限才能更改系统日期 .

    值得注意的是Linux date 具有增加日期值的内置功能:

    How to increment a date in a bash script

    DATE=2013-05-25
    
    for i in {0..8} do
      NEXT_DATE=$(date +%m-%d-%Y -d "$DATE + $i day") 
      echo $NEXT_DATE 
    done
    

    生产环境 :

    05-25-2013 
    05-26-2013 
    ....
    05-31-2013 
    06-01-2013 
    06-02-2013
    
  • 0

    鉴于您需要处理 remote linux系统,您需要通过SSH通道以某种方式更改日期 . 所以我建议按如下方式进行:

    • 下载JSch.jar文件(允许从Java代码进行SSH和SCP协议操作的Java库)并将其放到JMeter安装的/ lib文件夹中 . JMeter重启将需要选择.jar .

    • Beanshell Sampler添加到您需要更改远程Linux系统时间的测试计划中

    • 将以下代码放入Beanshell Sampler的“脚本”区域:

    import com.jcraft.jsch.Channel;
    import com.jcraft.jsch.ChannelExec;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.Session;
    
    JSch jSch = new JSch();
    Session session = jSch.getSession("root", "your.host", 22);
    session.setConfig("StrictHostKeyChecking", "no");
    session.setPassword("your password");
    session.connect();
    
    Channel channel = session.openChannel("exec");
    
    String command = "date -s \"$(date --date \"+1 day\")\"";
    ((ChannelExec) channel).setCommand(command);
    channel.setInputStream(null);
    ((ChannelExec) channel).setErrStream(System.err);
    InputStream in = channel.getInputStream();
    
    channel.connect();
    StringBuilder rv = new StringBuilder();
    rv.append("New system date: ");
    byte[] tmp = new byte[1024];
    while (true) {
      while (in.available() > 0) {
          int i = in.read(tmp, 0, 1024);
          if (i < 0) break;
          rv.append(new String(tmp, 0, i));
      }
      if (channel.isClosed()) {
          break;
      }
      try {
          Thread.sleep(100);
      } catch (Exception ee) {
          ee.printStackTrace();
      }
    }
    in.close();
    channel.disconnect();
    session.disconnect();        
    SampleResult.setResponseData(rv.toString().getBytes());
    
    • Beanshell采样器响应数据如下所示:
    New system date: Mon Apr 13 10:16:48 BST 2015
    

    请参阅How to use BeanShell: JMeter's favorite built-in component以了解如何使用JMeter未提供所需测试元素的脚本来增强测试 .

相关问题