Testing 如何测试涉及电子邮件确认的用户流?

Testing 如何测试涉及电子邮件确认的用户流?,testing,selenium-webdriver,automated-tests,e2e-testing,cypress,Testing,Selenium Webdriver,Automated Tests,E2e Testing,Cypress,我指的是功能测试或E2E测试。这在一般流程中是很清楚的,但是当涉及到事务性电子邮件注册确认、密码重置、购买通知和其他方面时,它仍然会带来问题。经过一些研究,我提出了一些想法。其中一个是利用Restmail.net API,例如Selenium WebDriver和Cypress-。它是免费的,但API是公开的。因此,它并不真正适用于包含潜在敏感信息的电子邮件。另一种通过IMAP网桥或Gmail API访问Gmail收件箱的方法,这里是解释和代码片段-。但是,这也是一个解决办法 我知道有些人喜欢S

我指的是功能测试或E2E测试。这在一般流程中是很清楚的,但是当涉及到事务性电子邮件注册确认、密码重置、购买通知和其他方面时,它仍然会带来问题。经过一些研究,我提出了一些想法。其中一个是利用Restmail.net API,例如Selenium WebDriver和Cypress-。它是免费的,但API是公开的。因此,它并不真正适用于包含潜在敏感信息的电子邮件。另一种通过IMAP网桥或Gmail API访问Gmail收件箱的方法,这里是解释和代码片段-。但是,这也是一个解决办法


我知道有些人喜欢Sendgrid,Mailgun,Email Yak,邮戳。我不想付那么多。你们是怎么做到的?这对你来说很重要吗?

你可以为忘记密码的用户创建一个post请求,然后对其进行断言

比如:

    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)

您可以为忘记密码的用户创建post请求,然后对其进行断言

比如:

    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)
我们使用测试用户的电子邮件地址来实现这一点。然后,我们使用一个cypress自定义命令来创建。设置起来非常简单

下面是自定义命令的主要部分,这是我们开始进行电子邮件测试所需添加的全部内容。您可以参考他们的API文档,了解查询、mailosaurServer和MailosaurApiKey应该是什么

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;
    });
});
我们使用测试用户的电子邮件地址来实现这一点。然后,我们使用一个cypress自定义命令来创建。设置起来非常简单

下面是自定义命令的主要部分,这是我们开始进行电子邮件测试所需添加的全部内容。您可以参考他们的API文档,了解查询、mailosaurServer和MailosaurApiKey应该是什么

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;
    });
});
创建需要电子邮件作为参数并返回确认令牌的API。从cypress命令中调用API作为ajax请求,并获取响应令牌


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

你是说APIforForgotPassword是一个公开的API,可以用来检索重置密码所需的令牌吗?当你检查网页时,你可以看到APISorry,我仍然无法获取。那么,假设我有一个web应用程序要测试。我让Cypress导航到登录页面,单击忘记密码?,键入电子邮件,单击提交。之后,web应用程序生成一个带有访问令牌的URL,并向我发送邮件消息。因此,我只能通过电子邮件获得专用URL,这就是关键所在——以确保该帐户真正属于我。所以问题是-你是如何从自动测试用例中获得它的?你是说APIforForgotPassword是一些公开的API,可以用来检索重置密码所需的令牌吗?当你检查网页时,你可以看到APIforForgotPassword。对不起,我还是不明白。那么,假设我有一个web应用程序要测试。我让Cypress导航到登录页面,单击忘记密码?,键入电子邮件,单击提交。之后,web应用程序生成一个带有访问令牌的URL,并向我发送邮件消息。因此,我只能通过电子邮件获得专用URL,这就是关键所在——以确保该帐户真正属于我。所以问题是-你如何从自动测试用例中获得它你可以看看mailhog发送电子邮件:,我们目前使用cypress和mailhog api测试电子邮件。哇,看起来很棒。所以您有一个内部邮件服务器,它公开了访问收件箱的API。此外,QA工程师可以创建任意数量的用户帐户,对吗?您如何对测试中的电子邮件进行轮询?类似于我的功能的东西?我稍微摆弄了一下MailHog,这比我预期的要好。正如我所了解的,我们并不需要一个公开的邮件服务器,只需在docker中运行这个工具,并在testing env上配置sendmail,将所有邮件定向到MailHog即可。但它不会在Mailchimp发送的电子邮件中起作用……我们的用例似乎有所不同。我们只测试我们服务忽略的电子邮件。我们没有在localhost:25上使用sendmail,而是在localhost:1025上使用Mailhog,并使用Mailhog API查询发出的电子邮件。我没有使用mailchimp,但我可能只是测试触发器和API响应等。因为——在我看来——你不想/不需要测试mailchimp API,应该已经测试过了。不,我没有。我们有一个处理API请求的服务,比如电子邮件激活。获取生成的激活链接的唯一方法是从发送的电子邮件中获取。信息通过Mailchimp发送。这就是为什么我在考虑如何阅读收件箱中的信息你可以看看mailhog中的发送邮件:,我们目前使用cypress和mailhog api测试电子邮件。哇,看起来很棒。所以您有一个内部邮件服务器,它公开了访问收件箱的API。此外,QA工程师可以创建任意数量的用户帐户,对吗?您如何对测试中的电子邮件进行轮询?某物
与我的功能类似?我稍微摆弄了一下MailHog,这比我预期的要好。正如我所了解的,我们并不需要一个公开的邮件服务器,只需在docker中运行这个工具,并在testing env上配置sendmail,将所有邮件定向到MailHog即可。但它不会在Mailchimp发送的电子邮件中起作用……我们的用例似乎有所不同。我们只测试我们服务忽略的电子邮件。我们没有在localhost:25上使用sendmail,而是在localhost:1025上使用Mailhog,并使用Mailhog API查询发出的电子邮件。我没有使用mailchimp,但我可能只是测试触发器和API响应等。因为——在我看来——你不想/不需要测试mailchimp API,应该已经测试过了。不,我没有。我们有一个处理API请求的服务,比如电子邮件激活。获取生成的激活链接的唯一方法是从发送的电子邮件中获取。信息通过Mailchimp发送。这就是为什么我在考虑如何阅读收件箱中的信息