3

私はPythonが初めてで、テストにpytestを使用しています

Pythonスクリプト内からpytestを実行しています。テストの結果に基づいて変更するスクリプトにグローバル変数があります。更新されたグローバル変数は、テストの実行後に再び使用されます。

import pytest
global test_suite_passed
test_suite_passed = True

def test_toggle():
   global test_suite_passed
   a = True
   b = True
   c = True if a == b else False
   test_suite_passed = c
   assert c

def test_switch():
   global test_suite_passed
   one = True
   two = False
   three = True if one == two else False
   if test_suite_passed:
      test_suite_passed = three
   assert three


if __name__ == '__main__':
   pytest.main()
   if not test_suite_passed:
      raise Exception("Test suite failed")
   print "Test suite passed"

2 つの質問があります。

1) 上記のコード スニペットは「テスト スイートに合格しました」と出力しますが、2 番目のテスト ケースが失敗したため、例外が発生することを期待しています。

2) 基本的に、合格したテストケースと失敗したテストケースの数を知ることができる pytest の結果へのハンドルが必要です。これは、テストの概要に表示されます。しかし、テストの実行後にスクリプトでさらに使用できるオブジェクトを探しています

4

2 に答える 2

1

pytest は、テスト スクリプト内からではなく、コマンド ラインから呼び出されるように設計されています。pytest は独自の名前空間を持つモジュールとしてスクリプトをインポートするため、グローバル変数は機能しません。

レポート生成をカスタマイズするには、post-process-hook を使用します: http://doc.pytest.org/en/latest/example/simple.html#post-process-test-reports-failures

于 2016-08-06T08:56:20.140 に答える
1

これは、 pytest.main()を呼び出すときに終了コード return を使用して解決できます 。グローバル変数は必要ありません。

import pytest

def test_toggle():
    a = True
    b = True
    c = True if a == b else False
    assert c

def test_switch():
    one = True
    two = False
    three = True if one == two else False
    assert three


if __name__ == '__main__':
    exit_code = pytest.main()
    if exit_code == 1:
        raise Exception("Test suite failed")
    print "Test suite passed"
于 2016-08-07T01:59:13.997 に答える