

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

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

# 使用工作流程進行測試
<a name="test-workflow-actions"></a>

在 CodeCatalyst 中，您可以執行測試做為不同工作流程動作的一部分，例如建置和測試。這些工作流程動作都可以產生品質報告。*測試動作*是一種工作流程動作，可產生測試、程式碼涵蓋範圍、軟體合成分析和靜態分析報告。這些報告會顯示在 CodeCatalyst 主控台中。

**Topics**
+ [品質報告類型](#test-reporting)
+ [新增測試動作](test-add-action.md)
+ [檢視測試動作的結果](test-view-results.md)
+ [在 動作中略過失敗的測試](test.error-handling.md)
+ [與 universal-test-runner 整合](test.universal-test-runner.md)
+ [在 動作中設定品質報告](test-config-action.md)
+ [測試的最佳實務](test-best-practices.md)
+ [支援的 SARIF 屬性](test.sarif.md)

## 品質報告類型
<a name="test-reporting"></a>

Amazon CodeCatalyst 測試動作支援下列類型的品質報告。如需如何在 YAML 中格式化這些報告的範例，請參閱 [品質報告 YAML 範例](test-config-action.md#test.success-criteria-example)。

**Topics**
+ [測試報告](#test-reports)
+ [程式碼涵蓋範圍報告](#test-code-coverage-reports)
+ [軟體合成分析報告](#test-sca-reports)
+ [靜態分析報告](#test-static-analysis-reports)

### 測試報告
<a name="test-reports"></a>

在 CodeCatalyst 中，您可以設定建置期間執行的單元測試、整合測試和系統測試。然後CodeCatalyst 可以建立包含測試結果的報告。

您可以使用測試報告來協助疑難排解測試的問題。如果您有來自多個組建的許多測試報告，您可以使用測試報告來檢視失敗率，以協助您最佳化組建。

您可以使用下列測試報告檔案格式：
+ 小黃瓜 JSON (.json)
+ JUnit XML (.xml)
+ NUnit XML (.xml)
+ NUnit3 XML (.xml)
+ TestNG XML (.xml)
+ Visual Studio TRX (.trx、.xml)

### 程式碼涵蓋範圍報告
<a name="test-code-coverage-reports"></a>

在 CodeCatalyst 中，您可以為測試產生程式碼涵蓋範圍報告。CodeCatalyst 提供下列程式碼涵蓋範圍指標：

線路涵蓋範圍  
測量您的測試涵蓋多少陳述式。陳述式是單一指示，不包含註解。  
`line coverage = (total lines covered)/(total number of lines)`

分支涵蓋範圍  
測量您的測試在控制結構的每個可能分支中涵蓋多少分支，例如 `if`或 `case`陳述式。  
`branch coverage = (total branches covered)/(total number of branches)`

支援下列程式碼涵蓋範圍報告檔案格式：
+ JaCoCo XML (.xml)
+ SimpleCov JSON （由 [simplecov](https://github.com/simplecov-ruby/simplecov) 產生，而非 [simplecov-json](https://github.com/vicentllongo/simplecov-json)， .json)
+ Clover XML （第 3 版，.xml)
+ Cobertura XML (.xml)
+ LCOV (.info)

### 軟體合成分析報告
<a name="test-sca-reports"></a>

在 CodeCatalyst 中，您可以使用軟體合成分析 (SCA) 工具來分析應用程式的元件，並檢查已知的安全漏洞。您可以探索並剖析 SARIF 報告，其中詳細說明具有不同嚴重性的漏洞，以及修正這些漏洞的方法。從最嚴重到最不嚴重的有效嚴重性值為：`CRITICAL`、`HIGH`、`MEDIUM`、`LOW`、`INFORMATIONAL`。

支援下列 SCA 報告檔案格式：
+ SARIF (.sarif、.json)

### 靜態分析報告
<a name="test-static-analysis-reports"></a>

您可以使用靜態分析 (SA) 報告來識別來源層級程式碼瑕疵。在 CodeCatalyst 中，您可以產生 SA 報告，以協助在部署程式碼之前解決問題。這些問題包括錯誤、安全漏洞、品質問題和其他漏洞。從最嚴重到最不嚴重的有效嚴重性值為：`CRITICAL`、`HIGH`、`LOW`、 `MEDIUM`和 `INFORMATIONAL`。

CodeCatalyst 提供下列 SA 指標：

錯誤  
識別在原始程式碼中找到的許多可能錯誤。這些錯誤可能包括與記憶體安全相關的問題。以下是錯誤的範例。  

```
// The while loop will inadvertently index into array x out-of-bounds
int x[64];
while (int n = 0; n <= 64; n++) {
  x[n] = 0;
}
```

安全漏洞  
識別在原始程式碼中找到的幾個可能的安全漏洞。這些安全漏洞可能包括以純文字儲存秘密字符等問題。

品質問題  
識別來源碼中發現的許多可能品質問題。這些品質問題可能包括有關樣式慣例的問題。以下是品質問題的範例。  

```
// The function name doesn't adhere to the style convention of camelCase
int SUBTRACT(int x, int y) {
  return x-y
}
```

其他漏洞  
識別在原始程式碼中找到的許多可能的其他漏洞。

CodeCatalyst 支援下列 SA 報告檔案格式：
+ PyLint (.py)
+ ESLint (.js、.jsx、.ts、.tsx)
+ SARIF (.sarif、.json)

# 新增測試動作
<a name="test-add-action"></a>

使用下列程序將測試動作新增至 CodeCatalyst 工作流程。

------
#### [ Visual ]

**使用視覺化編輯器新增測試動作**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選，或依工作流程名稱或狀態進行篩選。

1. 選擇**編輯**。

1. 選擇**視覺化**。

1. 選擇**動作**。

1. 在**動作**中，選擇**測試**。

1. 在**輸入**和**組態**索引標籤中，根據您的需求完成欄位。如需每個欄位的說明，請參閱 [建置和測試動作 YAML](build-action-ref.md)。此參考提供每個欄位 （和對應的 YAML 屬性值） 的詳細資訊，如 YAML 和視覺化編輯器所示。

1. （選用） 選擇**驗證**以在遞交之前驗證工作流程的 YAML 程式碼。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------
#### [ YAML ]

**使用 YAML 編輯器新增建置動作**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選，或依工作流程名稱或狀態進行篩選。

1. 選擇**編輯**。

1. 選擇 **YAML**。

1. 選擇**動作**。

1. 在**動作**中，選擇**測試**。

1. 根據您的需求修改 YAML 程式碼中的屬性。中會提供每個可用屬性的說明[建置和測試動作 YAML](build-action-ref.md)。

1. （選用） 選擇**驗證**以在遞交之前驗證工作流程的 YAML 程式碼。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------

## 測試動作定義
<a name="test-add-action-definition"></a>

測試動作定義為工作流程定義檔案內的一組 YAML 屬性。如需這些屬性的詳細資訊，請參閱 [建置和測試動作 YAML](build-action-ref.md) 中的 [工作流程 YAML 定義](workflow-reference.md)。

# 檢視測試動作的結果
<a name="test-view-results"></a>

使用下列指示來檢視測試動作的結果，包括產生的日誌、報告和變數。

**檢視測試動作的結果**

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選，或依工作流程名稱或狀態進行篩選。

1. 在工作流程圖表中，選擇測試動作的名稱，例如 **Test**。

1. 若要檢視動作產生的日誌，請選擇**日誌**。隨即顯示各種動作階段的日誌。您可以視需要展開或摺疊日誌。

1. 若要檢視測試動作產生的測試報告，請選擇**報告**，或在導覽窗格中，選擇**報告**。如需詳細資訊，請參閱[品質報告類型](test-workflow-actions.md#test-reporting)。

1. 若要檢視用於測試動作的組態，請選擇**組態**。如需詳細資訊，請參閱[新增測試動作](test-add-action.md)。

1. 若要檢視測試動作所使用的變數，請選擇**變數**。如需詳細資訊，請參閱[在工作流程中使用變數](workflows-working-with-variables.md)。

# 在 動作中略過失敗的測試
<a name="test.error-handling"></a>

如果您的動作有多個測試命令，您可能想要允許動作中的後續測試命令執行，即使先前的命令失敗。例如，在下列命令中，您可能`test2`想要一律執行，即使 `test1` 故障也一樣。

```
Steps:
- Run: npm install
- Run: npm run test1
- Run: npm run test2
```

一般而言，當步驟傳回錯誤時，Amazon CodeCatalyst 會停止工作流程動作並將其標記為失敗。您可以將錯誤輸出重新導向至 ，以允許動作步驟繼續執行`null`。您可以將 `2>/dev/null`新增至 命令來執行此操作。在此修改中，上述範例會如下所示。

```
Steps:
- Run: npm install
- Run: npm run test1 2>/dev/null
- Run: npm run test2
```

在第二個程式碼片段中，將會接受`npm install`命令的狀態，但`npm run test1`命令傳回的任何錯誤都會遭到忽略。因此會執行 `npm run test2`命令。透過這樣做，無論是否發生錯誤，您都可以一次檢視這兩個報告。

# 與 universal-test-runner 整合
<a name="test.universal-test-runner"></a>

測試動作與開放原始碼命令列工具 整合`universal-test-runner`。 `universal-test-runner`使用[測試執行通訊協定](https://github.com/aws/universal-test-runner/blob/main/protocol/README.md)，針對指定架構中的任何語言執行測試。 `universal-test-runner`支援下列架構：
+ [Gradle](https://gradle.org/)
+ [Jest](https://jestjs.io/)
+ [Maven](https://maven.apache.org/)
+ [pytest](https://pytest.org)
+ [.NET](https://learn.microsoft.com/en-us/dotnet/core/tools/)

`universal-test-runner` 只會安裝在針對測試動作策劃的映像上。如果您要設定一個會使用自訂 Docker Hub 或 Amazon ECR 的測試動作，則您必須手動安裝 `universal-test-runner`，才能啟用進階的測試功能。若要這樣做，請在映像上安裝 Node.js (14 或更高版本)，接著透過 `npm` 使用 shell 命令 `- Run: npm install -g @aws/universal-test-runner` 安裝 `universal-test-runner`。如需透過 shell 命令在容器中安裝 Node.js 的詳細資訊，請參閱[安裝和更新 Node Version Manager](https://github.com/nvm-sh/nvm#install--update-script)。

如需 的詳細資訊`universal-test-runner`，請參閱[什麼是 universal-test-runner？](https://github.com/aws/universal-test-runner#-what-is-universal-test-runner)

------
#### [ Visual ]

**在視覺化編輯器中使用 universal-test-runner**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇工作流程的名稱。

1. 選擇**編輯**。

1. 選擇**視覺化**。

1. 選擇**動作**。

1. 在**動作**中，選擇**測試**。

1. 在**組態**索引標籤上，使用您選擇的支援架構更新範例程式碼，以完成 **Shell 命令**欄位。例如，若要使用支援的架構，您可以使用類似以下的`Run`命令。

   ```
   - Run: run-tests <framework>
   ```

   如果不支援您想要的架構，請考慮提供自訂的轉接器或執行器。如需 **Shell 命令**欄位的說明，請參閱 [Steps](build-action-ref.md#build.configuration.steps)。

1. （選用） 選擇**驗證**以在遞交之前驗證工作流程的 YAML 程式碼。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------
#### [ YAML ]

**在 YAML 編輯器中使用 universal-test-runner**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇工作流程的名稱。

1. 選擇**編輯**。

1. 選擇 **YAML**。

1. 選擇**動作**。

1. 在**動作**中，選擇**測試**。

1. 根據您的需求修改 YAML 程式碼。例如，若要使用支援的架構，您可以使用類似以下的`Run`命令。

   ```
   Configuration:
     Steps:
       - Run: run-tests <framework>
   ```

   如果不支援您想要的架構，請考慮提供自訂的轉接器或執行器。如需 **Steps** 屬性的說明，請參閱 [Steps](build-action-ref.md#build.configuration.steps)。

1. （選用） 選擇**驗證**以在遞交之前驗證工作流程的 YAML 程式碼。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------

# 在 動作中設定品質報告
<a name="test-config-action"></a>

本節說明如何在 動作中設定品質報告。

**Topics**
+ [自動探索和手動報告](#test.auto-discovery)
+ [設定報告的成功條件](#test.success-criteria)
+ [品質報告 YAML 範例](#test.success-criteria-example)

## 自動探索和手動報告
<a name="test.auto-discovery"></a>

啟用自動探索時，CodeCatalyst 會搜尋傳遞至動作的所有輸入，以及動作本身產生的所有檔案，尋找測試、程式碼涵蓋範圍、軟體合成分析 (SCA) 和靜態分析 (SA) 報告。您可以在 CodeCatalyst 中檢視和操作這些報告。

您也可以手動設定要產生哪些報告。您可以指定要產生的報告類型以及檔案格式。如需詳細資訊，請參閱[品質報告類型](test-workflow-actions.md#test-reporting)。

## 設定報告的成功條件
<a name="test.success-criteria"></a>

您可以設定值來決定測試、程式碼涵蓋範圍、軟體合成分析 (SCA) 或靜態分析 (SA) 報告的成功條件。

成功條件是決定報告是否通過或失敗的閾值。CodeCatalyst 會先產生您的報告，可以是測試、程式碼涵蓋範圍、SCA 或 SA 報告，然後將成功條件套用至產生的報告。然後，它會顯示是否符合成功條件，以及達到多少程度。如果任何報告不符合指定的成功條件，則指定成功條件的 CodeCatalyst 動作會失敗。

例如，當您設定 SCA 報告的成功條件時，從最嚴重到最不嚴重的有效漏洞值為：`CRITICAL`、`HIGH`、`MEDIUM`、`LOW`、、`INFORMATIONAL`。如果您設定條件以`HIGH`嚴重性掃描一個漏洞，如果至少有一個`HIGH`嚴重性漏洞或沒有`HIGH`嚴重性漏洞，但至少一個嚴重性層級較高的漏洞，例如一個`CRITICAL`嚴重性漏洞，則報告將會失敗。

如果您未指定成功條件，則：
+ 根據您的原始報告產生的 CodeCatalyst 報告不會顯示成功條件。
+ 成功條件不會用來判斷相關聯的工作流程動作是否通過或失敗。

------
#### [ Visual ]

**設定成功條件**

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇包含產生報告之動作的工作流程。這是您要套用成功條件的報告。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選，或依工作流程名稱或狀態進行篩選。

1. 選擇**編輯**。

1. 選擇**視覺化**。

1. 在工作流程圖表中，選擇您已設定產生 CodeCatalyst 報告的動作。

1. 選擇 **Output (輸出)** 索引標籤。

1. 在**自動探索報告**或**手動設定報告**下，選擇**成功條件**。

   成功條件隨即出現。根據您先前的選擇，您可能會看到下列任何或所有選項：

   **通過率**

   指定測試報告中必須傳遞的測試百分比，相關 CodeCatalyst 報告才能標示為已傳遞。有效值包括小數位數。例如：`50`、`60.5`。通過率條件僅適用於測試報告。如需測試報告的詳細資訊，請參閱 [測試報告](test-workflow-actions.md#test-reports)。

   **線路涵蓋範圍**

   指定程式碼涵蓋範圍報告中必須涵蓋的行百分比，以便將關聯的 CodeCatalyst 報告標示為已傳遞。有效值包括小數位數。例如：`50`、`60.5`。明細涵蓋範圍條件只會套用至程式碼涵蓋範圍報告。如需程式碼涵蓋範圍報告的詳細資訊，請參閱 [程式碼涵蓋範圍報告](test-workflow-actions.md#test-code-coverage-reports)。

   **分支涵蓋範圍**

   指定程式碼涵蓋範圍報告中必須涵蓋的分支百分比，以便將關聯的 CodeCatalyst 報告標示為已傳遞。有效值包括小數位數。例如：`50`、`60.5`。分支涵蓋範圍條件僅適用於程式碼涵蓋範圍報告。如需程式碼涵蓋範圍報告的詳細資訊，請參閱 [程式碼涵蓋範圍報告](test-workflow-actions.md#test-code-coverage-reports)。

   **漏洞 (SCA)**

   針對要標記為已傳遞的相關聯 CodeCatalyst 報告，指定 SCA 報告中允許的漏洞數量和嚴重性上限。若要指定漏洞，您必須指定：
   + 您要包含在計數中的漏洞最低嚴重性。從最嚴重到最不嚴重的有效值為：`CRITICAL`、`HIGH`、`MEDIUM`、`LOW`、`INFORMATIONAL`。

     例如，如果您選擇 `HIGH`，則 `HIGH`和 `CRITICAL` 漏洞將會很高。
   + 您想要允許之指定嚴重性的漏洞數量上限。超過此數字會導致 CodeCatalyst 報告標示為失敗。有效值為整數。

   漏洞條件只會套用至 SCA 報告。如需 SCA 報告的詳細資訊，請參閱 [軟體合成分析報告](test-workflow-actions.md#test-sca-reports)。

   **錯誤**

   針對要標記為已傳遞的相關聯 CodeCatalyst 報告，指定 SA 報告中允許的錯誤數量和嚴重性上限。若要指定錯誤，您必須指定：
   + 您要包含在計數中錯誤的最低嚴重性。從最嚴重到最不嚴重的有效值為：`CRITICAL`、`HIGH`、`MEDIUM`、`LOW`、`INFORMATIONAL`。

     例如，如果您選擇 `HIGH`，則 `HIGH`和 `CRITICAL` 錯誤將會很高。
   + 您想要允許之指定嚴重性的錯誤數目上限。超過此數字會導致 CodeCatalyst 報告標示為失敗。有效值為整數。

   錯誤條件只會套用至 PyLint 和 ESLint SA 報告。如需 SA 報告的詳細資訊，請參閱 [靜態分析報告](test-workflow-actions.md#test-static-analysis-reports)。

   **安全漏洞**

   針對要標記為已傳遞的相關聯 CodeCatalyst 報告，指定 SA 報告中允許的安全漏洞數量和嚴重性上限。若要指定安全漏洞，您必須指定：
   + 您要包含在計數中的安全漏洞的最低嚴重性。從最嚴重到最不嚴重的有效值為：`CRITICAL`、`HIGH`、`MEDIUM`、`LOW`、`INFORMATIONAL`。

     例如，如果您選擇 `HIGH`，則 `HIGH`和 `CRITICAL` 安全漏洞將會很高。
   + 您想要允許之指定嚴重性的安全漏洞數量上限。超過此數字會導致 CodeCatalyst 報告標示為失敗。有效值為整數。

   安全漏洞條件僅適用於 PyLint 和 ESLint SA 報告。如需 SA 報告的詳細資訊，請參閱 [靜態分析報告](test-workflow-actions.md#test-static-analysis-reports)。

   **品質問題**

   指定 SA 報告中允許將相關聯 CodeCatalyst 報告標示為已傳遞的品質問題數量和嚴重性上限。若要指定品質問題，您必須指定：
   + 您要包含在計數中品質問題的最低嚴重性。從最嚴重到最不嚴重的有效值為：`CRITICAL`、`HIGH`、`MEDIUM`、`LOW`、`INFORMATIONAL`。

     例如，如果您選擇 `HIGH`，則 `HIGH`和`CRITICAL`品質問題將會很高。
   + 您想要允許之指定嚴重性的品質問題數量上限。超過此數字會導致 CodeCatalyst 報告標示為失敗。有效值為整數。

   品質問題條件僅適用於 PyLint 和 ESLint SA 報告。如需 SA 報告的詳細資訊，請參閱 [靜態分析報告](test-workflow-actions.md#test-static-analysis-reports)。

1. 選擇 **Commit** (遞交)。

1. 執行工作流程，讓 CodeCatalyst 將成功條件套用至原始報告，並重新產生包含成功條件資訊的相關聯 CodeCatalyst 報告。如需詳細資訊，請參閱[手動啟動工作流程執行](workflows-manually-start.md)。

------
#### [ YAML ]

**設定成功條件**

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇包含產生報告之動作的工作流程。這是您要套用成功條件的報告。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選，或依工作流程名稱或狀態進行篩選。

1. 選擇**編輯**。

1. 選擇 **YAML**。

1. 在工作流程圖表中，選擇您已設定產生 CodeCatalyst 報告的動作。

1. 在詳細資訊窗格中，選擇**輸出**索引標籤。

1. 在 動作、 `AutoDiscoverReports`區段或 `Reports`區段中，新增 **SuccessCriteria** 屬性，以及 `PassRate`、`LineCoverage`、`BranchCoverage`、`Vulnerabilities``StaticAnalysisBug`、 `StaticAnalysisSecurity`和 `StaticAnalysisQuality` 屬性。

   如需每個屬性的說明，請參閱 [建置和測試動作 YAML](build-action-ref.md)。

1. 選擇 **Commit** (遞交)。

1. 執行工作流程，讓 CodeCatalyst 將成功條件套用至原始報告，並使用包含的成功條件資訊重新產生相關聯的 CodeCatalyst 報告。如需啟動工作流程的詳細資訊，請參閱 [手動啟動工作流程執行](workflows-manually-start.md)。

------

## 品質報告 YAML 範例
<a name="test.success-criteria-example"></a>

 下列範例示範如何手動設定四個報告：測試報告、程式碼涵蓋範圍報告、軟體合成分析報告，以及靜態分析報告。

```
Reports:
  MyTestReport:
    Format: JUNITXML
    IncludePaths:
      - "*.xml"
    ExcludePaths:
      - report1.xml
      SuccessCriteria:
        PassRate: 90
  MyCoverageReport:
    Format: CLOVERXML
    IncludePaths:
      - output/coverage/jest/clover.xml
      SuccessCriteria:
        LineCoverage: 75
        BranchCoverage: 75
  MySCAReport:
    Format: SARIFSCA
    IncludePaths:
      - output/sca/reports.xml
      SuccessCriteria:
        Vulnerabilities:
          Number: 5
          Severity: HIGH
  MySAReport:
    Format: ESLINTJSON
    IncludePaths:
      - output/static/eslint.xml
      SuccessCriteria:
        StaticAnalysisBug:
          Number: 10
          Severity: MEDIUM
        StaticAnalysisSecurity:
          Number: 5
          Severity: CRITICAL
        StaticAnalysisQuality:
          Number: 0
          Severity: INFORMATIONAL
```

# 測試的最佳實務
<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`包含相同的資料夾，則不會掃描該資料夾是否有報告。

# 支援的 SARIF 屬性
<a name="test.sarif"></a>

靜態分析結果交換格式 (SARIF) 是一種輸出檔案格式，可用於 Amazon CodeCatalyst 中的軟體合成分析 (SCA) 和靜態分析報告。下列範例示範如何在靜態分析報告中手動設定 SARIF：

```
Reports:
MySAReport:
Format: SARIFSA
IncludePaths:
    - output/sa_report.json
SuccessCriteria:
    StaticAnalysisFinding:
    Number: 25
    Severity: HIGH
```

CodeCatalyst 支援下列 SARIF 屬性，可用於最佳化分析結果在報告中的顯示方式。

**Topics**
+ [`sarifLog` 物件](#test.sarif.sarifLog)
+ [`run` 物件](#test.sarif.run)
+ [`toolComponent` 物件](#test.sarif.toolComponent)
+ [`reportingDescriptor` 物件](#test.sarif.reportingDescriptor)
+ [`result` 物件](#test.sarif.result)
+ [`location` 物件](#test.sarif.location)
+ [`physicalLocation` 物件](#test.sarif.physicalLocation)
+ [`logicalLocation` 物件](#test.sarif.logicalLocation)
+ [`fix` 物件](#test.sarif.fix)

## `sarifLog` 物件
<a name="test.sarif.sarifLog"></a>


| 名稱 | 必要 | 描述 | 
| --- | --- | --- | 
|  `$schema`  |  是  |  [2.1.0](https://json.schemastore.org/sarif-2.1.0.json) 版 SARIF JSON 結構描述的 URI。  | 
|  `version`  |  是  |  CodeCatalyst 僅支援 SARIF 2.1.0 版。  | 
|  `runs[]`  |  是  |  SARIF 檔案包含一或多個執行的陣列，每個都代表分析工具的單一執行。  | 

## `run` 物件
<a name="test.sarif.run"></a>


| 名稱 | 必要 | 描述 | 
| --- | --- | --- | 
|  `tool.driver`  |  是  |  描述分析工具的`toolComponent`物件。  | 
|  `tool.name`  |  否  |  屬性，指出用於執行分析的工具名稱。  | 
|  `results[]`  |  是  |  CodeCatalyst 上顯示的分析工具結果。  | 

## `toolComponent` 物件
<a name="test.sarif.toolComponent"></a>


| 名稱 | 必要 | 描述 | 
| --- | --- | --- | 
|  `name`  |  是  |  分析工具的名稱。  | 
|  `properties.artifactScanned`  |  否  |  工具分析的成品總數。  | 
|  `rules[]`  |  是  |  代表規則的`reportingDescriptor`物件陣列。根據這些規則，分析工具會在分析的程式碼中找到問題。  | 

## `reportingDescriptor` 物件
<a name="test.sarif.reportingDescriptor"></a>


| 名稱 | 必要 | 描述 | 
| --- | --- | --- | 
|  `id`  |  是  |  用於參考問題清單之規則的唯一識別符。 長度上限：1，024 個字元  | 
|  `name`  |  否  |  規則的顯示名稱。 長度上限：1，024 個字元  | 
|  `shortDescription.text`  |  否  |  規則的簡短描述。 長度上限：3，000 個字元  | 
|  `fullDescription.text`  |  否  |  規則的完整描述。 長度上限：3，000 個字元  | 
|  `helpUri`  |  否  |  可以當地語系化的字串，包含規則之主要文件的絕對 URI。 長度上限：3，000 個字元  | 
|  `properties.unscore`  |  否  |  指出掃描問題清單是否已評分的旗標。  | 
|  `properties.score.severity`  |  否  |  指定調查結果嚴重性層級的一組固定字串。 長度上限：1，024 個字元  | 
|  `properties.cvssv3_baseSeverity`  |  否  |  Common [Vulnerability Scoring System v3.1](https://www.first.org/cvss/v3.1/specification-document) 的定性嚴重性評分。  | 
|  `properties.cvssv3_baseScore`  |  否  |  CVSS v3 基本分數範圍為 [0.0 - 10.0](https://nvd.nist.gov/vuln-metrics/cvss)。  | 
|  `properties.cvssv2_severity`  |  否  |  如果 CVSS v3 值不可用，CodeCatalyst 會搜尋 CVSS v2 值。  | 
|  `properties.cvssv2_score`  |  否  |  CVSS v2 基本分數範圍為 [0.0 - 10.0](https://nvd.nist.gov/vuln-metrics/cvss)。  | 
|  `properties.severity`  |  否  |  指定調查結果嚴重性層級的一組固定字串。 長度上限：1，024 個字元  | 
|  `defaultConfiguration.level`  |  否  |  規則的預設嚴重性。  | 

## `result` 物件
<a name="test.sarif.result"></a>


| 名稱 | 必要 | 描述 | 
| --- | --- | --- | 
|  `ruleId`  |  是  |  用於參考問題清單之規則的唯一識別符。 長度上限：1，024 個字元  | 
|  `ruleIndex`  |  是  |  工具元件 中相關聯規則的索引`rules[]`。  | 
|  `message.text`  |  是  |  說明結果並顯示每個問題清單訊息的訊息。 長度上限：3，000 個字元  | 
|  `rank`  |  否  |  包含 0.0 到 100.0 之間的值，代表結果的優先順序或重要性。此縮放值 0.0 為最低優先順序，100.0 為最高優先順序。  | 
|  `level`  |  否  |  結果的嚴重性。 長度上限：1，024 個字元  | 
|  `properties.unscore`  |  否  |  指出掃描問題清單是否已評分的旗標。  | 
|  `properties.score.severity`  |  否  |  指定調查結果嚴重性層級的一組固定字串。 長度上限：1，024 個字元  | 
|  `properties.cvssv3_baseSeverity`  |  否  |  Common [Vulnerability Scoring System v3.1](https://www.first.org/cvss/v3.1/specification-document) 的定性嚴重性評分。  | 
|  `properties.cvssv3_baseScore`  |  否  |  CVSS v3 基本分數範圍為 [0.0 - 10.0](https://nvd.nist.gov/vuln-metrics/cvss)。  | 
|  `properties.cvssv2_severity`  |  否  |  如果 CVSS v3 值不可用，CodeCatalyst 會搜尋 CVSS v2 值。  | 
|  `properties.cvssv2_score`  |  否  |  CVSS v2 基本分數範圍為 [0.0 - 10.0](https://nvd.nist.gov/vuln-metrics/cvss)。  | 
|  `properties.severity`  |  否  |  指定調查結果嚴重性層級的一組固定字串。 長度上限：1，024 個字元  | 
|  `locations[]`  |  是  |  偵測到結果的一組位置。除非問題只能透過在每個指定位置進行變更來修正，否則只能包含一個位置。CodeCatalyst 會使用位置陣列中的第一個值來註釋結果。 `location` 物件數量上限：10  | 
|  `relatedLocations[]`  |  否  |  調查結果中其他位置參考的清單。 `location` 物件數量上限：50  | 
|  `fixes[]`  |  否  |  代表掃描工具所提供建議的`fix`物件陣列。CodeCatalyst 使用`fixes`陣列中的第一個建議。  | 

## `location` 物件
<a name="test.sarif.location"></a>


| 名稱 | 必要 | 描述 | 
| --- | --- | --- | 
|  `physicalLocation`  |  是  |  識別成品和區域。  | 
|  `logicalLocations[]`  |  否  |  名稱描述的一組位置，不參考成品。  | 

## `physicalLocation` 物件
<a name="test.sarif.physicalLocation"></a>


| 名稱 | 必要 | 描述 | 
| --- | --- | --- | 
|  `artifactLocation.uri`  |  是  |  指出成品位置的 URI，通常是在儲存庫中或在建置期間產生的檔案。  | 
|  `fileLocation.uri`  |  否  |  指示檔案位置的備用 URI。如果 `artifactLocation.uri`傳回空白，則會使用此項目。  | 
|  `region.startLine`  |  是  |  區域中第一個字元的行號。  | 
|  `region.startColumn`  |  是  |  區域中第一個字元的資料欄編號。  | 
|  `region.endLine`  |  是  |  區域中最後一個字元的行號。  | 
|  `region.endColumn`  |  是  |  區域中最後一個字元的資料欄編號。  | 

## `logicalLocation` 物件
<a name="test.sarif.logicalLocation"></a>


| 名稱 | 必要 | Description | 
| --- | --- | --- | 
|  `fullyQualifiedName`  |  否  |  描述結果位置的其他資訊。 長度上限：1，024 個字元  | 

## `fix` 物件
<a name="test.sarif.fix"></a>


| 名稱 | 必要 | Description | 
| --- | --- | --- | 
|  `description.text`  |  否  |  顯示每個問題清單建議的訊息。 長度上限：3，000 個字元  | 
|  `artifactChanges.[0].artifactLocation.uri`  |  否  |  URI 指出需要更新之成品的位置。  | 