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

时间:2017-03-01 16:40:47

标签: ios xcode xcode-ui-testing

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

  

xcodebuild -verbose test -workspace MyWorkspace.xcworkspace   -derivedDataPath derivedData -scheme" MyScheme" -configuration Debug SYMROOT =" $(pwd)" / build -destination platform =" iOS   模拟器",名称=" iPad Air",OS = 10.2-仅测试:UITests / UITests   -resultBundlePath日志文件MY_SETTING =" setting_value" MY_OTHER_SETTING =" setting_value_2"

然而,这似乎在我的XCUITest中不起作用,因为代码没有进入#ifdef MY_SETTING块。有没有其他方法可以通过命令行将值传递给我的XCUITest,还是不可能?

4 个答案:

答案 0 :(得分:4)

感谢您在下面的回答,我发现这个答案最终对我有用。 Applitools的优秀人才为我解释了这个问题,具体步骤如下:

  

最重要的一步是让Xcode了解我们的变量   将从命令行传递。

     

让我们调用我们的变量TEST_VAR。为此,请按以下步骤操作:

     

1)打开Xcode,选择TEST TARGET(不是应用程序的目标)   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

     

在测试中,我可以以某种方式得到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))

答案 1 :(得分:3)

如果您需要将环境变量从架构传递给XCUITes,请修改XCTestCase - > app.launchEnvironment对象,在这种方式的每个测试类上:

Swift 3

override func setUp(){
    app.launchEnvironment = ProcessInfo.processInfo.environment
}

答案 2 :(得分:1)

这可以做到,是的,你错过了两个步骤。

  1. 将您的Scheme设置为具有MY_SETTING设置为其值的环境变量。
  2. if let mySetting = ProcessInfo.processInfo.environment['MY_SETTING'] { // do whatever you want because it is defined }
  3. 有点Accessing user defined variables passed in from xcodebuild command line

    的欺骗

答案 3 :(得分:0)

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

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

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