2016-07-26 4 views
0

私はいくつかのpythonコードとpytestテストの束を持っています。私は失敗することを期待テストのなぜpy.testは私のxfailテストをスキップして表示しますか?

いくつかの(それは私がエラー処理をテストしていたので、私は自分のコードが例外をスローするようになります入力に渡し、ある。)

これを行うために、私は、コードを持っていますこのように:

CF_TESTDATA =[('data/1_input.csv', 'data/1_input.csv', 'utf-8'), 
       pytest.mark.xfail(('data/1_input_unknown_encoding.txt', '', 'utf-8')), 
       ('data/1_input_macintosh.txt', 'data/1_converted_macroman.csv', 'macroman')] 
@pytest.mark.parametrize('input_file, expected_output, encoding', CF_TESTDATA) 

def test_convert_file(testdir, tmpdir, input_file, expected_output, encoding): 
    ''' 
    Test the function that converts a file to UTF-8. 
    ''' 
... 

ここでの考え方があることが、この試験のセカンドランで、INPUT_FILE =「データ/ 1_input_unknown_encoding.txt」で、私は、テスト対象のコードが失敗することを期待します。

これはうまくいくようですが、コマンドラインから実行すると、pytestはテストがxfailedであることを通知します。私はデバッガのコードに従うことができ、期待される例外がスローされていることがわかります。それはすべてうまくいいです。

しかし、Jenkinsはこのテストをskkippedとして示しています。出力を見ると、次のメッセージが表示されます。

Skip Message 

expected test failure 

なぜテストはスキップされますか?テストが実行されているように見え、期待どおりに失敗します。これはスキップされるテストと同じではありません。

+0

、あなたは対話型の実行と同じカレントディレクトリからそれを実行していますか? –

+0

私はJenkinsがJUnitXMLの出力を読み込むと思いますか?私はJUnitXMLが単純にxfailを言う方法がないと推測しているので、pytestはskipを使います。しかし、私は実際には知りません。 –

答えて

1

答えは、xfailを間違って使用していることです。テストの失敗を予期するために使用するべきではありません。それはしません。テストが失敗するか失敗しない場合は、合格として記録されます。

私が代わりに行う必要があるのは、予想される例外をキャッチするようにテストを変更することです。例外がスローされない場合はエラーが発生します。その後、私はxfailsを削除します。

xfailは、テストが一時的に失敗し、テストスイートを通過させたい場合に発生します。したがって、失敗を気にしないように、失敗をあまり期待しません。

テストが実行されている間は、結果はチェックされないため、このテストがスキップされたことをレポートで示すことは妥当です。

私のテストは、次のようになります。あなたはジェンキンスから実行している場合は

# Test the run function. 
ex1 = False 
try: 
     result = main.run(base_dir + '/'+ input_file, \ 
       client_config['properties']) 
except ValueError as e: 
     ex1 = True 
     print e 

if expect_fail: 
     assert ex1 
else: 
     assert not ex1 
     assert filecmp.cmp(result, base_dir + '/' + expected_output), \ 
      "Ouput file is not the same as the expected file: " + expected_output 
+0

http://doc.pytest.org/en/latest/assert.html#assertions-about-expected-exceptionsを参照してください。 – Daenyth

+0

これは、失敗が予想される場合に使用する必要があります。問題は、テスト中のコード正しく動作します(例外がスローされます)。あなたのテストは、コードが正しく動作しない(例外をスローしない)場合にのみ失敗します。 –

関連する問題