【问题标题】:Reading Emails based on recipient email id in Jmeter using groovy使用 groovy 在 Jmeter 中根据收件人电子邮件 ID 读取电子邮件
【发布时间】:2020-03-30 00:26:57
【问题描述】:

我有一个 Jmeter 脚本,它遵循以下步骤 1.注册用户 2. 使用Mail Reader Sampler 阅读邮件,有以下脚本

StringBuilder aggregateResult = new StringBuilder()
prev.getSubResults().each {
    aggregateResult.append(it.getResponseDataAsString())
    it.getSubResults().each {
        aggregateResult.append(it.getResponseDataAsString())
        it.getSubResults().each {
            aggregateResult.append(it.getResponseDataAsString())        
        }   
    }
}
prev.setResponseData(aggregateResult.toString().getBytes())
  1. 然后根据正则表达式提取特定链接。

到目前为止,它会读取服务器中最新的电子邮件或所有未读的电子邮件。 有人可以帮我修改上面的脚本以根据在步骤 1 中创建的用户电子邮件来阅读消息吗?创建的电子邮件如 test+1@gmail.com、test+2@gmail.com 等。

【问题讨论】:

    标签: email groovy jmeter


    【解决方案1】:

    不确定您是否管理过,我离开了 javax.mail.Multipart,并在 While 控制器内的 JSR223 采样器中实现了以下代码,这对我有用。

    import javax.mail.Message
    import javax.mail.search.RecipientStringTerm
    
    Properties properties = new Properties();
    properties.put('mail.imap.host', 'your mail server host') // i.e. imap.gmail.com
    properties.put('mail.imap.port', your mail server port)  // i.e. 993
    properties.setProperty('mail.imap.socketFactory.class', 'javax.net.ssl.SSLSocketFactory')
    properties.setProperty('mail.imap.socketFactory.fallback', 'false')
    properties.setProperty('mail.imap.socketFactory.port', 'your_mail_server_port') // i.e. 993
    
    def session = javax.mail.Session.getDefaultInstance(properties)
    def store = session.getStore('imap')
    store.connect('your username (usually email address)', 'your_password')
    
    def inbox = store.getFolder('INBOX');
    inbox.open(javax.mail.Folder.READ_ONLY);
    
    def onlyToGivenUser = inbox.search(new RecipientStringTerm(Message.RecipientType.TO,'your_recipient_address')); // i.e. test+1@gmail.com 
    
    try {
        onlyToGivenUser.each { message ->
            ByteArrayOutputStream emailRaw = new ByteArrayOutputStream();
            message.writeTo(emailRaw);
            SampleResult.setResponseData(emailRaw.toString(), 'UTF-8');
            }
        } catch (Exception ex) {
            log.warn("Something went wrong", ex);
            OUT.println("Something went wrong", ex);
            throw ex;
        }
    

    您可能需要额外的条件,而不仅仅是使用收件人地址,在我的情况下,收件人对于每次迭代都是唯一的

    【讨论】:

      【解决方案2】:

      不幸的是,Mail Reader Sampler 无法做到这一点,如果您只需要为这个或那个发件人电子邮件地址获取邮件,您可以使用JavaMail API,它提供过滤,即使用来自@ 的FromStringTerm 类987654324@

      示例代码:

      import javax.mail.Multipart
      
      Properties properties = new Properties()
      properties.put('mail.imap.host', 'your mail server host') // i.e. imap.gmail.com
      properties.put('mail.imap.port', your mail server port)  // i.e. 993
      properties.setProperty('mail.imap.socketFactory.class', 'javax.net.ssl.SSLSocketFactory')
      properties.setProperty('mail.imap.socketFactory.fallback', 'false')
      properties.setProperty('mail.imap.socketFactory.port', 'your_mail_server_port') // i.e. 993
      
      def session = javax.mail.Session.getDefaultInstance(properties)
      def store = session.getStore('imap')
      store.connect('your username (usually email address)', 'your_password')
      
      def inbox = store.getFolder('INBOX')
      inbox.open(javax.mail.Folder.READ_ONLY)
      
      def onlyFromGivenUser = inbox.search(new javax.mail.search.FromStringTerm('your_sender_address')) // i.e. test+1@gmail.com
      
      onlyFromGivenUser.each { message ->
          if (message.getContent() instanceof Multipart) {
              StringBuilder content = new StringBuilder()
              def multipart = (Multipart) message.getContent()
              multipart.eachWithIndex { Multipart entry, int i ->
                  def part = entry.getBodyPart(i)
                  if (part.isMimeType('text/plain')) {
                      content.append(part.getContent().toString())
                  }
              }
              SampleResult.setResponseData(content.toString(), 'UTF-8')
          } else {
              SampleResult.setResponseData(message.getContent().toString(), 'UTF-8')
          }
      }
      

      更多信息:

      【讨论】:

        猜你喜欢
        • 2016-05-19
        • 1970-01-01
        • 2019-06-23
        • 2014-06-23
        • 1970-01-01
        • 1970-01-01
        • 2019-01-09
        • 1970-01-01
        • 2021-03-04
        相关资源
        最近更新 更多