MTP 支持使用配置文件和环境变量来配置测试平台的行为。 本文介绍可用于配置测试平台的配置设置。
testconfig.json
测试平台使用名为 [appname] 的配置文件.testconfig.json 来配置测试平台的行为。 testconfig.json 文件是一个 JSON 文件,其中包含测试平台的配置设置。
testconfig.json 文件具有以下结构:
{
"platformOptions": {
"resultDirectory": "./TestResults"
}
}
平台将自动检测并加载位于测试项目的输出目录中 的 [appname].testconfig.json 文件(靠近可执行文件)。
使用 Microsoft.Testing.Platform.MSBuild 时,只需创建 一个testconfig.json 文件,该文件将自动重命名为 [appname].testconfig.json 并移动到测试项目的输出目录。
从 MTP 1.5 开始,可以使用命令行参数 --config-file 指定 testconfig.json的路径。 此文件优先于 [appname].testconfig.json 文件。
注释
[appname].testconfig.json 文件将在后续构建时被覆盖。
使用统一的 testconfig.json
如果希望跨多个测试项目共享单个 testconfig.json ,可以将它放置在中心位置并通过该位置传递 --config-file。 当 MSBuild 可用时(例如,dotnet test 或 dotnet run),你可以使用 TestingPlatformCommandLineArguments MSBuild 属性自动传递该参数。 将此添加到存储库根目录中的 Directory.Build.props 可确保所有测试项目使用相同的配置:
<PropertyGroup>
<TestingPlatformCommandLineArguments>
$(TestingPlatformCommandLineArguments) --config-file $(MSBuildThisFileDirectory)testconfig.json
</TestingPlatformCommandLineArguments>
</PropertyGroup>
配置优先级
如果可以通过多种方式指定相同的设置,MTP 会按以下顺序解析它(第一次匹配获胜):
- 命令行参数(例如
--results-directory) - 环境变量
- testconfig.json 设置
- 内置默认值
平台选项
testconfig.json 文件中的 platformOptions 部分用于配置测试平台的核心行为。 下表列出了所有受支持的平台选项:
| 条目 | 默认 | 说明 |
|---|---|---|
resultDirectory |
TestResults |
用于放置测试结果的目录。 可以是相对路径(从当前工作目录解析)或绝对路径。
--results-directory命令行选项优先。 |
exitProcessOnUnhandledException |
false |
当设置为 true 时,测试主机进程会在发生未处理异常时立即退出,而不是进行优雅关闭。
TESTINGPLATFORM_EXIT_PROCESS_ON_UNHANDLED_EXCEPTION环境变量(值1或0)优先。 |
注释
对于高级场景(例如测试主机控制器的命名管道超时设置),还有其他内部平台选项。 这些选项适用于基础结构使用,此处未介绍。
例:
{
"platformOptions": {
"resultDirectory": "../../TestResults",
"exitProcessOnUnhandledException": false
}
}
扩展选项仅可通过命令行界面(CLI)使用
扩展功能(例如 故障转储、挂起转储、重试、TRX 报告和代码覆盖率)无法通过 testconfig.json 进行配置。 这些功能仅通过命令行参数进行配置。
有关命令行选项的完整参考,请参阅 MTP CLI 选项参考。
特定框架的测试设置
测试框架可以在 testconfig.json 文件中定义其自己的配置节。 请参阅测试框架的文档:
- MSTest: 配置 MSTest — testconfig.json
- xUnit.net v3: xUnit.net testconfig.json
- NUnit:有关最新的 Microsoft.Testing.Platform 支持信息,请参阅 NUnit 文档。
- TUnit:有关最新的 Microsoft.Testing.Platform 支持,请参阅 TUnit 文档。
示例 testconfig.json
以下示例显示了一个用于配置平台选项和 MSTest 设置的 testconfig.json 文件:
{
"platformOptions": {
"resultDirectory": "./TestResults"
},
"mstest": {
"parallelism": {
"enabled": true,
"workers": 4,
"scope": "method"
},
"timeout": {
"test": 30000
},
"execution": {
"considerFixturesAsSpecialTests": true
}
}
}
从 .runsettings 迁移到 testconfig.json
如果要从 .runsettings 文件迁移,下表将通用设置映射到其 testconfig.json 等效项或替代项:
| .runsettings 设置 | testconfig.json 等效项 | 备注 |
|---|---|---|
RunConfiguration/ResultsDirectory |
platformOptions.resultDirectory |
|
RunConfiguration/MaxCpuCount |
无等效项 | 进程级并行度由 dotnet test --max-parallel-test-modules MSBuild /m 选项控制。 |
MSTest/* |
mstest.* |
请参阅 配置 MSTest — testconfig.json。 |
xUnit/* |
xUnit.* |
请参阅 xUnit.net testconfig.json。 |
LoggerRunSettings/Loggers |
仅支持 CLI | 使用 --report-trx 或类似的 CLI 选项。 |
DataCollectionRunSettings (责怪) |
仅支持 CLI | 使用 --crashdump 和 --hangdump CLI 选项。 请参阅 崩溃和无响应转储文件。 |
DataCollectionRunSettings (覆盖范围) |
仅限 CLI | 使用--coverage命令行界面选项。 请参阅 代码覆盖率。 |
TestRunParameters |
--test-parameter CLI |
在命令行中使用 --test-parameter key=value。 |
环境变量
环境变量可用于提供某些运行时配置信息。
注释
环境变量优先于 testconfig.json 文件中的配置设置。
TESTINGPLATFORM_EXIT_PROCESS_ON_UNHANDLED_EXCEPTION 环境变量
当设置为 1 时,测试主机进程会在发生未处理的异常时立即退出。 设置为 0时,平台允许正常关闭。 此设置优先于 platformOptions:exitProcessOnUnhandledException 配置。
TESTINGPLATFORM_DEFAULT_HANG_TIMEOUT 环境变量
替代用于测试主机控制器和测试主机之间的命名管道连接的默认超时(300 秒)。 该值必须是 TimeSpan兼容字符串。
TESTINGPLATFORM_UI_LANGUAGE 环境变量
从 MTP 1.5 开始,此环境变量设置平台的语言,以便使用区域设置值(例如 en-us)显示消息和日志。 此语言优先于 Visual Studio 和 .NET SDK 语言。 支持的值与 Visual Studio 中的值相同。 有关详细信息,请参阅 Visual Studio 安装文档中有关更改安装程序语言一节。
TESTINGPLATFORM_DIAGNOSTIC 环境变量
如果设置为 1,则启用诊断日志记录。
TESTINGPLATFORM_DIAGNOSTIC_VERBOSITY 环境变量
定义启用诊断时的详细程度级别。 可用值包括 Trace、Debug、Information、Warning、Error 和 Critical。
TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_DIRECTORY 环境变量
诊断日志的输出目录。 如果未指定,则会在默认 TestResults 目录中生成该文件。
TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_FILEPREFIX 环境变量
日志文件名的前缀。 默认值为 "log_".
TESTINGPLATFORM_DIAGNOSTIC_FILELOGGER_SYNCHRONOUSWRITE 环境变量
强制内置的文件记录器以同步方式写入日志。 对于在进程崩溃时不想丢失任何日志条目的场景非常有用。 这会降低测试执行速度。
TESTINGPLATFORM_EXITCODE_IGNORE 环境变量
要忽略的、以分号分隔的退出代码列表。 当退出代码被忽略时,进程将改为返回 0。 例如, TESTINGPLATFORM_EXITCODE_IGNORE=2;8 忽略测试失败和未运行测试的方案。
注释
与诊断相关的环境变量优先于其相应的 --diagnostic-* 命令行参数。