将环境变量传递给 XCUITest
Posted
技术标签:
【中文标题】将环境变量传递给 XCUITest【英文标题】:Passing environment variables to XCUITest 【发布时间】:2020-10-26 23:27:39 【问题描述】:我在 CI/CD 提供程序(如 CircleCI)上运行 UI 测试,我需要读取多个秘密环境变量(如测试用户名和密码)。我可以轻松设置它,但我不明白如何正确地将它们传递给测试用例。
我找到了两种方法:
-
将其存储在共享方案中(在 XCode Arguments 中),这是一个坏主意,因为不应将机密存储在 git repo 中。
在 Swift / Obj-C / xconfig 文件(如小型 perl 脚本)中通过文本替换注入变量。我认为这不是 2020 年的好方法。
我使用 fastlane,但没有找到任何相关信息。
如何正确地做到这一点?
【问题讨论】:
您使用什么提供商?我认为这个功能应该站在他们这边。 【参考方案1】:从 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"]
【讨论】:
如果不使用操作系统环境,我怎么能在本地机器上使用它呢?我可以在 CI 上运行xcodebuild
,但在本地使用它会很不舒服。我无法在 XCode 方案中插入密钥,因为它将提交给 git。
我没有在最新的 Xcode 上尝试过这个,但显然你可以选择退出环境变量清理行为,使用 Xcode 应用程序的 defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO
或在调用时将 -UseSanitizedBuildSystemEnvironment=NO
传递给 xcodebuild
从命令行。以上是关于将环境变量传递给 XCUITest的主要内容,如果未能解决你的问题,请参考以下文章