2

Azure API エンドポイントを使用しています。 ....azure-api.net/.... Charles プロキシを使用して HTTP リクエスト/レスポンスを表示しようとすると、HTTP レスポンスが空になります。プロキシをオフにすると、リクエストが機能します。

自動化テストのために、リクエストをインターセプトし、レスポンスをモックしたいと考えています。

Charles プロキシを使用して、他のサーバーへの他の HTTPS エンドポイントを表示できます。したがって、リクエストの完了を妨げている azure には何か特別なものがあると思います。

  • Azure は、中間にプロキシがあり、クライアントと通信していないことをどのように認識しますか?
  • Charles が機能するように azure API を構成する方法はありますか? (HTTP トラフィックの表示は開発に役立つため)
  • トラフィックを azure から嘲笑できるようにする別の方法はありますか? 例えばホストリダイレクト?

標準の 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のスクリーンショットです。接続要求の後に応答がありません。

リクエスト

4

1 に答える 1

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、エラーまたは空のコンテンツを含む を渡して、アプリケーションが希望どおりに動作するかどうかをテストできます。

于 2014-09-22T10:43:24.117 に答える