🧪تست end-to-end با Playwright

👁 513 بازدید ❤️ 7 واکنش 📤 9 فوروارد

🧪تست end-to-end با Playwright


تست End-to-End (E2E) چیه؟

تست End-to-End یا E2E یه نوع تست نرم‌افزاریه که فرآیندهای واقعی کاربر رو از شروع تا پایان شبیه‌سازی می‌کنه تا مطمئن شیم تمام بخش‌های نرم‌افزار (شامل رابط کاربری، پایگاه داده، API‌ها و غیره) به درستی و بدون مشکل با هم کار می‌کنن.

هدف اصلی E2E اینه که رفتار سیستم رو از نگاه کاربر واقعی بررسی کنه و مطمئن بشیم که مسیرهای اصلی و بحرانی کسب‌وکار به درستی عمل می‌کنن.


حالا Microsoft Playwright چیه؟

مایکروسافت سال ۲۰۲۰ فریم‌ورک Playwright رو معرفی کرد که طی این سال‌ها خیلی با اقبال خوبی روبرو شده و به نظر من از Selenium و Cypress خیلی بهتر و سریع‌تره. Playwright این امکان رو می‌ده که اپلیکیشن‌های وب رو توی مرورگرهای مختلف (Chrome، Firefox، Safari و Edge) تست کنیم. از زبون‌های برنامه‌نویسی محبوب مثل JavaScript، TypeScript، Python، Java و NET. هم پشتیبانی می‌کنه.


به راحتی می‌شه براش تست نوشت که عین کاربر صفحات وب رو مرور کنه، نتایج رو بررسی کنه. APIها رو هم همینطور. و به راحتی توی پایپ‌لاین CI/CD تون قرار بدید.


یک مثال خیلی ساده (توی یک صفحه وب جستجو کنه و ببینه نتایج میاد یا نه)



test('search works', async ({ page }) => {
  await page.goto('https://example.com');
  await page.fill('#search', 'محصول');
  await page.click('#submit');
  await expect(page.locator('.results')).toBeVisible();
});

یه مثال دیگه ولی REST API به جای صفحه وب (از سرویس reqres که یه API مُفته برای تست، چک می‌کنه API کد ۲۰۰ بده و داده صحیح و کد ۴۰۴ برای آدرس غلط)

*


const { test, expect } = require("@playwright/test");

test.describe("API Testing with Playwright", () => {
  const baseurl = "https://reqres.in/api";

  test("GET API Request with - Valid 200 Response", async ({ request }) => {
    const response = await request.get(`${baseurl}/users/10`);
    expect(response.status()).toBe(200);
  });

  test("GET API Request with - Invalid 404 Response", async ({ request }) => {
    const response = await request.get(`${baseurl}/usres/invalid-data`);
    expect(response.status()).toBe(404);
  });

  test("GET Request - Verify User Details", async ({ request }) => {
    const response = await request.get(`${baseurl}/users/10`);
    const responseBody = JSON.parse(await response.text());
    expect(response.status()).toBe(200);
    expect(responseBody.data.id).toBe(10);
    expect(responseBody.data.first_name).toBe("Byron");
    expect(responseBody.data.last_name).toBe("Fields");
    expect(responseBody.data.email).toBeTruthy();
  });
});

معادل کد 📱:


using Microsoft.Playwright;
using System.Text.Json;

public class PlaywrightApiTests
{
    private const string BaseUrl = "https://reqres.in/api";

    [Fact]
    public async Task GetApiRequest_Valid200Response()
    {
        using var playwright = await Playwright.CreateAsync();
        var request = await playwright.APIRequest.NewContextAsync();

        var response = await request.GetAsync($"{BaseUrl}/users/10");
        Assert.Equal(200, response.Status);
    }

    [Fact]
    public async Task GetApiRequest_Invalid404Response()
    {
        using var playwright = await Playwright.CreateAsync();
        var request = await playwright.APIRequest.NewContextAsync();

        var response = await request.GetAsync($"{BaseUrl}/usres/invalid-data");
        Assert.Equal(404, response.Status);
    }

    [Fact]
    public async Task GetRequest_VerifyUserDetails()
    {
        using var playwright = await Playwright.CreateAsync();
        var request = await playwright.APIRequest.NewContextAsync();

        var response = await request.GetAsync($"{BaseUrl}/users/10");
        Assert.Equal(200, response.Status);

        var responseBody = JsonSerializer.Deserialize<JsonDocument>(await response.TextAsync());
        var userData = responseBody?.RootElement.GetProperty("data");

        Assert.Equal(10, userData.Value.GetProperty("id").GetInt32());
        Assert.Equal("Byron", userData.Value.GetProperty("first_name").GetString());
        Assert.Equal("Fields", userData.Value.GetProperty("last_name").GetString());
        Assert.False(string.IsNullOrEmpty(userData.Value.GetProperty("email").GetString()));
    }
}


💬 نظر، سوال؟ E2E دارید؟


← بازگشت به همه پست‌ها