극작가를 사용하여 원격 서버에서 파일 다운로드

프로세스를 자동화된 테스트에 통합할 때 원격 서버에서 파일을 다운로드하는 것은 종종 도전적인 전망입니다. 이 작업은 Playwrights의 기본 REST API 도우미 라이브러리를 사용하여 쉽게 수행할 수 있습니다.

아래 예는 원격 서버에 있는 파일의 위치를 ​​가리키는 href가 있는 일반적인 유사 다운로드 버튼입니다.



Playwright를 사용하여 이 문제를 해결하는 방법에는 여러 가지가 있습니다. 아래 예제는 REST 호출을 수행하는 Playwrights의 기능을 활용합니다.

먼저 fs
import * as fs from 'fs/promises'  // For saving the file contents to disk

테스트 내에서 다운로드할 파일의 baseUrlresource 경로를 정의합니다.

const baseUrl = 'https://www.tesla.com/'
const resource = 'ns_videos/2021-tesla-impact-report.pdf'

API 테스트 도우미에서 get 메서드를 호출하기만 하면 됩니다.

const getResp = await page.context().request.get(`${baseUrl}${resource}`)

응답 본문은 버퍼 유형입니다. 표준fs 라이브러리를 사용하여 이 원시 콘텐츠를 파일로 저장할 수 있습니다. 아래 예에서는 다운로드한 파일에 임의의 타임스탬프를 포함하도록 선택했습니다. 이것은 전적으로 선택 사항이며 구현은 다를 수 있습니다.

let responseBuffer = await getResp.body()
await fs.writeFile(`${new Date().valueOf()}_downloaded_pdf_from_tesla.pdf`, responseBuffer, 'binary')

테스트가 실행되면 다운로드한 파일(이 예에서는 pdf)이 다음과 같이 로컬 디스크에 나타납니다.



파일을 프로젝트 루트 폴더에 직접 다운로드하는 것은 대부분의 시나리오에서 적합하지 않을 수 있습니다. 테스트를 한 번 더 변경하고 파일을 다른 파일로 직접 출력하겠습니다.

테스트 정의에 testInfo를 추가합니다.

test('able to download a remote file to disk', async ({ page }, testInfo) => {
testInfo 개체에서 제공하는 출력 경로를 사용하도록 다운로드 경로를 수정합니다.

const fileName = `${new Date().valueOf()}_downloaded_pdf_from_tesla.pdf`
const downloadPath = testInfo.outputPath(fileName)
await fs.writeFile(downloadPath, responseBuffer, 'binary')

테스트를 다시 실행하면 다운로드한 파일이 test-results 폴더에 유지됩니다.


최종 솔루션:




좋은 웹페이지 즐겨찾기