2017-03-01 153 views
1

我试图通过命令行将值传递给我的XCUITest。我知道,它可能通过以下方式来做到这一点对于XCTest(非UI):XCUITests - 通过命令行传递环境变量

xcodebuild联编-verbose测试-workspace MyWorkspace.xcworkspace -derivedDataPath derivedData -scheme“MyScheme”构型的调试SYMROOT =“$(pwd)”/ build -destination platform =“iOS Simulator”,name =“iPad Air”,OS = 10.2 -only-testing:UITests/UITests -resultBundlePath logfiles MY_SETTING =“setting_value”MY_OTHER_SETTING =“ setting_value_2“

但是,这似乎不能在我的XCUITest中工作,因为代码不会进入#ifdef MY_SETTING块。有另一种方法可以通过命令行将值传递给我的XCUITest,还是不可能?

+0

集'MY_SETTING'在调用'xcodebuild ...'之前。 – shallowThought

+0

@shallowThought没有工作。 –

+0

我比错了。抱歉。 – shallowThought

回答

2

谢谢您的回答一个欺骗的下面,我发现这个答案最终为我工作。在Applitools伟大的人阐明了这个问题对我来说一些轻,具体步骤如下:

最重要的步骤是让Xcode的了解我们 打算从传递命令行中的变量。

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

1)打开到Xcode中,选择测试目标(没有目标应用程序的) https://www.evernote.com/l/AR0BF8Te8_hFGYON8jKqIkv3grnwFky16tc

2)选择“生成设置”,并增加在“预处理宏” 节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 '平台= iOS的 模拟器,名字= iPhone 6,OS = 10.2' -only测试:TestTargetName/TestCaseName /测试名TEST_VAR = 1988测试

在测试中我可以得到TEST_VAR变量的值,比如: this:NSLog(@“TEST_VAR%li”,(long)TEST_VAR);

然而,我还需要定义其他预处理宏解开我通过在值的字符串值,如下所述:Accessing the value of a Preprocessor Macro definition

因此检索的字符串值,我不喜欢的东西:

NSLog(@"TEST_VAR %s", MACRO_VALUE(TEST_VAR)) 
0

没有本地方法通过xcodebuild将值传递给UI测试。你可以使用一个Perl一行程序运行前的UI测试,以取代在项目中的值:

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

我用这个方法在过去更换基本URL中的一个项目,以运行UI测试反对模拟服务器。

1

如果您需要从您的架构通过环境变量到XCUITes,修改XCTestCase - > app.launchEnvironment对象,每个测试类的这样:

斯威夫特3

override func setUp(){ 
    app.launchEnvironment = ProcessInfo.processInfo.environment 
} 
相关问题