将环境变量传递给 XCUITest

Passing environment variables to XCUITest

我 运行 UI 测试 CI/CD 供应商(如 CircleCI),我需要读取多个秘密环境变量(如测试用户名和密码)。我可以很容易地设置它,但我不明白如何将它们正确地传递给测试用例。

我找到了 2 种方法:

  1. 将其存储在共享方案中(在 XCode 参数 中),这是一个坏主意,因为不应将机密存储在 git 存储库中。
  2. 在 Swift / Obj-C / xconfig 文件中通过文本替换注入变量(如小型 perl 脚本)。我不认为这是 2020 年的好方法。

我使用 fastlane,但没有找到任何相关信息。

如何正确地做到这一点?

从 Xcode 7 开始,environment variables are no longer being passed on 到测试二进制文件。

但是,您可以将环境变量作为构建设置传递,然后使用 Xcode 测试方案配置将其重新定义为测试调用的环境变量。

例如,假设您定义了一个名为 YOUR_SECRET_ENV_VAR 的环境变量,将其作为构建设置从命令行传递给 Xcode:

xcrun xcodebuild test
    -workspace your-app.xcworkspace
    -scheme your-app
    -destination 'platform=iOS,name=iPhone'
    YOUR_SECRET_BUILD_VAR=$YOUR_SECRET_ENV_VAR

然后,将此构建设置作为测试调用的环境变量输入到您的方案配置中。您必须取消选中 User the Run action's arguments and environment variables.

最后,在你的测试代码中使用环境变量,使用:

let yourSecret = ProcessInfo.processInfo.environment["YOUR_SECRET_ENV_VAR"]