0

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です。ただし、requestsPython のクライアントによる http リクエストのみをサポートします。(ここで述べたように)。別のライブラリvcrpyがありますが、これも限られたクライアントのみをサポートしています。

リクエストを使用していますか? リクエストを使用していない場合、ベータマックスは適していません。VCRpy をチェックアウトする必要があります。セッションを使用していますか、それとも関数型 API (requests.get など) を使用していますか?

最後のオプションは、すべてのリクエストを手動で記録し、何らかの形で保存することですが、スパイダーがリクエストを行う規模では実際には実現可能ではありません。

scrapy.Requestsこれらのリクエストをモックするために使用できる下線付きの python クライアントを使用していますか? または、1回の実行でスパイダーによって行われたすべてのhttpリクエストをモックし、それを使用してスパイダーの予想される動作をテストする他の方法はありますか?

4

1 に答える 1