Single Pane of Glass: Unifying Test Results Across Multiple Frameworks
Most teams run 4+ test frameworks, and each one's native reporter only sees its own results. Here's why that's an observability problem, not just an aggregation one — and what Google's own engineering org has said about it.


A team running Playwright, Jest, pytest, and JUnit has four native reporters, and none of them can see the other three's results. That's not just an inconvenience — it means a flaky pattern spanning two frameworks looks like two unrelated problems, and a release's real risk is split across four dashboards nobody looks at together. A single pane of glass isn't about prettier aggregation; it's the analysis layer that per-framework reporting structurally can't provide.
Key takeaways
- Most teams run 4+ test frameworks by the time they have a frontend, a backend, and an E2E suite — each with its own native reporter that only sees its own results.
- Software Engineering at Google documents this exact fragmentation at scale: different teams' larger tests use 'different platforms, different languages, different infrastructures, different libraries, and competing testing frameworks.'
- A cross-framework flaky pattern — the same root cause failing in both a Playwright suite and a pytest suite — is invisible if each framework's results only ever get read separately.
- Aggregating results into one report (unified pass rate, one dashboard) is a different, more basic problem than analyzing them together — the two get conflated, but only one is 'single pane of glass' in the observability sense.
- Some observability tools are narrower than they look: Currents is Playwright-primary with Cypress frozen at pre-v13, and QA Sphere's automated ingestion covers only three formats — neither unifies a 4+ framework stack the way broad, auto-detecting ingestion does.
A team running Playwright, Jest, pytest, and JUnit has four native reporters, and none of them can see the other three’s results. That’s not just an inconvenience — it means a flaky pattern spanning two frameworks looks like two unrelated problems, and a release’s real risk is split across four dashboards nobody checks together. A single pane of glass isn’t about prettier aggregation; it’s the analysis layer that per-framework reporting structurally can’t provide.
Why this is an observability problem, not just an aggregation one
We’ve covered the mechanics of combining multi-framework results before, in monorepo test aggregation — how you get from four separate reports to one unified pass rate per commit. That post is about the plumbing: getting the results into one place. This one is about what happens after they’re there. Aggregation answers “what’s the overall pass rate across all four frameworks?” Observability answers “is this failure in the Playwright suite the same root cause as that failure in pytest?” — a genuinely different, harder question that a unified report doesn’t automatically answer just by putting results side by side.
The fragmentation problem is real, and it’s documented at scale
It’s tempting to treat this as a small-team annoyance that “just needs a spreadsheet.” It isn’t. Software Engineering at Google describes this exact fragmentation inside one of the largest engineering organizations in the industry: “Unlike unit tests, larger tests suffer a lack of standardization in terms of the infrastructure and process by which they are written, run, and debugged.” The book gives a concrete internal example: “the way we build and run A-B diff regression tests in Google Ads is completely different from the way such tests are built and run in Search backends, which is different again from Drive. They use different platforms, different languages, different infrastructures, different libraries, and competing testing frameworks.”
The consequences named in the same source aren’t cosmetic: large-scale refactoring efforts skip tests that don’t fit a standardized execution path, cross-team integration testing becomes an exercise in unifying incompatible infrastructure before you can even run the tests together, and new engineers can’t be taught one consistent way to think about testing across the company. If a fragmentation problem this real shows up at Google’s scale, it’s not something a smaller team should expect to just not have.
Production observability already went through this exact problem and settled on an answer. OpenTelemetry exists specifically to “solve tool fragmentation by providing a single set of APIs, SDKs, Collector agent, and semantic conventions” across languages and frameworks — the same shape of problem this post is describing for test results, one layer over. The CNCF’s own May 2026 graduation announcement puts the scale of that fragmentation problem in context: over 12,000 contributors from 2,800+ companies have worked on unifying telemetry that used to be locked inside per-language, per-vendor tools. Test results are behind that curve — most teams still default to reading each framework’s output separately, the equivalent of production observability before a shared standard existed.
What a cross-framework question actually looks like
Concretely, here’s the class of question a single-framework dashboard can’t answer:
- Is this flaky pattern one problem or four? A shared test database, a shared external API dependency, or a shared CI runner resource constraint can cause intermittent failures in a Playwright E2E suite and a pytest integration suite and a JUnit suite — for the same underlying reason. Looked at separately, that’s three isolated “occasionally flaky” tests each team quietly tolerates. Looked at together, it’s one infrastructure problem worth fixing once — and flakiness is common enough that this isn’t a rare edge case: Google reports around 1.5% of all test runs come back flaky, across a test suite that spans exactly the kind of multi-framework, multi-language infrastructure this post is describing.
- What’s the actual release risk? If your frontend’s Jest suite is green and your backend’s pytest suite has 8 failures, is the release safe? That depends on whether those 8 failures are new regressions or long-known flakes, which requires the same kind of historical, cross-run analysis this site has argued a dashboard alone can’t do — applied here across frameworks instead of within one.
- Which team owns the fix? When a failure only becomes visible as a pattern once you see it across frameworks, “which reporter shows it” stops being a useful way to route ownership.
What broad framework support actually requires
The bar here is auto-detection, not a growing list of manually-written adapters. Qualflare’s CLI drops into GitHub Actions, GitLab CI, Bitbucket Pipelines, or Jenkins and auto-detects 23+ test frameworks — JUnit, Playwright, Cypress, Jest, pytest, and more — directly from the result files, with no per-framework integration to build or maintain, and applies flaky scoring and failure clustering across all of them together rather than per framework.
Worth being specific about how this varies across the category, since “supports multiple frameworks” gets claimed loosely: Currents is Playwright-primary today, with Cypress support frozen at pre-v13 following a 2023 dispute with Cypress.io, and no other frameworks at all — genuinely narrow, despite being a real observability tool within that scope. QA Sphere’s automated-result ingestion covers JUnit XML, Playwright JSON, and Allure — three formats, not an open-ended list. Neither is a criticism of what those tools do well within their scope; it’s a reason to check framework breadth specifically if your team already spans more than two or three test runners, since “multi-framework support” can mean very different things depending on the vendor.
Start free with Qualflare — connect every framework your team actually runs and see flaky scoring and failure clustering work across all of them, not one dashboard per runner.
Frequently asked questions
What does “single pane of glass” mean for test results?
Seeing and analyzing results from every test framework your team runs — Playwright, Jest, pytest, JUnit, and others — in one place, rather than checking each framework’s own separate reporter. The important part isn’t just viewing them together; it’s being able to analyze across them: spotting a flaky pattern that spans two frameworks, or clustering failures that share a root cause even if they surfaced in different test runners.
Isn’t this the same as monorepo test aggregation?
Related but not the same. Monorepo test aggregation is about combining multiple frameworks’ results into one unified report per commit — the plumbing. Single pane of glass is the analysis layer on top of that: once results are unified, can the system actually correlate failures and flakiness across frameworks, or does it just display them side by side? You need both, and they’re genuinely different problems — see our deep dive on the aggregation side in monorepo test aggregation.
Why can’t each framework’s own reporter just handle this?
Because each framework’s native reporter was built to report on that framework’s own results, full stop. Playwright’s reporter has no visibility into your pytest suite, and vice versa. If a bug causes the same class of failure in both, each reporter sees an isolated, unrelated-looking problem — neither has the data or the design to notice the pattern.
Is test-framework fragmentation a real, common problem, or a niche one?
It’s documented at large scale, not niche. Software Engineering at Google describes exactly this fragmentation inside Google’s own engineering org — different product teams’ larger tests running on “different platforms, different languages, different infrastructures, different libraries, and competing testing frameworks,” with named consequences including large-scale refactors skipping untestable code and cross-team integration testing failing.
How does Qualflare handle multiple frameworks?
A CLI drops into GitHub Actions, GitLab CI, Bitbucket Pipelines, or Jenkins and auto-detects 23+ test frameworks (JUnit, Playwright, Cypress, Jest, pytest, and more) from the result files themselves, with no per-framework adapter to write or maintain. Results, flaky scoring, and failure clustering apply across all of them together, not per framework.


