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

时间:2015-04-08 23:30:28

标签: jmeter

我正在测试一个安全服务(在远程linux服务器上运行),它返回一个有效期为1天的访问令牌

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

  1. 向服务发出http令牌请求。
  2. 收到访问令牌后,通过将其重新发送给安全服务来验证它是否是有效令牌。
  3. 更改系统日期并将其递增1天,以使令牌无效
  4. 一旦无效,请通过将其发送给安全服务再次验证。
  5. 我不知道如何执行第3步,如果可以通过JMeter首先执行。

    卡住。请建议。

    感谢。

2 个答案:

答案 0 :(得分:1)

我建议执行Linux ProcessBuilder.start()命令的Java date

一个问题是您需要相应的权限才能更改系统日期。

值得注意的是,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

答案 1 :(得分:0)

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

  1. 下载JSch.jar文件(允许从Java代码进行SSH和SCP协议操作的Java库)并将其放到JMeter安装的/ lib文件夹中。 JMeter重启将需要选择.jar。
  2. 在您需要更改远程linux系统时间的测试计划中添加Beanshell Sampler
  3. 将以下代码放入Beanshell Sampler" Script"面积:

    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());
    
  4. Beanshell Sampler响应数据如下所示:

    New system date: Mon Apr 13 10:16:48 BST 2015
    
  5. 请参阅How to use BeanShell: JMeter's favorite built-in component以了解如何使用JMeter未提供所需测试元素的脚本来增强测试。