使用JMeter Mail Reader采样器测试高级方案

时间:2014-08-01 08:14:47

标签: jmeter imap

我使用邮件阅读器采样器在Jmeter中编写了一个测试计划来测试IMAPS服务器。该测试只允许我从文件夹中读取所有邮件或从文件夹中读取x个邮件。可选地,我可以在阅读后从服务器中删除邮件。

然而,似乎没有其他操作的选择,如:

  • 阅读仅由某些邮件标识符
  • 标识的特定电子邮件
  • 在文件夹之间移动邮件
  • 将邮件复制到另一个文件夹
  • 标记邮件已读/未读
  • 明确地从垃圾邮件中删除邮件 等

是否有一种方法可以使用某些插件采样器或插件测试这些其他场景?

如果JMeter不支持此功能,请建议使用其他性能测试工具进行此类测试

1 个答案:

答案 0 :(得分:3)

不幸的是,JMeter Mail Reader Sampler不允许进行高级操作。但是JMeter可以通过脚本扩展。

因此,您可以使用Java Mail API和提供的脚本采样器之一实现所有必需的方法:

请参阅下面的示例,使用IMAP for Gmail从“垃圾邮件”文件夹中删除所有邮件:

import com.sun.mail.imap.IMAPSSLStore;
import javax.mail. *;

try {
    Properties properties = props;
    properties.put("mail.smtps.auth", "true");
    properties.put("mail.imap.ssl.enable", "true");
    Session imapsession = Session.getInstance(properties, null);

    imapsession.setDebug(false);
    Store imapstore = new IMAPSSLStore(imapsession, new URLName("imaps", "imap.gmail.com", 993, "", "your.account@gmail.com", "password"));
    imapstore.connect();
    Folder rootfolder = imapstore.getDefaultFolder();
    Folder[] imapfolders = rootfolder.list("*");

    for (Folder folder : imapfolders) {
        if (folder.getName().equals("Spam")) {
            folder.open(Folder.READ_WRITE);
            log.info("Spam folder contains " + folder.getMessageCount() + " messages");
            Message[] messages = folder.getMessages();
            for (Message message : messages) {
                message.setFlag(Flags.Flag.DELETED, true);
                log.info("Marking message with subject: " + message.getSubject() + " for deletion");
            }
            folder.expunge();
            folder.close(true);
        }
    }
    imapstore.close();
} catch (Exception ex) {
    log.error("IMAP operation failed", ex);
}

Beanshell Sampler不需要任何额外配置,您只需复制并粘贴上面的代码即可。

然而,Beanshell具有众所周知的性能问题和限制,因此如果您的测试假定或多或少的高负载,则建议使用JSR223 Sampler和Groovy语言。

有关Groovy脚本引擎的更多信息和安装说明,请参阅 Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!脚本引擎比较基准。