paint-brush
극작가와 함께 Gmail 이메일을 읽는 방법by@bormando
3,047
3,047

극작가와 함께 Gmail 이메일을 읽는 방법

Dmitrii Bormotov5m2023/12/10
Read on Terminal Reader

자동화된 테스트에서 이메일을 읽는 것은 많은 프로젝트에서 수행하는 방법을 알아야 할 수 있는 요령입니다. 어려운 일이지만 불가능한 일은 아닙니다. 문서와 해당 라이브러리는 실제로 사용자 친화적이지 않습니다(특히 이메일 테스트를 많이 수행하지 않는 사용자의 경우). gmail-getter npm 패키지는 Gmail REST API 액세스 토큰을 생성하고 이메일을 가져와 브라우저에서 렌더링하는 데 도움이 됩니다.
featured image - 극작가와 함께 Gmail 이메일을 읽는 방법
Dmitrii Bormotov HackerNoon profile picture

여러분, 안녕하세요!


자동화된 테스트에서 이메일을 읽는 것은 많은 프로젝트에서 수행하는 방법을 알아야 할 수 있는 요령입니다. 그 이유와 처리 방법은 다음과 같습니다.

이것이 왜 중요합니까?

음, 시스템이 이메일을 보내는 경우 이메일이 전송되고 있는지, 클릭 가능한 링크를 포함하여 콘텐츠가 올바른지 확인하고 싶을 수도 있습니다.


따라서 이것이 필요할 때 일반적인 시나리오는 다음과 같습니다.

  1. 가입하기.

    많은 플랫폼에서는 계정을 생성하면 확인 이메일을 보내며, 이메일에서 확인 링크를 클릭해야 합니다.


  2. 송장.

    앱에서 결제를 수행하는 경우 일반적으로 이메일을 통해 수표나 송장을 보내므로 해당 내용도 올바른지 확인하고 싶을 수 있습니다.


  3. 결과.

    메디컬 테스트 결과처럼요. 내 경험에 따르면 일부 병원에서는 검사가 완료되면 검사 결과가 포함된 이메일을 보냅니다(또는 최소한 보고서를 볼 수 있는 개인 페이지에 대한 링크).



물론 이것이 전체 목록은 아닙니다. 이는 제 경력에서 가장 많이 만난 사용 사례일 뿐입니다.


이러한 시나리오를 확인하지 못하면 사용자가 이메일을 받지 못하거나 이메일에서 잘못된 정보를 받게 될 수 있습니다. 프로젝트 중 하나에서는 만료된 SendGrind 토큰을 조기에 찾는 데 도움이 되었습니다.

테스트에서 이메일을 읽을 때 복잡한 점은 무엇입니까?

이메일을 읽는 것은 까다로운 일이지만 불가능한 일은 아닙니다.


초기 이메일 클라이언트는 POP3를 사용하여 서버에서 이메일을 가져왔지만 작은 문제가 있습니다. 이메일이 다운로드되면 서버에서 삭제됩니다.


나중에 IMAP 프로토콜이 도입되었습니다. 이를 통해 서버에서 이메일을 간단히 읽을 수 있습니다.


문제는 - 일부 서비스에서는 이러한 프로토콜을 금지합니다. 또는 신원을 확인하게 해주세요 처음 연결할 때(예: 자동 테스트를 다시 시작할 때)


반면에 Gmail 과 같은 일부 서비스는 이메일을 조작하기 위한 REST API를 제공하지만 또 다른 문제가 있습니다. 문서와 해당 라이브러리는 실제로 사용자 친화적이지 않습니다(특히 이메일 테스트를 많이 수행하지 않는 사람들의 경우).


Playwright 와 같은 브라우저 자동화 도구를 사용하는 경우 이메일을 읽고 브라우저에서 열 수도 있는 npm 라이브러리인 gmail-getter가 여기에 있습니다.

Gmail-Getter로 Gmail 이메일 읽기

가장 먼저 해야 할 일은 프로젝트에 패키지를 설치해야 한다는 것입니다.

 npm install gmail-getter

Google Cloud Console 프로젝트 생성 및 자격 증명 획득

Gmail API 에 로그인하려면 클라이언트 ID , 클라이언트 비밀번호새로 고침 토큰 과 같은 자격 증명을 얻어야 합니다. 이러한 자격 증명을 사용하면 추가 요청(예: 이메일 목록 또는 단일 이메일 가져오기 등)에 필요한 액세스 토큰을 얻을 수 있습니다.


앞으로 나아갈 단계:

  1. Google Cloud Console 에서 프로젝트를 만듭니다.


  2. API 및 서비스 섹션에서 OAuth 자격 증명을 생성하고( 자동 테스트에 필요한 경우 데스크톱 앱을 선택하는 것이 바람직함 ) 다운로드합니다.


  3. Gmail API를 활성화합니다.


  4. 새로 고침 토큰을 얻습니다.


새로 고침 토큰을 얻으려면 프로젝트 루트에서 명령을 실행하면 됩니다.

 npx gmail-getter get-refresh-token


(또는 전역적으로 패키지를 설치한 경우 다른 곳)

 get-refresh-token


명령을 실행할 위치에 credentials.json 파일을 넣어야 합니다.


⚠️ 자격 증명 파일 이름은 대소문자를 구분합니다 ⚠️

액세스 토큰 획득

구성이 완료되면 자동화된 테스트에서 액세스 토큰을 받아야 합니다. 이를 위한 가장 좋은 장소는 전역 설정(테스트 실행이 시작되기 전에 실행되는 함수)이라고 말하고 싶습니다.


그러면 다음과 같을 것입니다.


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


위의 예에서는 환경 변수를 사용하므로 dotenv 패키지도 반드시 설치해야 합니다.


그러나 일을 단순하게 유지하려면 다음에서 토큰에 액세스할 수 있어야 하는 곳 어디에서나 이 스니펫을 사용할 수 있습니다.


 const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' )

이메일 받기

현재 Gmail의 REST API는 자체 쿼리 언어를 사용하여 필요한 이메일을 찾습니다.


 const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!')


위 명령은 이메일 개체를 반환하지만 여전히 해당 내용이나 링크를 가져와야 합니다. 교체 from:squier7 subject:Test! 위 링크의 구문을 따라 자신만의 쿼리를 작성하세요 ☝️


정규식을 사용하여 링크를 구문 분석할 수 있습니다.


 const link = parseLinkFromHtml(email!, /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im)


/(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im 자신만의 정규 표현식으로 바꾸세요 ☝️


또는 이메일의 전체 HTML 콘텐츠를 가져와 브라우저에서 렌더링합니다.


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

전반적인

자동화된 테스트에서 이메일로 작업하는 것이 까다로울 수 있다는 점은 이제 꽤 분명해졌습니다. 하지만 이러한 요령을 알면 일이 훨씬 쉬워집니다.


여전히 다른 이메일 서비스를 이용하거나 IMAP을 시도해 볼 수도 있지만 장담합니다. 제공된 gmail-getter 와 같은 도우미를 직접 만들어야 하기 때문에 이 가이드에 있는 것만큼 쉽지는 않을 것입니다. 여기.


GitHub 에서 Playwright 예제를 찾을 수 있습니다. 사이프러스 예시 도 있습니다.