1

Web スクレイパーのテストをいくつか書きたいと思います。多くのテスト Web ページを使用したいのですが、膨大な量の重複コードなしで必要なことを行うために、鼻 (または別の単体テスト フレームワーク) を取得する方法が正確にはわかりません。

私の問題は、多くの異なるページをテストしたいのですが、nose を使用してこれを行う方法がわからないことです。これは大まかに私がやりたいことです:

class TestPage(object):
    def setup(self):
        with open('test_data/page.html', 'r') as f:
            html = f.read()
        self.scraper = Scraper(html)

テストしたいページが「page.html」だけであれば、これで問題ありません。しかし、テストするページが何百もあります。クラスを複製して、毎回クラスの名前とパスのファイル名の両方を変更することもできますが、これは明らかにばかげています。

ページごとに個別の Scraper オブジェクトを作成し、それらをテスト オブジェクトのリストに格納するコードを設定することを考えました。次に、各 Scraper オブジェクトでテスト メソッドを動作させることができます。しかし、各テストを分離し、nose から個別のメッセージを取得すると、問題が発生すると思います。

また、基本テスト クラスをサブクラス化し、パスをinitに渡そうとしましたが、これは鼻の問題を引き起こします。

鼻を使ってこれを解決する方法、別のアプローチ、または役に立つかもしれない読書についてのアドバイスをいただければ幸いです。

4

2 に答える 2

0

コード サンプルに基づいて、必要なのはクラス ファクトリだけです。

def make_test(page)
    class TestPage(object):
        def setup(self):
            with open(page, 'r') as f:
                html = f.read()
            self.scraper = Scraper(html)
     return TestPage

これで、ページのリストを実行して、それぞれに対して 1 つのテストを作成できます。

for page in list_of_pages:
    Test = make_test(page)
    Test().run() 

それが鼻のテストを実行する方法かどうかはわかりませんが、本格的なクラスになるので、通常は何でもできます。

すべてのテスト ページを 1 つのディレクトリに格納して、ディレクトリ内のファイルをループしてページのリストを取得することができます。新しいテストを作成するために必要なことは、指定されたディレクトリに html を保存することだけです。それはあなたが探していたものですか?

于 2010-11-30T10:08:05.957 に答える
0

鼻からFreshen ( https://github.com/rlisagor/freshen ) を使用するのが最良の答えのようです。

機能ファイルを作成するだけで、テストする URL ごとにシナリオを追加するだけです。

于 2013-03-07T03:05:57.927 に答える