この2つのノーズテストExampleTest1.pyとExampleTest2.pyがあるとします。
ExampleTest1.py
class ExampleTest1(TestBase):
"""
"""
def testExampleTest1(self):
-----
-----
if __name__ == "__main__":
import nose
nose.run()
---------------
ExampleTest2.py
class ExampleTest2(TestBase):
"""
"""
def testExampleTest2(self):
-----
-----
if __name__ == "__main__":
import nose
nose.run()
今、私は単一のスイートからそのような何百ものテストファイルを実行したいと思います。
私は以下のtestng.xmlのようなTestNG機能のようなものを探しています。ここで1つずつ実行する必要があるすべてのテストファイルを追加できます
<suite name="Suite1">
<test name="ExampleTest1">
<classes>
<class name="ExampleTest1" />
</classes>
</test>
<test name="ExampleTest2">
<classes>
<class name="ExampleTest2" />
</classes>
</test>
</suite>
Testng.xmlのような機能がPythonで利用できない場合、テストスイートを作成し、そこにすべての私のpythonテストを含めるための他の代替手段は何ですか?ありがとう
テストスイートを構築する理由は複数ある可能性があるため、いくつかのオプションを紹介します。
mytests
dirがあるとしましょう:
mytests/
├── test_something_else.py
└── test_thing.py
そのディレクトリからすべてのテストを実行するのは簡単です。
$> nosetests mytests/
たとえば、煙、ユニット、統合テストをさまざまなdirに配置しても、「すべてのテスト」を実行できます。
$> nosetests functional/ unit/ other/
鼻には 属性セレクタプラグイン があります。このようなテストで:
import unittest
from nose.plugins.attrib import attr
class Thing1Test(unittest.TestCase):
@attr(platform=("windows", "linux"))
def test_me(self):
self.assertNotEqual(1, 0 - 1)
@attr(platform=("linux", ))
def test_me_also(self):
self.assertFalse(2 == 1)
特定のタグを持つテストを実行できるようになります。
$> nosetests -a platform=linux tests/
$> nosetests -a platform=windows tests/
最後に、nose.main
はsuite
引数をサポートします。渡された場合、 検出は行われません 。ここでは、テストスイートを手動で作成し、Noseで実行する方法の基本的な例を示します。
#!/usr/bin/env python
import unittest
import nose
def get_cases():
from test_thing import Thing1Test
return [Thing1Test]
def get_suite(cases):
suite = unittest.TestSuite()
for case in cases:
tests = unittest.defaultTestLoader.loadTestsFromTestCase(case)
suite.addTests(tests)
return suite
if __name__ == "__main__":
nose.main(suite=get_suite(get_cases()))
ご覧のとおり、nose.main
は通常のunittest
テストスイートを取得し、get_suite
によって構築および返されます。 get_cases
関数は、選択したテストケースが「ロード」される場所です(上記の例では、ケースクラスがインポートされたばかりです)。
本当にXMLが必要な場合、get_cases
は、解析したXMLファイルから取得したモジュール(__import__
またはimportlib.import_module
を介してインポート)から取得したケースクラスを返す場所です。そして、nose.main
呼び出しの近くで、argparse
を使用してXMLファイルへのパスを取得できます。