我正在设计JMeter场景,这意味着通过OS Process Sampler元素执行某个.jar文件。我的Java代码有while循环,它基本上检查某个邮箱是否有某个主题的字母。循环等待直到找到一个(电子邮件总是以大约3分钟的延迟发送),解析它并将一些数据写入.txt文件。
如果我直接从cmd运行此.jar,则代码按预期工作。但是,如果我通过JMeter OS Process Sampler运行它,那么它永远不会为我创建一个文件。我确实看到电子邮件已发送到收件箱,因此期望它被解析并创建.txt。
起初我怀疑JMeter完成Java场景而不等待while循环执行。然后我将OS Process Sampler放在一个单独的线程中,为这个线程添加了一个巨大的延迟,以便等待并100%确定电子邮件已经发送,而Java只需要解析它,但它没有帮助。
查看结果树从不显示任何错误。
这是我的OS Process Sampler:https://www.screencast.com/t/LomYGShJHAkS
这是我通过cmd执行的,它按预期工作:java -jar mailosaurJavaRun.jar email533.druzey1a@mailosaur.in
这是我的代码(它看起来不太好但是有效):
public class Run {
public static void main(String[] args) {
MailosaurHelper ms = new MailosaurHelper();
String arg1 = ms.getFirstLinkInEmail(args[0]);
BufferedWriter output = null;
try {
File file = new File("url.txt");
output = new BufferedWriter(new FileWriter(file));
output.write(arg1);
} catch ( IOException e ) {
e.printStackTrace();
} finally {
if ( output != null ) {
try {
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
public class MailosaurHelper {
protected final String API_KEY = "b3e4d2b193b5eb2";
protected final String MAILBOX_ID = "d1uzey1a";
public MailboxApi getEmailBox() {
return new MailboxApi(MAILBOX_ID, API_KEY);
}
public String getFirstLinkInEmail(String email) {
MailosaurHelper ms = new MailosaurHelper();
String link = "";
if (link.equals("") || link.isEmpty()) {
try {
Thread.sleep(3000);
link = ms.getAllEmailsByReceipent(email)[0].html.links[0]
.toString();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return link;
}
public Email[] getAllEmailsByReceipent(String recepient) {
try {
int ifArrayIsEmpty = getEmailBox().getEmailsByRecipient(recepient).length;
while (ifArrayIsEmpty == 0) {
try {
Thread.sleep(3000);
ifArrayIsEmpty = getEmailBox().getEmailsByRecipient(
recepient).length;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (MailosaurException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Email[] listOfEmails = null;
try {
listOfEmails = getEmailBox().getEmailsByRecipient(recepient);
} catch (MailosaurException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return listOfEmails;
}
最重要的是,我需要解析Mailosaur电子邮件,从中检索URL并进一步使用它。关于如何使用Jmeter / Java / Mailosaur做任何其他建议表示赞赏。
答案 0 :(得分:0)
您不需要cmd,但如果您坚持使用它,请在致电时使用/C
键。
然后,您确定要在正确的位置查找文件吗? 根据文件:
默认情况下,java.io包中的类总是解析相对的 针对当前用户目录的路径名。该目录已命名 由系统属性user.dir,通常是在中的目录 调用了Java虚拟机。
彻底检查,顺便说一下 - 你应该在你的采样器结果中看到它。