

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

# 在 Device Farm 中向测试程序包中添加额外文件
<a name="custom-test-environments-extending-files"></a>

您可能希望在测试中使用其他文件作为额外配置文件或其他测试数据。您可以在将这些额外文件上传到 AWS Device Farm之前将其添加到测试包中，然后通过自定义环境模式访问这些文件。从根本上讲，所有测试包上传格式（ZIP、IPA、APK、JAR 等）都是支持标准 ZIP 操作的包存档格式。

在将文件上传到测试存档之前，您可以使用以下命令将其添加到 AWS Device Farm 测试存档：

```
$ zip zip-with-dependencies.zip extra_file
```

要获取额外文件的目录，请执行以下操作：

```
$ zip -r zip-with-dependencies.zip extra_files/
```

除了 IPA 文件外，这些命令适用于所有测试包上传格式。对于 IPA 文件，尤其是与一起使用时 XCUITests，由于 iOS 测试包的 AWS Device Farm 重新设计方式，我们建议您将任何多余的文件放在略有不同的位置。构建 iOS 测试时，测试应用程序目录将位于另一个名为的目录中{{Payload}}。

例如，此类 iOS 测试目录可能是这样的：

```
$ tree
.
└── Payload
    └── ADFiOSReferenceAppUITests-Runner.app
        ├── ADFiOSReferenceAppUITests-Runner
        ├── Frameworks
        │   ├── XCTAutomationSupport.framework
        │   │   ├── Info.plist
        │   │   ├── XCTAutomationSupport
        │   │   ├── _CodeSignature
        │   │   │   └── CodeResources
        │   │   └── version.plist
        │   └── XCTest.framework
        │       ├── Info.plist
        │       ├── XCTest
        │       ├── _CodeSignature
        │       │   └── CodeResources
        │       ├── en.lproj
        │       │   └── InfoPlist.strings
        │       └── version.plist
        ├── Info.plist
        ├── PkgInfo
        ├── PlugIns
        │   ├── ADFiOSReferenceAppUITests.xctest
        │   │   ├── ADFiOSReferenceAppUITests
        │   │   ├── Info.plist
        │   │   └── _CodeSignature
        │   │       └── CodeResources
        │   └── ADFiOSReferenceAppUITests.xctest.dSYM
        │       └── Contents
        │           ├── Info.plist
        │           └── Resources
        │               └── DWARF
        │                   └── ADFiOSReferenceAppUITests
        ├── _CodeSignature
        │   └── CodeResources
        └── embedded.mobileprovision
```

对于这些 XCUITest 软件包，请将任何额外的文件添加到目录{{.app}}内结尾的{{Payload}}目录中。例如，以下命令显示如何向此测试包中添加文件：

```
$ mv extra_file Payload/*.app/
$ zip -r my_xcui_tests.ipa Payload/
```

将文件添加到测试包时，根据其上传格式， AWS Device Farm 中的交互行为可能会略有不同。如果上传文件使用 ZIP 文件扩展名，则 AWS Device Farm 将在测试之前自动解压缩上传文件，并将解压缩的文件留在环境变量所在的位置。{{$DEVICEFARM\_TEST\_PACKAGE\_PATH}}（这意味着，如果您像第一个示例那样在档案的根目录中添加了一个名{{extra\_file}}为的文件，则该文件将在测试{{$DEVICEFARM\_TEST\_PACKAGE\_PATH/extra\_file}}期间位于该文件所在的位置）。

举一个更实际的例子，如果你是 Appium Testng 用户，想要在测试中加入一个{{testng.xml}}文件，你可以使用以下命令将其包含在存档中：

```
$ zip zip-with-dependencies.zip testng.xml
```

然后，您可以在自定义环境模式下将测试命令更改为以下内容：

```
java -D appium.screenshots.dir=$DEVICEFARM_SCREENSHOT_PATH org.testng.TestNG -testjar *-tests.jar -d $DEVICEFARM_LOG_DIR/test-output $DEVICEFARM_TEST_PACKAGE_PATH/testng.xml
```

如果您的测试包上传扩展名不是 ZIP（例如 APK、IPA 或 JAR 文件），则可以在上找到上传的包文件本身{{$DEVICEFARM\_TEST\_PACKAGE\_PATH}}。由于这些文件仍然是存档格式的文件，因此您可以解压缩文件，以便从中访问其他文件。例如，以下命令会将测试包的内容（用于 APK、IPA 或 JAR 文件）解压缩到该{{/tmp}}目录：

```
unzip $DEVICEFARM_TEST_PACKAGE_PATH -d /tmp
```

如果是 APK 或 JAR 文件，您会发现多余的文件已解压缩到该{{/tmp}}目录（例如）。{{/tmp/extra\_file}}如前所述，对于 IPA 文件，多余文件将位于以结尾的文件夹内稍有不同的位置{{.app}}，也就是{{Payload}}目录内。例如，根据上面的 IPA 示例，可以在该位置找到该文件{{/tmp/Payload/ADFiOSReferenceAppUITests-Runner.app/extra\_file}}（可引用为{{/tmp/Payload/\*.app/extra\_file}}）。

有关扩展测试套件和优化测试的更多方法，请参阅 [在 Device Farm 中扩展自定义测试环境](custom-test-environments-extending.md)。