您如何测试涉及通过电子邮件进行确认的用户流?

时间:2019-07-09 11:29:40

标签: testing selenium-webdriver automated-tests e2e-testing cypress

我的意思是功能测试或E2E测试。通用流程非常清楚,但是涉及交易电子邮件(注册确认,密码重置,购买通知等)时,仍然会带来问题。经过一番研究,我提出了一些想法。一种是利用Restmail.net API(此处是Selenium WebDriver和Cypress的示例-http://dsheiko.com/weblog/testing-sign-up-flow-with-activation-by-email)。它是免费的,但API是公开的。因此,它实际上不适合包含潜在敏感信息的电子邮件。通过IMAP桥或Gmail API访问Gmail收件箱的另一种方法(此处为说明和代码段-https://docs.puppetry.app/testing-emails/example-with-imap-bridge)。但是,这还是一个解决方法。

我知道有些人喜欢Sendgrid,Mailgun,Email Yak,Postmark。我不想花那么多钱。那么你们如何做呢?对你来说这件事吗?

3 个答案:

答案 0 :(得分:2)

我们正在使用Mailosaur个电子邮件地址发送给测试用户。然后,我们使用cypress定制命令来query Mailosaur for the expected email。设置起来非常容易。

这是该自定义命令的主要部分,这是我们开始进行电子邮件测试所必须添加的全部内容。您可以参考他们的API文档,了解querymailusaurServerMailosaurApiKey的含义。

Cypress.Commands.add("getEmailFromMailService", query => {
  return cy
    .request({
      method: "POST",
      url: `https://mailosaur.com/api/messages/await?server=${mailosaurServer}`,
      body: query,
      headers: { "Content-Type": "application/json" },
      auth: { user: mailosaurApiKey },
    })
    .then(response => {
      expect(response.status).to.equal(200);
      return response.body;
    });
});

答案 1 :(得分:0)

您可以为“忘记密码”创建发布请求,然后对其进行声明。

类似:

    cy.visit('yoursite')
    cy.get('#forgotpassword').click().then(function (xhr) {
    cy.server()
    cy.request('POST', 'APIforForgotPassword').as('sucessfullemail)
    })
    cy.get(@sucessfullemail).then(function (xhr) {
    expect(xhr.status).to.eq(200)

答案 2 :(得分:0)

Cypress.Commands.add('ConfirmUser', () => {
  const confirmationToken = null;
  cy.request({
    url: 'http://localhost:3000/api/confirmation_token?email=test_user@cypress.com',
    followRedirect: false
  })
    .then((resp) => {
      confirmationToken = resp.token
    })
  cy.visit('/en/confirmation?confirmation_token=token')
})

创建需要电子邮件作为参数的API并返回确认令牌。从cypress命令调用API作为ajax-request并获取响应令牌