

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 执行自定义测试环境的最佳实践
<a name="custom-test-environments-best-practices"></a>

 以下主题涵盖了在 Device Farm 中使用自定义测试执行的推荐最佳实践。

**运行配置**
+  尽可能@@ **依靠 Device Farm 托管软件和 API 功能进行运行配置**，而不是通过测试规范文件中的 shell 命令应用类似的配置。这包括测试主机和设备的配置，因为这将在测试主机和设备之间更具可持续性和一致性。

   虽然 Device Farm 鼓励您根据需要自定义测试规范文件以运行测试，但随着时间的推移，随着更多自定义命令的添加，测试规范文件可能会变得难以维护。使用 Device Farm 托管软件（通过类似工具` devicefarm-cli`和中的默认可用工具`$PATH`），并使用托管功能（如[https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_ScheduleRunConfiguration.html#devicefarm-Type-ScheduleRunConfiguration-deviceProxy](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_ScheduleRunConfiguration.html#devicefarm-Type-ScheduleRunConfiguration-deviceProxy)请求参数），通过将维护责任转移给 Device Farm 本身来简化测试规范文件。

**测试规范和测试包代码**
+  **请勿在测试规范文件或测试包代码中使用绝对路径或依赖特定的次要版本**。Device Farm 会将例行更新应用于选定的测试主机及其随附的软件版本。使用特定或绝对路径（例如` /usr/local/bin/python`代替`python`）或要求特定的次要版本（例如Node.js`20.3.1`而不仅仅是` 20`）可能会导致您的测试无法找到所需的可执行文件/文件。

   作为自定义测试执行的一部分，Device Farm 会设置各种环境`$PATH`变量和变量，以确保测试在我们的动态环境中获得一致的体验。有关更多信息，请参阅 [自定义测试环境的环境变量](custom-test-environment-variables.md) 和 [自定义测试环境中支持的软件](custom-test-environments-hosts-software.md)。
+  **在测试运行期间，将生成或复制的文件保存在临时目录中。**今天，我们确保用户在测试执行期间可以访问临时目录 (`/tmp`)（除了托管目录，例如`$DEVICEFARM_LOG_DIR`）。用户有权访问的其他目录可能会随着时间的推移而发生变化，这取决于所使用的服务或操作系统的需要。
+  **将您的测试执行日志保存到`$DEVICEFARM_LOG_DIR`**。这是为您的执行提供的默认构件目录，用于向其中添加执行日志/工件。默认情况下，我们提供的每个[示例测试规范](custom-test-environment-test-spec.md#custom-test-environment-test-spec-example)都使用此目录存放工件。
+  在测试规范`test`阶段**，确保命令在失败时返回非零代码**。我们通过检查该`test`阶段调用的每个 shell 命令的非零退出代码来确定您的执行是否失败。您应确保您的逻辑或测试框架将为所有所需场景返回非零的退出代码，这可能需要额外的配置。

   例如，某些测试框架（例如 JUnit5）不认为零测试运行失败，这会导致即使未执行任何测试也能检测到您的测试已成功运行。以此 JUnit5 为例，您需要指定命令行选项，以确保此场景`--fail-if-no-tests`以非零的退出代码退出。
+  **查看软件与将用于测试运行的设备操作系统版本和测试主机版本的兼容性**。例如，测试软件框架（例如：Appium）中的某些功能可能无法在被测试设备的所有操作系统版本上按预期运行。

**安全性**
+  **避免在测试规范文件中存储或记录敏感变量（如 AWS 密钥）。**测试规范文件、测试规范生成的脚本和测试规范脚本的日志都作为可下载的工件在测试执行结束时提供。这可能会导致您账户中对您的测试运行具有读取权限的其他用户意外泄露机密。