我已经在 Jmeter 中使用邮件阅读器采样器编写了一个测试计划来测试 IMAPS 服务器。该测试仅允许我读取文件夹中的所有邮件或读取文件夹中的 x 封邮件。我可以选择在阅读邮件后将其从服务器上删除。
但是似乎没有选项可以执行其他操作,例如:
- 阅读仅由某些邮件标识符标识的特定电子邮件
- 在文件夹之间移动邮件
- 将邮件复制到另一个文件夹
- 将邮件标记为已读/未读
- 明确从垃圾箱中删除邮件 等等
是否有一种方法可以使用某些插件采样器或插件来测试这些其他场景?
如果 JMeter 不支持此功能,请推荐任何其他可以完成此类测试的性能测试工具
最佳答案
不幸的是,JMeter Mail Reader Sampler 不允许高级操作。然而,JMeter 可以通过脚本进行扩展。
因此,您可以使用 Java Mail API 和提供的脚本采样器之一实现所有必需的方法:
请参阅下面的示例,了解使用 Gmail 的 IMAP 从“垃圾邮件”文件夹中删除所有邮件:
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, "", "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="740d1b01065a1517171b011a00341319151d185a171b19" rel="noreferrer noopener nofollow">[email protected]</a>", "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 语言。
参见 Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!脚本引擎比较基准,了解 Groovy 脚本引擎的更多信息和安装说明。
关于jmeter - 使用 JMeter Mail Reader 采样器测试高级场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25075766/