私は py.test を使用して機能テスト フレームワークを構築しているため、実行する正確なテストを指定できる必要があります。動的テスト コレクションの利点は理解していますが、最初にテスト環境のヘルス チェックを実行してから、回帰テストを実行できるようにしたいと考えています。その分類は、これらのセットのテストが他の目的に使用されることを排除しません。
テスト スイートは、Jenkins ビルド プロジェクトに関連付けられます。私はosx、python 2.7.3、py.test 2.3.4を使用しています。
したがって、次のようなテストケースがあります。
# sample_unittest.py
import unittest, pytest
class TestClass(unittest.TestCase):
def setUp(self):
self.testdata = ['apple', 'pear', 'berry']
def test_first(self):
assert 'apple' in self.testdata
def test_second(self):
assert 'pear' in self.testdata
def tearDown(self):
self.testdata = []
def suite():
suite = unittest.TestSuite()
suite.addTest(TestClass('test_first'))
return suite
if __name__ == '__main__':
unittest.TextTestRunner(verbosity=2).run(suite())
そして、私は次のようなテストスイートを持っています:
# suite_regression.py
import unittest, pytest
import functionaltests.sample_unittest as sample_unittest
# set up the imported tests
suite_sample_unittest = sample_unittest.suite()
# create this test suite
suite = unittest.TestSuite()
suite.addTest(suite_sample_unittest)
# run the suite
unittest.TextTestRunner(verbosity=2).run(suite)
スイートに対してコマンド ラインから次のコマンドを実行すると、test_first が実行されます (ただし、py.test が提供する追加情報は得られません)。
python Functionaltests/suite_regression.py -v
スイートに対して次を実行すると、0 個のテストが収集されます。
py.test Functionaltests/suite_regression.py
テストケースに対して次を実行すると、test_first と test_second が実行されます。
py.test Functionaltests/sample_unittest.py -v
キーワードを使用して py.test を実行すると、テストをスイートに整理するのにどのように役立つかわかりません。テストケースをフォルダー構造に配置し、フォルダー オプションを指定して py.test を実行すると、機能領域ごとにテストを整理できません。
だから私の質問:
- テストの任意のグループを再利用可能な形式で指定する py.test メカニズムはありますか?
- py.test から unittest.TestSuite を使用する方法はありますか?
編集: py.test マーカーを試してみました。これにより、テスト関数とテスト メソッドに任意のラベルを付けてフラグを立て、実行時にそのラベルをフィルター処理できます。
# conftest.py
import pytest
# set up custom markers
regression = pytest.mark.NAME
health = pytest.mark.NAME
そして私の更新されたテストケース:
# sample_unittest.py
import unittest, pytest
class TestClass(unittest.TestCase):
def setUp(self):
self.testdata = ['apple', 'pear', 'berry']
@pytest.mark.healthcheck
@pytest.mark.regression
def test_first(self):
assert 'apple' in self.testdata
@pytest.mark.regression
def test_second(self):
assert 'pear' in self.testdata
def tearDown(self):
self.testdata = []
def suite():
suite = unittest.TestSuite()
suite.addTest(TestClass('test_first'))
return suite
if __name__ == '__main__':
unittest.TextTestRunner(verbosity=2).run(suite())
したがって、次のコマンドを実行すると、test_first が収集されて実行されます。
py.test Functionaltests/sample_unittest.py -v -m ヘルスチェック
そして、これは test_first と test_second を収集して実行します:
py.test Functionaltests/sample_unittest.py -v -m 回帰
私の質問に戻ります。マーカーは部分的な解決策ですが、収集されたマーク付きテストの実行を制御する方法はまだありません。