Ios XCUITests-通过命令行传入环境变量

Ios XCUITests-通过命令行传入环境变量,ios,xcode,xcode-ui-testing,Ios,Xcode,Xcode Ui Testing,我正试图通过命令行将一个值传递给我的XUITest。我知道可以通过以下方式为XCTest非UI执行此操作: xcodebuild-verbose测试-workspace MyWorkspace.xcworkspace -derivedDataPath derivedData-scheme-MyScheme-configuration Debug SYMROOT=$pwd/build-destination platform=iOS 模拟器,名称=iPad Air,操作系统=10.2-仅测试:UI

我正试图通过命令行将一个值传递给我的XUITest。我知道可以通过以下方式为XCTest非UI执行此操作:

xcodebuild-verbose测试-workspace MyWorkspace.xcworkspace -derivedDataPath derivedData-scheme-MyScheme-configuration Debug SYMROOT=$pwd/build-destination platform=iOS 模拟器,名称=iPad Air,操作系统=10.2-仅测试:UITests/UITests -resultBundlePath日志文件我的设置=设置我的值我的其他设置=设置值2


但是,这在我的XUITest中似乎不起作用,因为代码没有进入ifdef my_设置块。是否有其他方法可以通过命令行将值传递给我的XUITest,还是不可能?

没有本机方法可以通过xcodebuild将值传递给UI测试。在运行UI测试之前,可以使用perl one liner替换项目中的值:

perl -pi -e 's/valueToReplace/replacementValue/g' <path to file to modify>

我过去曾使用此方法替换项目中的基本URL,以便对模拟服务器运行UI测试。

这是可以做到的,是的,但您缺少两个步骤

设置您的方案,使环境变量将MY_设置设置为其值。 如果让mySetting=ProcessInfo.ProcessInfo.environment['MY_SETTING']{ //做你想做的任何事,因为它是被定义的 }
有点像个傻瓜谢谢你下面的回答,我找到了这个最终对我有用的答案。Applitools的伟人为我解释了这个问题,具体步骤如下:

最重要的一步是让Xcode知道我们使用的变量 将从命令行传递

让我们调用变量TEST_VAR。要执行此操作,请执行以下步骤:

1打开Xcode,选择测试目标不是应用程序的目标

2选择“构建设置”并添加“预处理器宏” 部分测试变量=$TEST\u变量

3通过点击“+”按钮并选择添加新的用户定义设置 “添加用户定义的设置”

4为新的自定义设置设置默认值

现在可以使用变量TEST_VAR了

这是我如何通过测试的一个例子。我的测试项目是 在工作区内。所以我打开终点站,前往目的地 我的工作区的文件夹

xcodebuild-workspace\u name\workspace.xcworkspace/-scheme YourSchemeName-sdk iphonesimulator-destination'platform=iOS 模拟器,名称=iPhone 6,操作系统=10.2' -仅测试:TestTargetName/TestCaseName/testName TEST\u VAR=1988测试

在测试中,我可以得到test_VAR变量的值,就像 这:NSLog@TEST_VAR%li,最长的_变量

但是,我还需要定义另一个预处理器宏来展开我传入的值的字符串值,如下所述:

为了检索字符串值,我做了如下操作:

NSLog(@"TEST_VAR %s", MACRO_VALUE(TEST_VAR))
如果需要将环境变量从模式传递到XSuite,请以以下方式在每个测试类上修改XCTestCase->app.launchenEnvironment对象:

斯威夫特3


在调用xcodebuild之前设置我的_设置…@shallowthough这不起作用。我错了。很抱歉
override func setUp(){
    app.launchEnvironment = ProcessInfo.processInfo.environment
}