我正在测试一个安全服务(在远程linux服务器上运行),它返回一个有效期为1天的访问令牌。
我正在编写一个 JMeter 脚本来测试这个场景。以下是我要遵循的步骤:
我不知道如何执行第3步,如果可以通过JMeter首先执行。
卡住。请建议。
感谢。
答案 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通道以某种方式更改日期。所以我建议按如下方式进行:
将以下代码放入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());
Beanshell Sampler响应数据如下所示:
New system date: Mon Apr 13 10:16:48 BST 2015
请参阅How to use BeanShell: JMeter's favorite built-in component以了解如何使用JMeter未提供所需测试元素的脚本来增强测试。