我的意思是功能测试或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。我不想花那么多钱。那么你们如何做呢?对你来说这件事吗?
答案 0 :(得分:2)
我们正在使用Mailosaur个电子邮件地址发送给测试用户。然后,我们使用cypress定制命令来query Mailosaur for the expected email。设置起来非常容易。
这是该自定义命令的主要部分,这是我们开始进行电子邮件测试所必须添加的全部内容。您可以参考他们的API文档,了解query
,mailusaurServer
和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;
});
});
答案 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并获取响应令牌