我们如何模拟天蓝色的终点?

时间:2014-09-01 14:54:53

标签: ios azure proxy charles-proxy azure-api-management

我正在使用azure API端点。 ....azure-api.net/...。当我尝试使用Charles代理查看HTTP请求/响应时,HTTP响应为空。关闭代理时请求有效。

为了自动化测试的目的,我想拦截请求并模拟响应。

我可以使用Charles代理查看其他HTTP端点到其他服务器。所以我相信azure有一些特别的东西阻止了请求的完成。

  • azure如何知道中间有代理,而不是与客户交谈?
  • 是否有配置azure API以允许Charles工作? (因为查看HTTP流量对开发很有用)
  • 是否有其他方法可以模拟天蓝色的流量?例如。主机重定向?

我正在使用标准的iOS网络代码

NSURL *url = [NSURL URLWithString:@"https://MyDomain.azure-api.net/a/b/2?subscription-key=myKey"];

[[[NSURLSession sharedSession] dataTaskWithRequest:[NSURLRequest requestWithURL:url]
                                 completionHandler:
  ^(NSData *data, NSURLResponse *response, NSError *error) {

    NSLog(@"%@, error: %@", [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding], error);
    ;

}] resume];

以下是Charles Proxy的截图。连接请求后没有响应。

Request

1 个答案:

答案 0 :(得分:0)

为了拦截请求并返回虚假回复,您可以使用OHHTTPStubs

要启用它,您应该在从Xcode调试时记录响应或使用文档。

在执行测试之前,请致电

stub = [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) {
             return [request.URL.absoluteString isEqualToString:@"https://MyDomain.azure-api.net/a/b/2?subscription-key=myKey"];
         }
                           withStubResponse:^OHHTTPStubsResponse *(NSURLRequest *request) {
                                           NSString *fixture = OHPathForFileInBundle(@"fakeResponse.json", nil);
                                           return [OHHTTPStubsResponse responseWithFileAtPath:fixture
                                                                                   statusCode:200
                                                                                      headers:@{@"Content-Type":@"text/json"}];
                                       }];

执行测试后,您应该致电

[OHHTTPStubs removeStub:stub];

“fakeResponse.json”必须是仅添加到测试目标的文件,您可以使用不同的JSON文件进行不同的测试。例如,您可以传递带有错误或空内容的JSON来测试您的应用程序是否按照您希望的方式运行。