XCUITests - 通过命令行传递环境变量
Posted
技术标签:
【中文标题】XCUITests - 通过命令行传递环境变量【英文标题】:XCUITests - Passing in environment variables via command line 【发布时间】:2017-03-01 16:40:46 【问题描述】:我正在尝试通过命令行向我的 XCUITest 传递一个值。我知道可以通过以下方式为 XCTest(非 UI)执行此操作:
xcodebuild -verbose test -workspace MyWorkspace.xcworkspace -derivedDataPath derivedData -scheme "MyScheme" -configuration Debug SYMROOT="$(pwd)"/build -destination platform="ios 模拟器",name="iPad Air",OS=10.2 -only-testing:UITests/UITests -resultBundlePath 日志文件 MY_SETTING="setting_value" MY_OTHER_SETTING="setting_value_2"
然而,这在我的 XCUITest 中似乎不起作用,因为代码没有进入 #ifdef MY_SETTING 块。有没有另一种方法可以通过命令行将值传递给我的 XCUITest,还是不可能?
【问题讨论】:
在调用xcodebuild...
之前设置MY_SETTING
。
@shallowThought 没用。
我错了。对不起。
【参考方案1】:
感谢您在下面的回答,我发现这个答案最终对我有用。 Applitools 的大佬们为我解答了这个问题,具体步骤如下:
最重要的一步是让 Xcode 知道我们使用的变量 将从命令行传递。
让我们调用我们的变量 TEST_VAR。为此,请按照以下步骤操作:
1) 打开 Xcode,选择 TEST TARGET(not target of application) https://www.evernote.com/l/AR0BF8Te8_hFGYON8jKqIkv3grnwFky16tc
2) 选择“Build Settings”并添加“Preprocessor Macros” 部分 TEST_VAR=$(TEST_VAR)
https://www.evernote.com/l/AR1b4QRysBlDRro3sbKH1hSy6s_2s_Qkxnw
3) 通过点击“+”按钮并选择添加新的用户定义设置 “添加用户定义的设置” https://www.evernote.com/l/AR0qflFqN2lIEoKVVzUUYRArM49Qb1d2TUE
4) 为您的新自定义设置设置默认值 https://www.evernote.com/l/AR32JBfPDhFIN76ZlJjq1eV7v8bry9WImfE
现在变量 TEST_VAR 可以使用了。
这是我如何通过测试的示例。我的测试项目是 工作空间内。所以我打开终端并前往目的地 我工作区的文件夹。
xcodebuild -workspace workspace_name\ workspace.xcworkspace/ -scheme YourSchemeName -sdk iphonesimulator -destination 'platform=iOS 模拟器,名称=iPhone 6,操作系统=10.2' -only-testing:TestTargetName/TestCaseName/testName TEST_VAR=1988 测试
在测试中,我可以以某种方式获取 TEST_VAR 变量的值 这个:NSLog(@"TEST_VAR %li", (long)TEST_VAR);
但是,我还需要定义另一个预处理器宏来解开我传入的值的字符串值,如下所述:Accessing the value of a Preprocessor Macro definition。
所以为了检索字符串值,我做了类似的事情:
NSLog(@"TEST_VAR %s", MACRO_VALUE(TEST_VAR))
【讨论】:
【参考方案2】:如果您需要将 环境变量 从您的架构传递到 XCUITes,请在每个测试类上修改 XCTestCase -> app.launchEnvironment 对象:
斯威夫特 3
override func setUp()
app.launchEnvironment = ProcessInfo.processInfo.environment
【讨论】:
【参考方案3】:这是可以做到的,是的,不过你少了两个步骤。
-
设置您的 Scheme 以将环境变量设置为
MY_SETTING
作为其值。
if let mySetting = ProcessInfo.processInfo.environment['MY_SETTING']
// do whatever you want because it is defined
有点像Accessing user defined variables passed in from xcodebuild command line的骗子
【讨论】:
【参考方案4】:没有通过 xcodebuild 将值传递给 UI 测试的本地方法。在运行 UI 测试之前,您可以使用 perl 单行代码替换项目中的值:
perl -pi -e 's/valueToReplace/replacementValue/g' <path to file to modify>
我过去曾使用此方法替换项目中的基本 URL,以便针对模拟服务器运行 UI 测试。
【讨论】:
以上是关于XCUITests - 通过命令行传递环境变量的主要内容,如果未能解决你的问题,请参考以下文章