Playwright End to End Tests in GitLab CI with .Net project

Playwright is a great tool to test your application, but how to run your tests from your Gitlab CI environment with a .Net test project ?
Banner Image Playwright End to End Tests in GitLab CI with .Net project
Publié par phnogues le août 06, 2024

Playwright is a great tool to test your application, but how to run your tests from your Gitlab CI environment with a .Net test project ?

1- Create your .Net test project

With Nunit Or MsTest :

dotnet new nunit -n PlaywrightTests 
dotnet add package Microsoft.Playwright.NUnit

dotnet new mstest -n PlaywrightTests
dotnet add package Microsoft.Playwright.MSTest

Then, add the JunitXml.TestLogger package

It will be used later to generate your xml rapport

dotnet add package JunitXml.TestLogger

Write your first test like :

namespace PlaywrightTests;

[TestClass]
public class TitleShouldContainsPlaywright : PageTest
{
    [TestMethod]
    public async Task Apply_On_Carreer_Site()
    {
        await Page.GotoAsync("https://playwright.dev");

        await Expect(Page).ToHaveTitleAsync(new Regex("Playwright"));
    }
}

2- Write your GitLab pipeline

playwright-e2e-tests:
  stage: test
  image: mcr.microsoft.com/playwright/dotnet:v1.38.0-jammy
  variables:
    CSPROJ_FILE_PATH: "./PlaywrightTests/PlaywrightTests.csproj"
  script:
    - curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --version 7.0.401 --install-dir /usr/share/dotnet
    - dotnet tool install --global PowerShell
    - dotnet tool install --global Microsoft.Playwright.CLI
    - dotnet restore $CSPROJ_FILE_PATH
    - dotnet build $CSPROJ_FILE_PATH -c Release --no-restore
    - pwsh ./PlaywrightTests/bin/Release/net7.0/playwright.ps1 install --with-deps
    - 'dotnet test $CSPROJ_FILE_PATH -c Release --logger:"junit;LogFilePath=..\artifacts\{assembly}-test-result.xml;MethodFormat=Class;FailureBodyFormat=Verbose"'
  artifacts:
    when: always
    reports:
      junit:
        - ./**/*test-result.xml
    expire_in: 4 days  
  only:
    refs:
      - merge_requests
  when: manual

Details, pipeline explained :

Download Playwright container :

image: mcr.microsoft.com/playwright/dotnet:v1.38.0-jammy

Download .Net 7, only .Net 6 is supported (at the moment I write this article)

- curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --version 7.0.401 --install-dir /usr/share/dotnet

Setup powerShell in order to setup Playwright :

- dotnet tool install --global PowerShell
- dotnet tool install --global Microsoft.Playwright.CLI

Run your test with Junit output in order to user GitLab results :

- 'dotnet test $CSPROJ_FILE_PATH -c Release --logger:"junit;LogFilePath=..\artifacts\{assembly}-test-result.xml;MethodFormat=Class;FailureBodyFormat=Verbose"'

Your pipeline is Ready 🚀 :

Go back to your Merge Request, you can see your test summary:

Happy test !

Playwright
Tests Playwright

Commentaires :