

Amazon CodeCatalyst 不再向新客戶開放。現有客戶可以繼續正常使用該服務。如需詳細資訊，請參閱[如何從 CodeCatalyst 遷移](migration.md)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 測試的最佳實務
<a name="test-best-practices"></a>

使用 CodeCatalyst 提供的測試功能時，建議您遵循這些最佳實務。

**Topics**
+ [自動探索](#test.best-auto-discovery)
+ [成功條件](#test.best-success-criteria)
+ [包含/排除路徑](#test.best-include-exclude)

## 自動探索
<a name="test.best-auto-discovery"></a>

在 CodeCatalyst 中設定動作時，自動探索可讓您自動探索各種工具的輸出，例如 JUnit 測試報告，並從中產生相關的 CodeCatalyst 報告。即使探索輸出的名稱或路徑變更，自動探索也有助於確保報告持續產生。新增新檔案時，CodeCatalyst 會自動探索它們並產生相關報告。不過，如果您使用自動探索，請務必考慮此功能的下列部分層面：
+ 當您在動作中啟用自動探索時，所有自動探索到的相同類型報告都會共用相同的成功條件。例如，共用條件，例如最低通過率，會套用至所有自動探索的測試報告。如果您需要相同類型的報告不同條件，則必須明確設定這些報告。
+ 自動探索也可以找到您的相依性產生的報告，如果設定成功條件，則這些報告上的 動作可能會失敗。您可以透過更新排除路徑組態來解決此問題。
+ 自動探索不保證每次都會產生相同的報告清單，因為它會在執行時間掃描動作。如果您希望一律產生特定報告，您應該明確設定報告。例如，如果測試在您的建置中停止執行，則測試架構不會產生任何輸出，因此不會產生任何測試報告，而且動作可能會成功。如果您希望動作的成功取決於該特定測試，則必須明確設定該報告。

**提示**  
開始使用新的或現有的專案時，請對整個專案目錄 （包括 `**/*`) 使用自動探索。這會調用專案中所有檔案的報告產生，包括子目錄中的檔案。

如需詳細資訊，請參閱[在 動作中設定品質報告](test-config-action.md)。

## 成功條件
<a name="test.best-success-criteria"></a>

您可以設定成功條件，在報告上強制執行品質閾值。例如，如果自動探索兩個程式碼涵蓋範圍報告，一個包含 80% 的涵蓋範圍，另一個包含 60% 的涵蓋範圍，您有下列選項：
+ 將線路涵蓋範圍的自動探索成功條件設定為 80%。這會導致第一個報告通過，而第二個報告失敗，這會導致整體動作失敗。若要解除封鎖工作流程，請將新測試新增至您的專案，直到第二個報告的涵蓋範圍超過 80%。
+ 將行涵蓋範圍的自動探索成功條件設定為 60%。這會導致兩個報告都通過，這會導致動作成功。然後，您可以努力增加第二個報告中的程式碼涵蓋範圍。不過，使用此方法，您無法保證第一個報告中的涵蓋範圍不會低於 80%。
+ 使用視覺化編輯器或為每個報告新增明確的 YAML 區段和路徑，明確設定一個或兩個報告。這可讓您為每個報告設定個別的成功條件和自訂名稱。不過，使用此方法時，如果報告路徑變更，動作可能會失敗。

如需詳細資訊，請參閱[設定報告的成功條件](test-config-action.md#test.success-criteria)。

## 包含/排除路徑
<a name="test.best-include-exclude"></a>

檢閱動作結果時，您可以透過設定 `IncludePaths`和 來調整 CodeCatalyst 產生的報告清單`ExcludePaths`。
+ 使用 `IncludePaths`指定您希望 CodeCatalyst 在搜尋報告時包含的檔案和檔案路徑。例如，如果您指定 `"/test/report/*"`，CodeCatalyst 會搜尋尋找`/test/report/`目錄的動作所使用的整個建置映像。找到該目錄時，CodeCatalyst 接著會尋找該目錄中的報告。
**注意**  
對於手動設定的報告， `IncludePaths` 必須是符合單一檔案的 glob 模式。
+ 使用 `ExcludePaths`指定您希望 CodeCatalyst 在搜尋報告時排除的檔案和檔案路徑。例如，如果您指定 `"/test/reports/**/*"`，CodeCatalyst 不會搜尋 `/test/reports/`目錄中的檔案。若要忽略目錄中的所有檔案，請使用 `**/*` glob 模式。

以下是可能的 glob 模式範例。


| 模式 | Description | 
| --- | --- | 
|  `*.*`  |  符合目前目錄中包含點的所有物件名稱  | 
|  `*.xml`  |  符合目前目錄中以 結尾的所有物件名稱 `.xml`  | 
|  `*.{xml,txt}`  |  符合目前目錄中以 `.xml`或 結尾的所有物件名稱 `.txt`  | 
|  `**/*.xml`  |  比對以 結尾的所有目錄的物件名稱 `.xml`  | 
|  `testFolder`  |  比對名為 的物件`testFolder`，將其視為檔案  | 
|  `testFolder/*`  |  比對 子資料夾中某個層級的物件`testFolder`，例如 `testFolder/file.xml`  | 
|  `testFolder/*/*`  |  從 比對兩個層級的子資料夾中的物件`testFolder`，例如 `testFolder/reportsFolder/file.xml`  | 
|  `testFolder/**`  |  符合資料夾 `testFolder` 以及 `testFolder` 下的檔案，例如 `testFolder/file.xml` 和 `testFolder/otherFolder/file.xml`  | 

CodeCatalyst 會解譯 glob 模式，如下所示：
+ 斜線 (`/`) 字元會分隔檔案路徑中的目錄。
+ 星號 (`*`) 字元符合不超過資料夾邊界之名稱元件的零個或多個字元。
+ 雙星號 (`**`) 會比對所有目錄中名稱元件的零個或多個字元。

**注意**  
`ExcludePaths` 優先於 `IncludePaths`。如果 `IncludePaths`和 都`ExcludePaths`包含相同的資料夾，則不會掃描該資料夾是否有報告。