2016-04-21 77 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框架。

相关问题