2016-04-21 72 views
4

我們已經爲使用KIF編寫的我們的應用程序開發了一套UI測試,我希望將其轉換爲使用新的Xcode UI測試框架。如何在測試運行時在Xcode UI測試中模擬網絡請求?

該應用程序是一個Rest AI的客戶端,我們當前正在使用NSURLProtocol爲響應GET,POST,PUT等服務預定義的JSON文件而嘲笑其響應。所有測試均使用數據定義在這些文件中,所以我想繼續使用它們。服務器上的相同端點在測試中的不同位置返回不同的數據,所以我不能在前面模擬它們,我需要能夠在測試運行時調用方法來模擬服務器的下一個響應。

不幸的是,在Xcode UI測試中使用NSURLProtocol不會影響測試的應用程序,我只能看到通過啓動參數或環境將數據發送到應用程序的方式,例如this answer。我需要在測試過程中的不同階段以不同的方式嘲笑他們。我如何在測試過程中以改變的方式在UI測試中模擬網絡請求?或者,我如何與正在測試的應用程序進行通信,以便我可以嘲笑請求本身?

回答

-1

你可以使用OHHTTPStubs模擬它們,或者編寫自己的存根。

簡而言之,您應該使用NSURLSession子類來存根請求,並將存根NSURLSession插入到您的網絡層。 launchEnvironment屬性可能有助於將嘲諷的URL傳遞給測試。

+1

OHHTTPStubs和NSURLSession對我沒有用,因爲我的測試運行在我希望測試的應用程序的另一個應用程序中。 launchEnvironment屬性對我無用,因爲我無法在中間測試中對其進行更改。 – Simon

2

我們一直面臨着嘗試從KIF遷移到UI測試的完全相同的問題。爲了克服UI測試在存根和嘲諷方面的侷限性,我們通過使用在應用程序上實例化的Web服務器在應用程序和測試代碼之間構建了自定義鏈接。測試代碼發送HTTP請求到應用程序,該應用程序可方便地轉換爲存根請求(OHHTPStub),NSUserDefault更新,上傳/下載應用程序的項目。當你需要檢查特定的終點被調用時,甚至可以開始監視網絡呼叫。如果您覺得缺少某些東西,那麼添加新的功能應該相當簡單。

使用庫是非常簡單的,看看我們的github repo

+0

我們遇到了完全相同的問題,並開發了一個嵌入式HTTP服務器來解決它。請參考我的答案:P –

3

我們已經開發了純斯威夫特一個嵌入式HTTP服務器,你可以在你運行測試用例簡單的模擬響應處理的HTTP服務器,然後通過像API_BASE_URL這樣的環境變量將URL傳遞給目標應用。我寫了一篇關於如何做一個文章吧

Embedded web server for iOS UI testing

基本上有兩個庫,一個是Embassy,這是簡單的異步HTTP服務器。另一個是Ambassador,這是一個用於模擬API端點的簡單Web框架。

相關問題