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 设置
- 内置默认值
平台选项
platformOptions 文件中的 部分用于配置测试平台的核心行为。 下表列出了所有受支持的平台选项:
| 项 | 默认 | 说明 |
|---|---|---|
resultDirectory |
TestResults |
用于放置测试结果的目录。 可以是相对路径(从当前工作目录解析)或绝对路径。
--results-directory命令行选项优先。 |
exitProcessOnUnhandledException |
false |
当设置为 true 时,测试主机进程会在发生未处理异常时立即退出,而不是进行优雅关闭。
TESTINGPLATFORM_EXIT_PROCESS_ON_UNHANDLED_EXCEPTION环境变量(值1或0)优先。 |
注释
存在用于高级方案的其他内部平台选项(例如测试主机控制器的命名管道超时)。 这些选项适用于基础结构使用,此处未介绍。
例:
{
"platformOptions": {
"resultDirectory": "../../TestResults",
"exitProcessOnUnhandledException": false
}
}
testconfig.json 中的环境变量
注释
从版本 2.3.0 开始,MTP 中可用。
该 environmentVariables 部分在开始之前为测试过程设置环境变量。 对每个变量使用字符串值。
{
"environmentVariables": {
"DOTNET_ENVIRONMENT": "Development",
"FEATURE_FLAG": "true"
}
}
testconfig.json 中的 CLI 选项
在 MTP 2.3.0 之前,扩展功能(如崩溃转储、挂起转储、重试、TRX 报告和代码覆盖率)无法通过 testconfig.json 配置。 这些功能仅通过命令行参数进行配置。
从 MTP 2.3.0 开始,MTP 可以通过 IConfiguration 从 testconfig.json 读取 CLI 选项。 此支持包括对扩展选项的支持,因此,对于那些不想在每次运行时都通过命令行传递的选项,你可以使用 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 选项。 从 MTP 2.3.0 开始,MTP 可以从 testconfig.json读取 CLI 选项。 |
DataCollectionRunSettings(归咎) |
CLI 选项 | 使用 --crashdump 和 --hangdump CLI 选项。 从 MTP 2.3.0 开始,MTP 可以从 testconfig.json读取 CLI 选项。 请参阅崩溃和挂起转储。 |
DataCollectionRunSettings (覆盖范围) |
CLI 选项 | 使用--coverage命令行界面选项。 从 MTP 2.3.0 开始,MTP 可以从 testconfig.json读取 CLI 选项。 请参阅 代码覆盖率。 |
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_FILE_PREFIX 环境变量
日志文件名的前缀。 默认值为 "log_". 匹配 --diagnostic-file-prefix 命令行选项。
注释
从版本 2.3.0 开始,MTP 中提供了此环境变量名称。 旧 TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_FILEPREFIX 版环境变量仍遵循向后兼容性,但已弃用,并可能在将来的主版本中删除。 设置这两个变量时, TESTINGPLATFORM_DIAGNOSTIC_FILE_PREFIX 优先。
TESTINGPLATFORM_DIAGNOSTIC_SYNCHRONOUS_WRITE 环境变量
强制内置的文件记录器以同步方式写入日志。 对于在进程崩溃时不想丢失任何日志条目的场景非常有用。 这会降低测试执行速度。 匹配 --diagnostic-synchronous-write 命令行选项。
注释
从版本 2.3.0 开始,MTP 中提供了此环境变量名称。 旧 TESTINGPLATFORM_DIAGNOSTIC_FILELOGGER_SYNCHRONOUSWRITE 版环境变量仍遵循向后兼容性,但已弃用,并可能在将来的主版本中删除。 设置这两个变量时, TESTINGPLATFORM_DIAGNOSTIC_SYNCHRONOUS_WRITE 优先。
TESTINGPLATFORM_EXITCODE_IGNORE 环境变量
要忽略的、以分号分隔的退出代码列表。 当退出代码被忽略时,进程将改为返回 0。 例如, TESTINGPLATFORM_EXITCODE_IGNORE=2;8 忽略测试失败和未运行测试的方案。
TESTINGPLATFORM_NOBANNER 环境变量
当设置为 1 或 true 时,将不显示启动横幅、版权信息和遥测横幅。 等效于 --no-banner 命令行选项。 环境变量 DOTNET_NOLOGO 具有相同的效果。
NO_COLOR 环境变量
如果设置为任何非空值,则禁止显示所有 ANSI 颜色输出。 MTP 遵循该 NO_COLOR 约定。
注释
从版本 2.3.0 开始,MTP 中可用。
DOTNET_NOLOGO 环境变量
当设置为 1 或 true 时,将不显示启动横幅、版权信息和遥测横幅。 这是标准.NET CLI 环境变量,MTP 遵循此标准。 另请参阅 TESTINGPLATFORM_NOBANNER。
TESTINGPLATFORM_WAIT_ATTACH_DEBUGGER 环境变量
当设置为 1 时,测试进程会在启动时暂停,并在继续之前等待调试器附加。 等效于 --debug 命令行选项。 浏览器平台上不受支持。
注释
从版本 1.6.0 开始,MTP 中提供了此环境变量。
TESTINGPLATFORM_LAUNCH_ATTACH_DEBUGGER 环境变量
当设置为 1 时,测试进程会在启动时调用 Debugger.Launch(),这会提示系统启动即时调试器并将其附加到该进程。 使用此变量调试启动时间问题(例如,服务器模式握手),这些问题发生在你可以手动附加之前。 在非Windows平台上,行为取决于配置的 JIT 调试器。
注释
从版本 1.6.0 开始,MTP 中提供了此环境变量。
注释
与诊断相关的环境变量优先于其相应的 --diagnostic-* 命令行参数。