

亚马逊 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>

查看操作结果时，您可以调整 CodeCatalyst 通过配置`IncludePaths`和生成的报告列表`ExcludePaths`。
+ 用于`IncludePaths`指定搜索报告时 CodeCatalyst 要包含的文件和文件路径。例如，如果您指定`"/test/report/*"`，则会在操作使用的整个构建映像中 CodeCatalyst 搜索该`/test/report/`目录。当它找到该目录时， CodeCatalyst 然后在该目录中查找报告。
**注意**  
对于手动配置的报告，`IncludePaths` 必须是与单个文件匹配的 glob 模式。
+ 用于`ExcludePaths`指定搜索报告时 CodeCatalyst 要排除的文件和文件路径。例如，如果您指定`"/test/reports/**/*"`，则 CodeCatalyst不会在`/test/reports/`目录中搜索文件。要忽略某个目录中的所有文件，请使用 `**/*` glob 模式。

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


| 模式 | 说明 | 
| --- | --- | 
|  `*.*`  |  匹配当前目录中所有包含点的对象名称  | 
|  `*.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 按如下方式解释全局模式：
+ 斜杠（`/`）字符用于分隔文件路径中的目录。
+ 星号 (`*`) 字符与不跨越文件夹边界的名称组分的零个或多个字符匹配。
+ 双星号 (`**`) 与所有目录中名称组分的零个或多个字符匹配。

**注意**  
`ExcludePaths` 优先于 `IncludePaths`。如果 `IncludePaths` 和 `ExcludePaths` 都包含同一个文件夹，则不会扫描该文件夹以获取报告。