scrapy
私の目的は、 ( )を使用して記述されたスパイダーをテストすることですPython
。使ってみcontracts
たのですが、ページネーションなどのテストができなかったり、一部の属性が正しく抽出されているかどうかをテストしたりできないという意味で、本当に制限があります。
def parse(self, response):
""" This function parses a sample response. Some contracts are mingled
with this docstring.
@url http://someurl.com
@returns items 1 16
@returns requests 0 0
@scrapes Title Author Year Price
"""
したがって、2 番目のアイデアはmock
、スパイダーが 1 回の実行で行うすべてのリクエストに対して、testing
フェーズでそれを使用して、期待される結果をチェックすることです。ただし、スパイダーを介して行われるすべてのリクエストをどのようにモックできるかはわかりません。さまざまなライブラリを調べたところ、そのうちの 1 つがbetamaxです。ただし、requests
Python のクライアントによる http リクエストのみをサポートします。(ここで述べたように)。別のライブラリvcrpyがありますが、これも限られたクライアントのみをサポートしています。
リクエストを使用していますか? リクエストを使用していない場合、ベータマックスは適していません。VCRpy をチェックアウトする必要があります。セッションを使用していますか、それとも関数型 API (requests.get など) を使用していますか?
最後のオプションは、すべてのリクエストを手動で記録し、何らかの形で保存することですが、スパイダーがリクエストを行う規模では実際には実現可能ではありません。
scrapy.Requests
これらのリクエストをモックするために使用できる下線付きの python クライアントを使用していますか? または、1回の実行でスパイダーによって行われたすべてのhttp
リクエストをモックし、それを使用してスパイダーの予想される動作をテストする他の方法はありますか?