Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 25 additions & 2 deletions docs/Changelog-Platform.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,42 @@ See full log [of v4.3.3...v4.4.0](https://github.com/microsoft/testfx/compare/v4

### Added

* Add managed-identity authentication to `Microsoft.Testing.Extensions.AzureFoundry`, while keeping `Azure.Identity` optional for consumers that provide their own `TokenCredential`, by @Evangelink in [#9707](https://github.com/microsoft/testfx/pull/9707) and [#9779](https://github.com/microsoft/testfx/pull/9779)
* Add the client-declared `IsStateful` capability to the Microsoft.Testing.Platform server-mode protocol, allowing editor and IDE clients to tell the server whether state must be preserved between requests, by @Evangelink in [#9789](https://github.com/microsoft/testfx/pull/9789)
* Add the public injectable `IArtifactNamingService` for extensions that need platform-consistent artifact names by @Evangelink in [#9783](https://github.com/microsoft/testfx/pull/9783)
* Allow overriding the Unix directory used for IPC named pipes, enabling test execution in sandboxes where the default temporary directory is unavailable, by @Evangelink in [#9846](https://github.com/microsoft/testfx/pull/9846)
* Add `--show-slowest-tests <count>` to the core terminal reporter to list the requested number of slowest completed tests at the end of a run by @Evangelink in [#9894](https://github.com/microsoft/testfx/pull/9894)
* Add code-coverage messages, coverage-threshold checks and an end-of-run coverage summary to the platform's coverage consumer model by @james-newell-forge in [#9896](https://github.com/microsoft/testfx/pull/9896)
* Add artifact post-processing for `dotnet test`, including TRX and CTRF merge engines, artifact-kind metadata, partial-output recovery for truncated runs and provenance for every merged input, by @Evangelink in [#9805](https://github.com/microsoft/testfx/pull/9805), [#10086](https://github.com/microsoft/testfx/pull/10086), [#10445](https://github.com/microsoft/testfx/pull/10445) and [#10463](https://github.com/microsoft/testfx/pull/10463)
* Add packaged-app identity detection, MSIX registration and AUMID activation to `Microsoft.Testing.Extensions.PackagedApp`, and support unpackaged WinUI test applications under Microsoft.Testing.Platform, by @Evangelink in [#9914](https://github.com/microsoft/testfx/pull/9914), [#9970](https://github.com/microsoft/testfx/pull/9970) and [#10330](https://github.com/microsoft/testfx/pull/10330)
* Enable Microsoft.Testing.Platform test execution on `browser-wasm` and `wasi-wasm`, using HTTP transport for the browser `dotnet test` protocol and cooperative active/slow-test reporting on the single-threaded browser runtime, by @Evangelink in [#9781](https://github.com/microsoft/testfx/pull/9781), [#9857](https://github.com/microsoft/testfx/pull/9857), [#10129](https://github.com/microsoft/testfx/pull/10129), [#10143](https://github.com/microsoft/testfx/pull/10143) and [#10128](https://github.com/microsoft/testfx/pull/10128)
* Add composable test-execution filter providers, so framework and extension filters can participate in one ordered filtering pipeline, by @Evangelink in [#10235](https://github.com/microsoft/testfx/pull/10235)
* Add `--report-azdo-groups <on|off>` and `--report-azdo-annotations <on|off>` toggles to Azure DevOps report extension by @Evangelink in [#9542](https://github.com/microsoft/testfx/pull/9542)
* Re-print errored assemblies in dotnet test end-of-run recap by @Evangelink in [#9545](https://github.com/microsoft/testfx/pull/9545)
* Add server-initiated session cancellation to the dotnet test IPC protocol by @Evangelink in [#9549](https://github.com/microsoft/testfx/pull/9549)
* Add `RetryAttemptProperty`, a `TestNode` property that lets a test framework report several in-process attempts of the same test under one test node uid (`AttemptNumber` plus `IsSuperseded`). The terminal reporter annotates the attempts (`failed (try 1) MyTest`) and counts the test once, the process exit code and the TRX / JUnit / Azure DevOps reports ignore superseded attempts, and the CTRF report collapses them into `retries` / `retryAttempts[]` / `flaky` in [#10292](https://github.com/microsoft/testfx/issues/10292)
* Add `AssertionFailureProperty` and forward structured expected/actual values over the `dotnet test` protocol, allowing IDEs and reporters to consume assertion details without parsing the failure message, by @Evangelink in [#9826](https://github.com/microsoft/testfx/pull/9826) and [#10353](https://github.com/microsoft/testfx/pull/10353)
* Report the Azure DevOps test run URL when `--publish-azdo-test-results` creates the run, so results can be followed while the tests are still running, and clarify that the build's Tests tab only lists the run once it completes in [#10191](https://github.com/microsoft/testfx/issues/10191)
* Allow setting environment variables on the test process launched by the `InvokeTestingPlatform` MSBuild target (`/t:Test`) through the `TestingPlatformEnvironmentVariable` item: `<TestingPlatformEnvironmentVariable Include="DOTNET_ROOT" Value="$(DotNetRoot)" />`. The value is carried by item metadata, which is not subject to MSBuild's `;` splitting, so values containing a `;` reach the test process as authored. The variables are applied on top of the environment inherited from MSBuild, so declaring none keeps the previous behavior in [#10342](https://github.com/microsoft/testfx/issues/10342)
* Pin `Microsoft.Testing.Extensions.GitHubActionsReport` annotations to the test's declared source location (`TestFileLocationProperty`) when the failure's stack trace yields no frame inside the workspace, and use it to place skipped-test `::warning` annotations on the pull request diff gutter instead of emitting them title-only. The property is populated by the MSTest adapter and by the VSTest bridge, so xUnit, NUnit and other bridged frameworks are covered too in [#9003](https://github.com/microsoft/testfx/issues/9003)
* Add opt-in dynamically resolved extensions through JSON manifests. `--enable-dynamic-extensions` allows test applications to discover and load extension assemblies that are not statically referenced, by @Evangelink in [#10406](https://github.com/microsoft/testfx/pull/10406)

### Changed

* Send `pipelineReference` (stage, phase and job, with their attempt numbers) and `startedDate` when `--publish-azdo-test-results` creates an Azure DevOps test run, so the run is attributed to the stage and job that produced it in multi-stage pipelines instead of only to the build
* Give platform extension packages a `[current major, next major)` dependency range on `Microsoft.Testing.Platform`, preventing NuGet from combining an extension with an unsupported future platform major by @Evangelink in [#9730](https://github.com/microsoft/testfx/pull/9730)
* Stabilize built-in extension UIDs and their naming rules so extension identity remains consistent across releases and hosts by @Evangelink in [#9773](https://github.com/microsoft/testfx/pull/9773)
* Make the CTRF report writer's existing-file behavior match TRX, HTML and JUnit report writers by @Evangelink in [#9782](https://github.com/microsoft/testfx/pull/9782)
* Distinguish individual parameterized-test instances in Azure DevOps and GitHub Actions slow-test output by @Evangelink in [#9940](https://github.com/microsoft/testfx/pull/9940)
* Include the final exit-code verdict and clearer per-assembly results in GitHub Actions job summaries by @Evangelink in [#9974](https://github.com/microsoft/testfx/pull/9974)
* Send `pipelineReference` (stage, phase and job, with their attempt numbers) and `startedDate` when `--publish-azdo-test-results` creates an Azure DevOps test run, so the run is attributed to the stage and job that produced it in multi-stage pipelines instead of only to the build, by @Evangelink in [#10331](https://github.com/microsoft/testfx/pull/10331)
* Expand OpenTelemetry support with testing semantic conventions, environment-driven configuration, resource detection and spans for MSTest tests and fixtures by @Evangelink in [#10358](https://github.com/microsoft/testfx/pull/10358)
* Publish Azure DevOps retry attempts as sub-results of one logical test result, so a test recovered by retry has the final outcome while retaining its attempt history, by @Evangelink in [#10431](https://github.com/microsoft/testfx/pull/10431)

### Fixed

* Emit Azure DevOps logging commands at column zero from the in-process MSBuild node, so Azure Pipelines recognizes them. Multi-node `dotnet test -m` workers cannot forward these commands because their `Console.Out` output is discarded, by @Evangelink in [#9895](https://github.com/microsoft/testfx/pull/9895)
* Fix artifact merge output paths being corrupted by the file-system case-sensitivity probe by @Evangelink in [#10014](https://github.com/microsoft/testfx/pull/10014)
* Include exception messages, in addition to exception types and stack traces, in JUnit failure and error bodies by @Evangelink in [#10286](https://github.com/microsoft/testfx/pull/10286)
* Make the `InvokeTestingPlatform` MSBuild target set `DOTNET_ROOT_<ARCH>` from `DOTNET_HOST_PATH` when launching a compatible apphost, matching `dotnet test` runtime resolution. Set `TestingPlatformDisableAppHostDotnetRoot` to `true` to opt out; an explicit applicable `TestingPlatformEnvironmentVariable` remains authoritative in [#10408](https://github.com/microsoft/testfx/issues/10408)
* Fix `--report-trx` crashing with `PlatformNotSupportedException` on single-threaded WebAssembly runtimes (`browser-wasm` / `wasi-wasm`): the TRX streaming store now serializes records inline instead of starting a dedicated writer thread and draining a `BlockingCollection<T>` in [#2196](https://github.com/microsoft/testfx/issues/2196)
* Keep the Azure DevOps and GitHub Actions slow-test reporters dormant on single-threaded WebAssembly runtimes instead of attempting to start a background scan loop that cannot run there. `ITask.RunLongRunning` throws `PlatformNotSupportedException` on `browser-wasm` / `wasi-wasm`; the reporter caught and logged it to the diagnostic log, then stayed marked active with no scan loop, so the failure was invisible outside `--diagnostic` in [#2196](https://github.com/microsoft/testfx/issues/2196)
Expand All @@ -34,9 +56,10 @@ See full log [of v4.3.3...v4.4.0](https://github.com/microsoft/testfx/compare/v4
* Fix `--report-azdo` faulting the test run with `Could not find solution root, .git not found in ... or any parent directory.` when annotating a failing test from an application that does not run inside a git checkout (a published app, a container, or `browser-wasm`, whose virtual filesystem has no `.git`); the reporter now degrades to a message-only annotation, matching the GitHub Actions reporter in [#10313](https://github.com/microsoft/testfx/issues/10313)
* Fix TRX attachments being silently dropped on .NET Framework when the destination path exceeds the Windows `MAX_PATH` limit. Both per-test `ResultFile` entries and session-level `CollectorDataEntries` attachments (crash dumps, hang dumps and other extension artifacts) could disappear from the report while the run still reported success in [#10312](https://github.com/microsoft/testfx/issues/10312)
* Report attachments that could not be copied into the TRX results directory on the output device instead of only in the `RunInfos` section of the generated TRX in [#10312](https://github.com/microsoft/testfx/issues/10312)
* Fix `--publish-azdo-test-results` creating and completing one Azure DevOps test run per `--retry-failed-tests` attempt instead of one run for the build, which recorded a test rescued by a retry as failed forever in the earlier run. The run's lifetime now belongs to the retry orchestrator process, which outlives every attempt: it creates the run once, hands its id to the attempts through the inherited `TESTINGPLATFORM_AZUREDEVOPS_TESTRUNID` variable, and completes it once. Orchestrator processes take part in the existing per-build coordination too, so several test projects sharing a results directory still publish into a single run. Note that a retried test still contributes one result per attempt inside that single run (`Failed` and then `Passed`); collapsing those into one result carrying the final outcome is tracked separately in [#10360](https://github.com/microsoft/testfx/issues/10360)
* Fix `--publish-azdo-test-results` creating and completing one Azure DevOps test run per `--retry-failed-tests` attempt instead of one run for the build. The run's lifetime now belongs to the retry orchestrator process, which outlives every attempt: it creates the run once, hands its id to the attempts through the inherited `TESTINGPLATFORM_AZUREDEVOPS_TESTRUNID` variable, and completes it once. Orchestrator processes take part in the existing per-build coordination too, so several test projects sharing a results directory still publish into a single run in [#10360](https://github.com/microsoft/testfx/issues/10360)
* Keep an Azure DevOps test run open while a peer test project that is still running has yet to publish into it. The owner previously gave up after a fixed 30 second grace period, so in a multi-project build a project that finished early could complete the run and make every result the remaining projects sent afterwards be rejected. Participants whose process is provably alive are now waited for, bounded by a hard cap so a leaked process cannot stall a build in [#10360](https://github.com/microsoft/testfx/issues/10360)
* Release what an `ITestHostOrchestratorApplicationLifetime` acquired in `BeforeRunAsync` when the orchestration is canceled or fails. `AfterRunAsync` was only invoked when the orchestrator completed normally, so an Azure DevOps test run created before a cancellation — or before `--retry-failed-tests` rejected server mode or hot reload — was left `InProgress` and never appeared in the build's Tests tab in [#10360](https://github.com/microsoft/testfx/issues/10360)
* Surface the underlying error when the diagnostic log file cannot be created instead of reporting only the follow-on logger failure by @Evangelink in [#10374](https://github.com/microsoft/testfx/pull/10374)

## <a name="2.3.3" />[2.3.3] - 2026-07-28

Expand Down
Loading