Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Improve Visual Regression Testing

Status: In Progress · Proposal

August 2026

Summary of Work Completed

No major new developments - the budget for this proposal was exhausted. We continued the work on flaky tests supporting the development of custom linting rules that encourage the use of galata helpers to prevent the introduction of flaky tests in the future - see the report for Custom Linting for JupyterLab for full details; here we only summarize the flaky tests fixed and the work supporting them.

Of note:

We continued fixing flaky screenshot tests:


We track most of the issues and pull requests associated with this proposal in this public GitHub project.

Deliverables/Milestones

Completed as discussed in the previous reports.

Challenges or Risks

We exhausted the budget, however some flaky snapshots remain and maintenance is still needed to address newly discovered edge cases around the new snapshot update workflows.

Budget Update

As of 25th August 2026 we used 16,182 USD out of 16,182 USD budget.

Next Steps

While we exhausted the budget, we continue making the visual regression tests more reliable.

In particular, we are carrying over the lessons learned from this work and aim to codify the newly established best practices via custom linting rules, as tracked in the report for Custom Linting for JupyterLab.

June 2026

Summary of Work Completed

We completed the logistically challenging transition of galata to use fixed fonts (final PR jupyterlab/jupyterlab#18535). This required coordination across a number of PRs and updating a significant set of snapshots. This change:

We integrated the example test snapshots with the new workflow for updating snapshots (jupyterlab/jupyterlab#19007). The workflows were further improved:

We fixed multiple flaky screenshots:


We track most of the issues and pull requests associated with this proposal in this public GitHub project.

Deliverables/Milestones

Configure sharding for playwright and its test reporters in JupyterLab and Notebook

Done

Create a GitHub bot workflow generating PRs or commits for snapshot updates and comments with snapshot comparisons

Done.

Improving reliability of snapshots across setups (fonts, etc)

Done

Improve the default reporting configuration

Done

Challenges or Risks

We exhausted the budget, however some flaky snapshots remain and maintenance is still needed to address newly discovered edge cases around the new snapshot update workflows.

Budget Update

As of 23rd June 2026 we used 16,182 USD out of 16,182 USD budget.

Next Steps

While we exhausted the budget, we continue making the visual regression tests more reliable. In particular, we are carrying over the lessons learned from this work and aim to codify the newly established best practices via custom linting rules, as tracked in the report for Custom Linting for JupyterLab.

April 2026

Summary of Work Completed

We track some of the issues and pull requests associated with this proposal in this public GitHub project.

Deliverables/Milestones

Configure sharding for playwright and its test reporters in JupyterLab and Notebook

Done

Create a GitHub bot workflow generating PRs or commits for snapshot updates and comments with snapshot comparisons

Done, final improvements awaiting

Improving reliability of snapshots across setups (fonts, etc)

In progress

Improve the default reporting configuration

Done

Challenges or Risks

The transition to fixed fonts on CI requires updating a large number of snapshots, which will introduce a temporary pain for authors of other PRs that modify screenshots.

To ensure the impact on other PR authors is minimal we delayed this transition while:

With very little remaining budget it will be challenging, but we are determined to make this transition happen before the 4.6.0 beta release.

Budget Update

As of 26th April 2026 we used 15,547.60 USD out of 16,182 USD budget.

Next Steps

February 2026

Summary of Work Completed

We track some of the issues and pull requests associated with this proposal in this public GitHub project.

Deliverables/Milestones

Metric 1. The time to run playwright tests on the JupyterLab repo should reduce from current 45 minutes down to ~20 minutes.

Achieved: the runtime is now on the order of 15 minutes.

Metric 2. The snapshot updates should no longer require a multi-step manual process that can be performed only by maintainers but instead allow every contributor to trigger an update of the snapshots. It should be near instantaneous (<5 minutes) once the regression testing is completed by reusing the published artifacts.

Achieved, although:

Metric 3. >90% of tests should pass when run on a non-Ubuntu machine

Work in progress. >95% tests pass on CI between different Ubuntu versions.

Challenges or Risks

We did not find a way to make snapshots identical without requiring an update to the existing ones. This means that while the goal can be achieved, there will be an initial cost to migrate (update all snapshots). This should not be too difficult and would be required when migrating to new Ubuntu runners anyways.

Budget Update

As of 20th Feb 2026 we used 7,507.50 USD out of 16,182 USD budget.

Next Steps