1

http://lists.idyll.org/pipermail/testing-in-python/2013-March/005467.html

これは昨日投稿しました。急いで複製するつもりはありません。でも早く解決したいです。その間、個々のテスト モジュールをテストします。また、stackoverflow には、一般的にメーリング リストよりも多くのユーザーがいます。

レポは次のとおりです

に基本単体テスト クラスがありbase.pyます。の場合test_bitbucket.py、基本ユニット テスト クラスから継承します。に新しいテストケースとクラスを追加したいtest_bitbucket.pyそうしているうちに、パフォーマンスの問題を発見しました。

nosetestsテスト/小規模で実行しましたが、これらの混合結果が得られています

Ran 18 tests in 14.523s        - autospec=True and test_account_creation
exists

Ran 18 tests in 0.621s         - autospec=False and test_account_creation exists


Ran 17 tests in 1.081s         - autospec=True and test_account_creation is
commented out

Ran 17 tests in 0.090s         - autospec=False, and test_account_creation
commented out

requests が大きなライブラリであることは理解していますが、パフォーマンスへの影響は非常に大きく、新しいテスト クラスがある場合とない場合で、それぞれ 1.1 秒から 14.5 秒になりました。

興味深いことに、test_bitbucket.py個別に実行すると。

(bbpy)yeukhon at yeukhon-P5E-VM-DO:~/hg/bitbucket-python-api/tests/small$
nosetests test_bitbucket.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.090s

OK

autospec の有無にかかわらず、ほとんど同じです。

何か案が?私は内部のノーズテストについて十分に知りません。

4

1 に答える 1

1

あなたのリクエストコードが何をするのかわからないので、これは一種の推測です...

モックautospec引数は、モックされたオブジェクトと同じシグニチャを持つモックを作成するために使用されます。これを設定するには、create_autospec()関数は、置き換えられるオブジェクトの深刻で再帰的なイントロスペクションを実行する必要があります。このプロセスは、リクエストライブラリでは遅いと思います。

最初に考えることは、なぜ自動スペックを行うのかということです。モックオブジェクトへの呼び出しが正しい署名を持っていないことを心配していますか?それは防御するのに合理的なことですが、15秒のペナルティの価値があるとは思いません!

リクエストの一部のみを自動指定することは可能でしょうか?例えば:

cls.req_pt = patch(cls.mod_name + '.requests')
cls.requests = cls.req_pt.start()

cls.rim_pt = patch(cls.mod_name + '.requests.really_important_method', autospec=True)
cls.rim = cls.req_pt.start()

試してみるもう1つのことinstance=Trueは、パッチコンストラクターで設定することです。

cls.req_pt = patch(cls.mod_name + '.requests', autospec=True, instance=True)
cls.requests = cls.req_pt.start()

mock.pyを読んだところ、create_autospec()への再帰呼び出しが制限されているようです。もちろん、モックの動作が変わるので、慎重にテストして、期待どおりに動作することを確認します。

于 2013-03-07T19:46:59.207 に答える