Introduction
The Cypress Azure reporting post wired Mocha’s junit reporter into Publish Test Results. Playwright ships the same capability natively - configure reporter once and point Azure at the XML file.
Previous post: Playwright CI on Azure.
Reporter in playwright.config.ts
import { defineConfig } from "@playwright/test"
export default defineConfig({
reporter: [
["list"],
["junit", { outputFile: "results/e2e-junit.xml" }],
],
})One-off CLI runs are possible, but checking the reporters into config keeps local and CI behaviour aligned.
Azure: run + publish
Same pattern as Cypress: mark the test step with continueOnError: true so the pipeline reaches publishing, then let Publish Test Results fail the job when failTaskOnFailedTests sees red tests.
- script: npx playwright test
continueOnError: true
displayName: Run Playwright tests
- task: PublishTestResults@2
inputs:
testResultsFormat: JUnit
testResultsFiles: "**/e2e-junit.xml"
failTaskOnFailedTests: true
testRunTitle: Playwright tests
Why bother
Azure aggregates JUnit-compatible output regardless of whether Cypress or Playwright produced it - only the runner command changes.
Cypress reference
https://github.com/12masta/react-redux-realworld-example-app/tree/8-cypressFull Cypress + JUnit walkthrough: cypress-9.
That finishes the parallel Playwright track (playwright-1 … playwright-9) alongside the original Cypress posts.
