13

Python で書かれた Web アプリケーションのテストに取り組んでいます。

test_login.py モジュールに 5 つのテストがあるとします。

すべてのテストはクラスです。

多くの場合、定義済みのテスト クラスである TestFlow クラスを拡張する基本テストが 1 つあります。

そして、このモジュールの他のテストは、その基本テストを拡張します。

例えば ​​:

#The base test 

TestLogin(TestFlow):
    #do login_test_stuff_here

#Another test in the same module

TestAccountDetails(TestLogin)
    #do account_details_test_stuff_here

...

たとえば、 AccountDetails ユーザーをテストするにはログインする必要があるため、 TestLogin テストから継承するだけで、ログインしたユーザーとして他の機能をテストする準備ができているため、実際には非常に便利です。

すべてのテストは Project/project/tests フォルダーにあります。

テストを実行するには、オプション --with-pylons を指定したノーズテストを使用します。

私の質問は、特定の TestClass を「これをテストしないでください」とマークする方法があるかどうかです。

これらの「基本テスト」を直接実行するために時間を無駄にしたくないためです。それらは、それらを継承する他のテストによって実行されるからです。

おそらくこれらのテストのトーンがあるでしょう。可能な場合は、1秒ごとに保存したいと思います.

Skip、SkipTest、または @nottest のようなものは既に見つけましたが、これらは特定のTestClass内の test_methods に対してのみ機能するため、テストケースごとに単一のクラスがある場合、ここでは機能しないと思います。

4

3 に答える 3

12

属性http://nose.readthedocs.org/en/latest/plugins/attrib.htmlを指定することにより、以下のように行うことができるフォームのノーズテスト

多くの場合、テストの際に、単純にファイル名ではなく基準に基づいてテストを選択したいと思うでしょう。たとえば、遅いテストを除くすべてのテストを実行することができます。テストメソッドに属性を設定することにより、属性セレクタープラグインでこれを行うことができます。次に例を示します。

def test_big_download():
    import urllib
    # commence slowness...

test_big_download.slow = 1

属性 slow = 1 を割り当てたら、実行することにより、そのテストと slow 属性を持つ他のすべてのテストを除外できます。

$ nosetests -a '!slow'
于 2012-10-01T10:14:25.373 に答える
5

実際には、クラスにもスキップテストを使用できます。

import unittest

@unittest.skip("Class disabled")
class TestLogin(TestFlow):
    ...
于 2015-10-19T06:50:26.830 に答える
2

http://nose.readthedocs.org/en/latest/writing_tests.html

テストの作成

py.test と同様に、ノーズ テストは unittest.TestCase のサブクラスである必要はありません。デフォルトで構成された testMatch 正規表現 ((?:^|[\b_\.-])[Tt]est) に一致する関数またはクラス – つまり、単語境界または - または _ の後に test または Test があります。 ) であり、その式にも一致するモジュールに存在し、テストとして実行されます。従来の unittest テスト ケースとの互換性のために、nose は unittest と同様に unittest.TestCase サブクラスからテストをロードします。py.test と同様に、nose はモジュール ファイルに表示される順序で機能テストを実行します。TestCase 派生テストおよびその他のテスト クラスは、アルファベット順に実行されます。

上記の正規表現とルールに注意してください。関数/メソッド/クラスに regex と一致しない名前を付けると、それらは実行されません。

そうは言っても、テストの連鎖継承の提案はお勧めしません。それは欲求不満と混乱のレシピです。

mixin class を作成するか、実際のテストを持たない基本クラスを定義する方が良いでしょうが、継承クラスが呼び出して独自のものとして使用できる多くのヘルパー関数があります。

より人気のあるパッケージのテストを見ると、ほとんどすべてがそのアプローチを使用しています。

于 2012-08-17T14:29:47.450 に答える