Herkese merhaba!
Otomatik testlerde e-postaları okumak, birçok projede nasıl yapılacağını bilmeniz gerekebilecek bir püf noktasıdır. İşte nedeni ve bununla nasıl başa çıkılacağı…
Sistem e-posta gönderiyorsa, bunların gönderildiğini ve tıklanabilir bağlantılar da dahil olmak üzere içeriğin doğru olduğunu doğrulamak isteyebilirsiniz.
Buna ihtiyaç duyduğunuzda olağan senaryolar şunlardır:
Üye olmak.
Hesap oluşturduğunuzda birçok platform bir onay e-postası gönderir ve e-postadaki bir onay bağlantısına tıklamanız gerekir.
Faturalar.
Uygulamanız herhangi bir ödeme yapıyorsa genellikle e-posta yoluyla çek veya fatura gönderir. Bu nedenle içeriklerinin doğru olup olmadığını da kontrol etmek isteyebilirsiniz.
Sonuçlar.
Tıbbi test sonuçları gibi. Deneyimlerime göre, bazı hastaneler test sonuçlarını tamamladıktan sonra bir e-posta gönderir (veya en azından raporu görüntüleyebileceğiniz kişisel bir sayfaya bir bağlantı).
…
Elbette bu listenin tamamı değil; bunlar yalnızca kariyerim boyunca en çok karşılaştığım kullanım örnekleri.
Bu senaryoların doğrulanamaması, kullanıcıların e-posta alamamasına veya e-postalarda yanlış bilgi almasına neden olabilir. Projelerden birinde, süresi dolmuş bir SendGrind tokenını erken bulmamıza yardımcı oldu.
E-postaları okumak zor bir iştir ancak imkansız değildir.
İlk e-posta istemcileri, sunucudan e-posta almak için POP3'ü kullanıyordu, ancak küçük bir sorun var; e-postalar indirildikten sonra sunucudan siliniyor.
Daha sonra IMAP protokolü geldi; sunucudaki e-postaları kolayca okumanıza olanak tanıyor.
Problem şu -
Öte yandan, Gmail gibi bazı hizmetler, e-postalarınızı yönetmek için bir REST API sağlar, ancak başka bir sorun daha vardır: belgeler ve kitaplıkları pek de kullanıcı dostu değildir (özellikle e-posta testiyle fazla çalışmayanlar için).
Burası gmail-getter'ın devreye girdiği yer; e-postaları okumanıza ve hatta Playwright gibi tarayıcı otomasyon araçlarını kullanıyorsanız bunları tarayıcınızda açmanıza olanak tanıyan bir npm kitaplığı.
İlk önce paketi projenize yüklemeniz gerekir:
npm install gmail-getter
Gmail API'sine giriş yapmak için kimlik bilgileri edinmeniz gerekir: Müşteri Kimliği , Müşteri Sırrı ve Yenileme jetonu . Bu kimlik bilgileri, daha sonraki isteklerde (bir e-posta listesi veya tek bir e-posta vb. almak gibi) gerekli olan bir Erişim belirtecini almanızı sağlar.
İzlenecek adımlar:
Google Cloud Console'da bir proje oluşturun.
API ve Hizmetler bölümünde OAuth kimlik bilgilerini oluşturun ( otomatik testler için ihtiyacınız varsa tercihen orada Masaüstü uygulamasını seçin ) ve indirin.
Gmail API'sini etkinleştirin.
Bir Yenileme jetonu edinin.
Yenileme jetonu almak için proje kökünde bir komut çalıştırmanız yeterlidir:
npx gmail-getter get-refresh-token
(veya paketi global olarak yüklediyseniz başka bir yerde)
get-refresh-token
credentials.json
dosyasını komutu çalıştıracağınız bir yere koymalısınız.
⚠️ kimlik bilgileri dosya adı büyük/küçük harfe duyarlıdır ⚠️
Yapılandırma tamamlandıktan sonra otomatik testlerinizde bir Erişim belirteci almanız gerekir. Bunun için en iyi yerin genel kurulum (test çalıştırması başlamadan önce yürütülen bir işlev) olduğunu söyleyebilirim.
Yani şöyle bir şey olacak:
import {getToken} from 'gmail-getter' export default async function globalSetup() { process.env['ACCESS_TOKEN'] = await getToken( process.env.CLIENT_ID!, process.env.CLIENT_SECRET!, process.env.REFRESH_TOKEN! ) }
Yukarıdaki örnekte, kesinlikle dotenv paketini de kurmanız gereken ortam değişkenleri kullanılmaktadır.
Ancak işleri basit tutmak istiyorsanız, bu pasajı, belirtecin erişilmesine ihtiyaç duyduğunuz her yerde kullanabilirsiniz:
const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' )
Şu anda Gmail'in REST API'si ihtiyacınız olan e-postayı bulmak için kendi sorgu dilini kullanıyor:
const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!')
Yukarıdaki komut size bir e-posta nesnesi döndürür, ancak yine de içeriğini veya bağlantısını almanız gerekir. from:squier7 subject:Test!
Yukarıdaki bağlantıdaki sözdizimini takip ederek kendi sorgunuza ☝️
Bir regex kullanarak bir bağlantıyı ayrıştırabilirsiniz:
const link = parseLinkFromHtml(email!, /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im)
/(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im
kendi normal ifadenizle değiştirin ☝️
VEYA e-postanın tüm HTML içeriğini alın ve tarayıcınızda işleyin:
import {getToken, parseHtml} from 'gmail-getter' import {test} from '@playwright/test' test('Render an email', async ({page}) => { const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' ) const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!') // get an email const html = parseHtml(email!) // parse HTML from the email await page.setContent(html) // render the email in the browser })
Otomatik testlerde e-postalarla çalışmanın zor olabileceği artık oldukça açık sanırım! Ancak bu püf noktalarını bilmek işleri çok daha kolaylaştırır.
Yine de başka e-posta servislerini deneyebilir veya IMAP'i deneyebilirsiniz, ancak sizi temin ederim ki bu, bu kılavuzda olduğu kadar kolay olmayacaktır, çünkü Gmail-getter'ın sağladığı gibi kendinize ait bir yardımcı oluşturmanız gerekecektir. Burada.
Oyun Yazarı örneğini GitHub'da bulabilirsiniz. Selvi örneği de.