Repository navigation
Test Plan Platform Comparison
Screen: gui/templates/results/platformComparison.html
BFF: api/platformcomparison/index.php
ASIDE: Reports → Test Plan Platform Comparison (new entry,
$TLS_link_report_platform_comparison, present in all 19 server locales)
Action: $actions->platformComparison in lib/functions/common.php
TestLink 1.9.20 repeats the current status of a plan once per platform and never
diffs the platforms. The buildComparison report diffs two builds of one
plan. Neither answers the regression question: for the same test cases, what
changed between platform A and platform B?
This screen is a net-new 2.0.1 report. It compares the same test plan across two of its platforms, classifies every test-case version (fixed / regressed / new pass / new fail / no longer run / changed / unchanged) and shows per-platform KPIs plus a CSV export. It is read only.
| Block | Content |
|---|---|
| Banner | regressions, improvements, stable, or no-execution verdict |
| Report context | test project, test plan, platform A, platform B |
| Platform summary (×2) | assigned, executed, passed, failed, blocked, not run, pass rate, coverage |
| Change summary | fixed, regressed, new pass, new fail, no longer run, changed |
| Per test case changes | test case, version, suite, status A, status B, change |
| CSV export | platform summary + filtered diff rows, UTF-8 BOM, ; separator |
- The unit is the test-case version linked to the plan
(
testplan_tcversions), so a version assigned to only one platform still appears (not run on the other). -
Latest execution wins (
MAX(executions.id)per version and platform) — the same rule every other 2.0.1 report uses. -
assignedper platform counts the plan versions whose assignment targets that platform (platform_id = P) or has no platform (legacyplatform_id = 0). -
pass_rate= passed / executed;coverage= executed / assigned;not_run= assigned - executed. - Classification:
regressed(passed -> failed),fixed(failed/blocked -> passed),new_pass(not run -> passed),new_fail(not run -> failed),revived(executed in A, no execution in B),changed(other transitions), orsame_passed/same_failed/same_blocked/same_not_run.
-
tproject_id,tplan_id— scope; the plan must belong to the asserted project. -
platform_a,platform_b— two different platforms of the owning project, both linked to the plan (testplan_platforms.active = 1).
-
GET|HEAD ?action=projects— projects the user may read. -
GET|HEAD ?action=init&tproject_id=N[&tplan_id=P]— plans and the platforms linked to the selected plan (all open project platforms without a plan). -
GET|HEAD ?action=report&tplan_id=N[&tproject_id=P]&platform_a=A&platform_b=B. - Rights: session auth +
bffSameOriginGuard+bffEnforceSession, andtestplan_metricson the owning project of the plan. The clienttproject_idis only an assertion. - Errors:
400 invalid_request|invalid_parameter|unknown_action,401 not_authenticated|session_expired,403 no_right,404 tplan_not_found|tproject_not_found|project_mismatch,405 method_not_allowed.
Labels come from pcomp.* and footers.platformComparison in all 10 client
bundles; the server menu entry uses link_report_platform_comparison in all 19
server locales. ai/verify_i18n_coverage.sh passes 9/9 bundles.
Suite Issue #1963 (10 cases) in tmp/TLU_Test_Cases.md: normal render,
platform auto-selection/swap, change classification, change filter,
Apply/Refresh/plan change, CSV export, plan without platforms, BFF
security/error codes, EN+RO i18n, reports-menu wiring. Event Viewer: 0 new
Error/Warning rows.
