如果JMeter从命令行

时间:2017-04-27 15:00:03

标签: java jmeter

我正在设计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做任何其他建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

您不需要cmd,但如果您坚持使用它,请在致电时使用/C键。

然后,您确定要在正确的位置查找文件吗? 根据文件:

  

默认情况下,java.io包中的类总是解析相对的   针对当前用户目录的路径名。该目录已命名   由系统属性user.dir,通常是在中的目录   调用了Java虚拟机。

彻底检查,顺便说一下 - 你应该在你的采样器结果中看到它。