我使用邮件阅读器采样器在Jmeter中编写了一个测试计划来测试IMAPS服务器。该测试只允许我从文件夹中读取所有邮件或从文件夹中读取x个邮件。可选地,我可以在阅读后从服务器中删除邮件。
然而,似乎没有其他操作的选择,如:
是否有一种方法可以使用某些插件采样器或插件测试这些其他场景?
如果JMeter不支持此功能,请建议使用其他性能测试工具进行此类测试
答案 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!脚本引擎比较基准。