1
votes

Comment tester les flux d'utilisateurs qui impliquent une confirmation par e-mail?

Je veux dire des tests fonctionnels ou E2E. Tout cela est clair avec les flux génériques, mais quand il s'agit d'e-mails transactionnels (confirmations d'inscription, réinitialisations de mot de passe, notifications d'achat et autres), cela pose toujours des questions. Après quelques recherches, j'ai trouvé quelques idées. La première consiste à tirer parti de l'API Restmail.net (ici des exemples avec Selenium WebDriver et Cypress - http://dsheiko.com/weblog/testing-sign-up-flow-with-activation-by-email ). C'est gratuit, mais l'API est publique. Ce n'est donc pas vraiment adapté aux e-mails contenant des informations potentiellement sensibles. Une autre approche pour accéder à la boîte de réception Gmail via le pont IMAP ou l'API Gmail (ici l'explication et les extraits de code - https://docs.puppetry.app/testing-emails/example-with-imap-bridge ). Mais encore une fois, c'est plutôt une solution de contournement.

Je sais qu'il y a des types comme Sendgrid, Mailgun, Email Yak, Postmark. Je ne veux pas payer autant. Alors, comment faites-vous cela? C'est une chose pour vous?


5 commentaires

Vous pouvez jeter un œil à mailhog pour les e-mails sortants: github.com/mailhog/MailHog , nous testons actuellement e-mails avec cyprès et l'API mailhog.


Wow, ça a l'air génial. Vous avez donc un serveur de messagerie interne, qui expose l'API pour accéder à la boîte de réception. En plus, les ingénieurs QA peuvent créer autant de comptes utilisateurs qu'ils le souhaitent, n'est-ce pas? Et comment l'interroger pour les e-mails des tests? Quelque chose de similaire à ma fonction?


J'ai un peu bidouillé MailHog, c'est encore mieux que ce à quoi je m'attendais. Comme je l'ai compris - on n'a pas vraiment besoin d'un serveur de messagerie exposé, mais exécutez simplement cet outil dans le menu fixe et configurez sendmail sur le test d'environnement pour diriger tous les mails vers MailHog. Mais cela ne fonctionnera pas avec les e-mails envoyés par Mailchimp ...


Notre cas d'utilisation semble différent. Nous testons uniquement les e-mails que notre service omet. Au lieu d'utiliser par ex. sendmail sur localhost: 25 nous utilisons Mailhog sur localhost: 1025 et interrogons les e-mails émis en utilisant l'API Mailhog. Je n'ai pas utilisé mailchimp, mais je testerais probablement simplement les déclencheurs et les réponses de l'API, etc. parce que - à mon avis - vous ne voulez pas / devez tester l'API mailchimp (devrait déjà être testé).


Non, non. Nous avons un service qui gère les demandes d'API comme l'activation par e-mail. Le seul moyen d'obtenir le lien d'activation généré - c'est à partir du message électronique envoyé. Et le message est envoyé en utilisant Mailchimp. C'est pourquoi j'envisage des moyens de lire la boîte de réception du message


3 Réponses :


0
votes

Vous pouvez créer une demande de publication pour le "mot de passe oublié", puis l'affirmer.

quelque chose comme:

    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)


3 commentaires

Voulez-vous dire que "APIforForgotPassword" est une API exposée qui peut être utilisée pour récupérer le jeton requis pour la réinitialisation du mot de passe?


Lorsque vous inspectez votre page Web, vous pouvez voir l'API


Désolé, je ne comprends toujours pas. Alors, disons que j'ai une application Web à tester. Je fais en sorte que Cypress accède à la page de connexion, cliquez sur "Mot de passe oublié?", Tapez un e-mail, cliquez sur Soumettre. Après cela, l'application Web génère une URL avec un jeton d'accès et m'envoie un message électronique. Je ne peux donc obtenir l'URL dédiée que par courrier électronique (c'est tout l'intérêt - pour m'assurer que le compte m'appartient vraiment). La question était donc de savoir comment l'obtenir à partir des cas de test automatisés



4
votes

Pour ce faire, nous utilisons les adresses e-mail Mailosaur de nos utilisateurs testés. Nous utilisons ensuite une commande personnalisée Cypress pour interroger Mailosaur pour l'e-mail attendu . C'était super facile à configurer.

Voici la partie principale de cette commande personnalisée, qui est tout ce que nous avions à ajouter pour commencer à tester les e-mails. Vous pouvez vous référer à leur documentation API pour savoir ce que doivent être requête , mailosaurServer et 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;
    });
});


0 commentaires

0
votes
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')
})
Create the API that requires the email as a parameter and returns the confirmation-token. call the API from cypress commands as ajax-request and get the response token

0 commentaires