2016-04-01 1 views
1

私はvcrpyを私のアプリケーションの自動http疑似テストに使用しています。これは素晴らしい作品です。しかし私のモックには 'gzip'と 'deflate'のエンコーディングが含まれています。つまり、vcrpyの記録応答はバイナリ形式です。ここでは例です:vcrpyバイナリ応答文字列から非圧縮テキストを抽出するにはどうすればよいですか?

interactions: 
- request: 
    body: null 
    headers: 
     Accept: ['*/*'] 
     Accept-Encoding: ['gzip, deflate'] 
     Authorization: [Basic Y2hlc3RlcjpiYWRnZXI=] 
     Connection: [keep-alive] 
     User-Agent: [python-requests/2.9.1] 
    method: GET 
    uri: http://localhost:8153/go/compare/DeployProduction/14/with/15 
    response: 
    body: 
     string: !!binary | 
     H4sIAAAAAAAAAO08bXPbNpPf8ytQ9q6yp+Y7KZGKrU7quG1mEscXO7276XQ0IAlKjCmCQ0KW9TxP 
     /vstAJIiJUpxkkvS3tmTiSRisVjsG3YXIE6/e/76/Oa/ry7QbzevXk6enM7ZIkX3izQrz5Q5Y/lY 
     11erlbayNVrMdNP3ff2ewygcluBo8gTB3ylLWErk93O6yHFB0FWSkzTJSImu8IwgFf1Kn5zqFeCT 
     U2i6RREJlrMzJcZpSRQ0L0h8pugzquOyJKzUcZ6nSYhZQjPVCG0PE9saObHthJbjE2L79tCPhhY2 
     ImxZlhEH2Hbt0PB8NyCBZ8RO6NsksoZDi1haWJYKWpAowWcKTlMFFSQ9U0q2Tkk5J4QpSJ88jKwc 
     M0aKrEtf6EeBEYXG0ByFERmR2A9sO8CmPzR8LyAYEyOwwpHj48COseOaLgmsUehiHAxjOzYfRt+T 
     0+9UFV3fPHtzM0Z5QRll65ygOaW3JYppgQALSrJ3JOREIVWtu1xcPn94hzIskpxtsaEswr3CCYwA 
     pjUMh8Qf+iZIY2hGpu063iiyTOyDUPxRbFrRyPJHxHRBIiChKIij2LfMUWxo70plcqrLcUEK3/2R 

(追加出力は省略)

私は約decompressing zlibを読みましたが、それはバイナリYAMLをデコード対応していません。

元のテキストを表示してテスト結果を確認できるように、これらのバイナリ文字列を元の形式に変換するにはどうすればよいですか?

答えて

0

yamlファイルのbody文字列はbase64でエンコードされていますが、ロードすると生のバイトストリームが取得されます。好奇心が強い場合はhow to decode a base64 stringとお読みください。必要ではありません。

最初の3バイトが\x1f\x8b\x08の場合、gzipのバイトストリームがあることがわかります。これを手動で解読したい場合はhereを読んでください。しかし、vcrにはあなたのためのラッパーメソッドがあります。また、本体の解読後にいくつかのヘッダー情報も更新されます。この機能はvcr.filter.decode_response()です。

この例を示すために、ファイル\tests\fixtures\wild\domain_redirect.yamlを使用します。 2つの相互作用があり、そのうちの2つはエンコードされたデータを含んでいます。

with open('domain_redirect.yaml', 'r') as f: 
    doc = yaml.load(f) 

response = doc['interactions'][1]['response'] 
decoded = decode_response(response) 
print(decoded['body']['string']) 
+0

[Github issue](https://github.com/kevin1024/vcrpy/issues/241)ここでは、Python 3でのリクエストの本体がエンコードされていると説明しています。 – Reti43

+0

ありがとう@ Reti43、私はGithubの問題も発見し、自分自身をパイルに追加しました:https://github.com/kevin1024/vcrpy/issues/249 – EdwardTeach

+0

@EdwardTeach私はあなたが身体を解読するのが難しいか分かりません文字列。 yamlファイルではbase64文字列として保存されますが、 'yaml.load()'の後にはバイト列になります。私のサンプルコードはあなたのために働かなかったのですか? – Reti43

関連する問題