将环境变量传递给 XCUITest
Passing environment variables to XCUITest
我 运行 UI 测试 CI/CD 供应商(如 CircleCI),我需要读取多个秘密环境变量(如测试用户名和密码)。我可以很容易地设置它,但我不明白如何将它们正确地传递给测试用例。
我找到了 2 种方法:
- 将其存储在共享方案中(在 XCode 参数 中),这是一个坏主意,因为不应将机密存储在 git 存储库中。
- 在 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"]
我 运行 UI 测试 CI/CD 供应商(如 CircleCI),我需要读取多个秘密环境变量(如测试用户名和密码)。我可以很容易地设置它,但我不明白如何将它们正确地传递给测试用例。
我找到了 2 种方法:
- 将其存储在共享方案中(在 XCode 参数 中),这是一个坏主意,因为不应将机密存储在 git 存储库中。
- 在 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"]