2017-03-01 157 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 
} 
相關問題