Microsoft.Testing.Platform (MTP) 設定配置

MTP 支援使用設定檔與環境變數來配置測試平台的行為。 本文說明可用來設定測試平臺的組態設定。

testconfig.json

測試平臺會使用名為 [appname].testconfig.json 組態檔來設定測試平台的行為。 testconfig.json 檔案是 JSON 檔案,其中包含測試平臺的組態設定。

testconfig.json 檔案具有下列結構:

{
    "platformOptions": {
        "resultDirectory": "./TestResults"
    }
}

平臺會自動偵測並載入位於測試項目的輸出目錄中的 [appname].testconfig.json 檔案(靠近可執行檔)。

使用 Microsoft.Testing.Platform.MSBuild時,您只要建立會自動重新命名為 [appname] .testconfig.jsontestconfig.json 檔案,並移至測試專案的輸出目錄。

從 MTP 1.5 開始,你可以用命令列參數 --config-file 來指定 testconfig.json的路徑。 此檔案的優先順序高於 [appname].testconfig.json 檔案。

備註

[appname].testconfig.json 檔案將會在後續組建上覆寫。

使用集中管理的 testconfig.json

如果你想讓單一 testconfig.json 在多個測試專案間共享,你可以把它放在中央位置,並透過 --config-file傳遞。 當 MSBuild 可用(例如 dotnet testdotnet run或 ),你可以使用 TestingPlatformCommandLineArguments MSBuild 屬性自動傳遞參數。 將此設定加入 Directory.Build.props 於倉庫根目錄中,確保所有測試專案使用相同的設定:

<PropertyGroup>
  <TestingPlatformCommandLineArguments>
    $(TestingPlatformCommandLineArguments) --config-file $(MSBuildThisFileDirectory)testconfig.json
  </TestingPlatformCommandLineArguments>
</PropertyGroup>

配置優先順序

當同一設定可以用多種方式指定時,MTP 會依以下順序解決(先配對者獲勝):

  1. 命令列參數(例如, --results-directory
  2. 環境變數
  3. testconfig.json 設定
  4. 內建預設值

平台選項

platformOptions 檔案的部分負責設定測試平台的核心行為。 下表列出所有支援的平台選項:

入口 預設值 說明
resultDirectory TestResults 測試結果放置的目錄。 可以是相對路徑(從目前工作目錄解析而來)或絕對路徑。 --results-directory命令列選項優先。
exitProcessOnUnhandledException false 當設定為 true時,測試主機程序會在未處理的例外時立即退出,而非允許優雅關機。 TESTINGPLATFORM_EXIT_PROCESS_ON_UNHANDLED_EXCEPTION環境變數(值10)優先。

備註

還有額外的內部平台選項用於進階情境(例如測試主機控制器的命名管路逾時)。 這些選項僅用於基礎建設用途,並未涵蓋於此處。

範例:

{
  "platformOptions": {
    "resultDirectory": "../../TestResults",
    "exitProcessOnUnhandledException": false
  }
}

擴充功能選項僅限於 CLI 中使用

擴充功能(例如 崩潰傾印停止回應傾印重試TRX 報告程式碼涵蓋率無法透過 testconfig.json 進行設定。 這些功能完全透過命令列參數來配置。

欲了解完整的命令列選項參考,請參閱 MTP CLI 選項參考

測試框架專屬設定

測試框架可以在 testconfig.json 檔案中定義自己的設定區段。 請參考你測試框架的文件:

範例 testconfig.json

以下範例展示了一個 testconfig.json 檔案,用以配置平台選項和 MSTest 設定:

{
  "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 等價物 Notes
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 (報導範圍) 僅限命令列介面 使用 --coverage 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 環境變數

定義診斷啟用時的冗長程度。 可用的值為 TraceDebugInformationWarningErrorCritical

TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_DIRECTORY 環境變數

診斷日誌的輸出目錄。 若未指定,該檔案會在預設 的 TestResults 目錄中產生。

TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_FILEPREFIX 環境變數

記錄檔名稱的前置詞。 預設為 "log_"

TESTINGPLATFORM_DIAGNOSTIC_FILELOGGER_SYNCHRONOUSWRITE 環境變數

強制內建檔案記錄器同步寫入記錄。 適用於如果程序崩潰時,您不想遺失任何日誌條目的情況。 這會讓測試執行變慢。

TESTINGPLATFORM_EXITCODE_IGNORE 環境變數

一個以分號分隔的出口代碼清單,可以忽略。 當退出代碼被忽略時,程序會返回 0 。 例如,忽略 TESTINGPLATFORM_EXITCODE_IGNORE=2;8 測試失敗和未執行測試的情境。

備註

與診斷相關的環境變數優先於其對應 --diagnostic-* 的命令列參數。

另請參閱