paint-brush
Oyun Yazarı ile Gmail E-postaları Nasıl Okunur?ile@bormando
5,136 okumalar
5,136 okumalar

Oyun Yazarı ile Gmail E-postaları Nasıl Okunur?

ile Dmitrii Bormotov5m2023/12/10
Read on Terminal Reader

Çok uzun; Okumak

Otomatik testlerde e-postaları okumak, birçok projede nasıl yapılacağını bilmeniz gerekebilecek bir püf noktasıdır. Yapılması zor bir şey ama imkansız değil. Dokümantasyon ve kütüphaneleri o kadar da kullanıcı dostu değil (özellikle e-posta testleriyle fazla çalışmayanlar için). gmail-getter npm paketi, bir Gmail REST API Erişim belirteci oluşturmanıza, e-postalarınızı almanıza ve bunları tarayıcıda oluşturmanıza yardımcı olur.
featured image - Oyun Yazarı ile Gmail E-postaları Nasıl Okunur?
Dmitrii Bormotov HackerNoon profile picture

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ğı…

Bu neden önemli?

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:

  1. Ü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.


  2. 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.


  3. 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.

Testlerde E-postaları Okumanın Komplikasyonları Nelerdir?

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 - bazı hizmetler bu protokolleri yasaklıyor veya kimliğinizi onaylamanızı sağlayacak ilk kez bağlandığınızda (otomatik bir testi yeniden başlattığınızda olduğu gibi).


Ö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ığı.

Gmail-Getter ile Gmail E-postalarını Okumak

İlk önce paketi projenize yüklemeniz gerekir:

 npm install gmail-getter

Google Cloud Console Projesi Oluşturun ve Kimlik Bilgilerini Alın

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:

  1. Google Cloud Console'da bir proje oluşturun.


  2. 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.


  3. Gmail API'sini etkinleştirin.


  4. 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 ⚠️

Erişim Jetonu Alın

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>' )

E-postaları Al

Ş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 })

Etraflı

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.