FileDummy Logo
FileDummy
Kiểm Thử & QA Với Tệp Tin

Kiểm Thử Tải Tệp PDF Tự Động Trong Playwright & Cypress

Cách kiểm thử sự kiện download tệp, xác thực tên file và kích thước byte trong các framework automation test E2E Playwright và Cypress.

20 tháng 10, 202610 phút đọc1,420 lượt xem
playwrightcypresse2e-testingpdffile-download

Xác minh tải xuống tệp trong bộ kiểm thử end-to-end (E2E) đảm bảo rằng các công cụ báo cáo, hóa đơn và tính năng xuất dữ liệu hoạt động đáng tin cậy trên các engine trình duyệt. Dưới đây là cách kiểm thử tải xuống tệp bằng Playwright và Cypress.

Kiểm Thử Tải Xuống Tệp Trong Playwright

Playwright cung cấp hỗ trợ đầu cấp cho sự kiện download trình duyệt qua API waitForEvent('download').

TypeScript
import { test, expect } from '@playwright/test';
import fs from 'fs';
import path from 'path';

test('Xác minh sự kiện tải xuống PDF và kích thước tệp', async ({ page }) => {
  await page.goto('https://filedummy.dev/pdf/5mb');

  // Bắt đầu chờ sự kiện download trước khi nhấn nút kích hoạt
  const downloadPromise = page.waitForEvent('download');
  await page.click('button:has-text("Download 5MB PDF")');
  const download = await downloadPromise;

  // Xác thực tên file được đề xuất
  expect(download.suggestedFilename()).toBe('sample-5mb.pdf');

  // Lưu vào thư mục kiểm thử tạm
  const downloadPath = path.join('/tmp', download.suggestedFilename());
  await download.saveAs(downloadPath);

  // Kiểm tra tệp tồn tại trên đĩa và xác minh kích thước byte
  const stats = fs.statSync(downloadPath);
  expect(stats.size).toBe(5 * 1024 * 1024); // 5.242.880 byte
});
Thử Nghiệm Thực Tế.pdf

Tải file PDF chuẩn 5MB để kiểm thử sự kiện download và assertion của Playwright.

Tải File Mẫu 5MB PDF →

Kiểm Thử Tải Xuống Tệp Trong Cypress

Trong Cypress, các tệp được tải xuống qua trình duyệt tự động được lưu vào thư mục cypress/downloads.

JavaScript
describe('Kiểm Thử Tải Xuống PDF Với Cypress', () => {
  it('tải xuống và xác minh PDF 5MB', () => {
    cy.visit('https://filedummy.dev/pdf/5mb');
    cy.contains('button', 'Download 5MB PDF').click();

    // Xác minh tệp tồn tại trong đường dẫn download mặc định
    const filename = 'cypress/downloads/sample-5mb.pdf';
    cy.readFile(filename, 'binary', { timeout: 15000 }).should((buffer) => {
      expect(buffer.length).to.be.at.least(5000000);
    });
  });
});

Các Lưu Ý Quan Trọng Khi Kiểm Thử Download E2E

  • Tránh chặn tải xuống trên headless browser: Đảm bảo tùy chọn trình duyệt cho phép tải xuống tự động mà không hiển thị hộp thoại hệ thống.
  • Thời gian timeout đủ lớn: Tải xuống tệp lớn cần timeout rộng rãi trong môi trường CI nơi độ trễ mạng có thể biến động.
  • Dọn dẹp artifact: Xóa các tệp đã tải xuống trong hook afterEach để tránh test runner hết dung lượng đĩa.
NDL

Nguyễn Đại Long

Tác Giả

Backend Lead • Chuyên gia Kiến trúc Hệ thống Phân tán & Lưu trữ Đám mây

Hơn 4 năm kinh nghiệm thiết kế các hệ thống xử lý tệp tải lên thông lượng lớn, tối ưu hóa cơ sở dữ liệu và hạ tầng phân tán Cloudflare R2 / AWS S3. Người sáng lập FileDummy và Mạng lưới Hệ sinh thái NDL.

Bài viết này có hữu ích không?

Bấm Thích để ủng hộ tác giả và giúp bài viết lan tỏa tới cộng đồng lập trình viên.

Thảo Luận Kỹ Thuật & Đóng Góp Ý Kiến (0)

Chia sẻ kết quả benchmark, phản hồi các trường hợp biên hoặc đặt câu hỏi chuyên môn.

0/3000

Chưa có bình luận nào. Hãy là lập trình viên đầu tiên bắt đầu cuộc thảo luận!

Câu Hỏi Thường Gặp (FAQ)

How do I test file downloads in Playwright without a browser UI?▾

Use page.waitForEvent('download') to capture a Download object. Call download.saveAs(path) to save it locally, then verify with fs.statSync(path).size. Playwright download interception works in headless mode across Chromium, Firefox, and WebKit.

How do I test file downloads in Cypress?▾

Cypress does not natively intercept browser downloads. Use cy.intercept() to intercept the download URL, then fetch it with cy.request() and verify the response headers (Content-Type, Content-Disposition) and body size.

How do I verify the downloaded file is a valid PDF in an E2E test?▾

Read the first 4 bytes of the saved file and check for %PDF. In Node.js: const buf = fs.readFileSync(path); const isPDF = buf.slice(0, 4).toString() === '%PDF'. For deeper validation, use pdf-parse to verify the file can be parsed without errors.

Bài Viết Liên Quan