2017-01-25 6 views
1

のテストをPytestに変換することを検討していますが、Pytestのフィクスチャを利用することを検討しています。しかし、unittestの1つの機能は、Pytestで同等の機能を簡単に見つけることができなかったことですが、テストスイートを作成して実行する機能です。私は現在、多くの場合、このような何か:addTestでラインにし、コメントアウトすることでpytestを使って実行するテストを制御する

import unittest 

class TestSomething(unittest.TestCase): 
    def test_1(self): 
     self.assertEqual("hello".upper(), "HELLO") 

    def test_2(self): 
     self.assertEqual(1+1, 2) 

if __name__ == "__main__": 
    suite = unittest.TestSuite() 
    # suite.addTest(TestSomething('test_1')) 
    suite.addTest(TestSomething('test_2')) 
    runner = unittest.TextTestRunner() 
    runner.run(suite) 

を、私は簡単に実行するテストを選択することができます。 Pytestと似たようなことをどうすればできますか?

答えて

2

-k引数を使用すると、特定のテストを実行できます。例えば、クラスTestSomethingですべてのテストを実行する

# put this in test.py 
import unittest 

class TestSomething(unittest.TestCase): 
    def test_1(self): 
     self.assertEqual("hello".upper(), "HELLO") 

    def test_2(self): 
     self.assertEqual(1+1, 2) 

は次のように行うことができます。

py.test test.py -k TestSomething 

だけtest_2の実行:

py.test test.py -k "TestSomething and test_2" 

より多くの例をdocumentation

1

には-kフィルタを使用することに加えてあなたが実行したい特定のテストクラスやケースに名前を付けることができ、

py.test test.py::TestSomething::test_2 

は行くにはもう一つの方法は、特別なテスト名を使用することであるだけでtest_2

0

を実行します。これらは、pytest.iniファイルで設定できます。

# content of pytest.ini 
# can also be defined in tox.ini or setup.cfg file, although the section 
# name in setup.cfg files should be "tool:pytest" 
[pytest] 
python_files=check_*.py 
python_classes=Check 
python_functions=*_check 

もう1つの方法は、conftest.pyで対応することです。この例では、collect_ignore設定変数が使用されています。それは無視されるテストパスのリストです。この例では、test_somthing.pyは常に収集のために無視されます。我々はこれらが緩くpytest章pytestためChanging standard (Python) test discovery

ジャンプの文書から取られたのpython 3.

# content of conftest.py 
import sys 

collect_ignore = ["test_something/test_something.py"] 
if sys.version_info[0] > 2: 
    collect_ignore.append("test_other/test_other_module_py2.py") 

でテストしている場合test_other_module_py2.pyは無視されます。とても素敵です。

0

ビルドmbatchkarovの回答では、私のテストの名前がかなり長くなることがあるので、私はまだコメントを出して行をコメントし、Sublimeの "Cntrl + B" Cntrl + R "を使用してください)。次のようにこれを行う1つの方法は次のとおりです。

import unittest 
import pytest 

class TestSomething(unittest.TestCase): 
    def test_1(self): 
     self.assertEqual("hello".upper(), "HELLO") 

    def test_2(self): 
     self.assertEqual(1+1, 2) 

if __name__ == "__main__": 
    tests_to_run = [] 
# tests_to_run.append('TestSomething and test_1') 
    tests_to_run.append('TestSomething and test_2') 
    tests_to_run = " or ".join(tests_to_run) 
    args = [__file__, '-k', tests_to_run] 
    pytest.main(args) 

この背後にある考え方はPytestはテスト(というよりもテストのリストだけ)と一致する文字列式を受け入れるため、1が1に一致する式のリストを生成しなければならないということですテストのみを行い、orを使用して連結します。

0

カスタムpytestマーカーを使用することをお勧めします。 http://doc.pytest.org/en/latest/example/markers.html

:あなたは、マーカーに関するより多くの情報を見つけることができます。ここ py.test -v -m mymarkername

: あなたは @pytest.mark.mymarkername

で(実行したい)特定のテストをマークし、コマンドを使用して、カスタムマーカーとテストのみを実行する必要があります

関連する問題