我试图通过命令行将值传递给我的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,还是不可能?
答案 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)
这可以做到,是的,你错过了两个步骤。
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
的欺骗答案 3 :(得分:0)
没有通过xcodebuild将值传递给UI测试的本机方法。在运行UI测试之前,您可以使用perl one-liner代替项目中的值:
perl -pi -e 's/valueToReplace/replacementValue/g' <path to file to modify>
我过去曾使用此方法替换项目中的基本URL,以便针对模拟服务器运行UI测试。