1

テスト ケースのすべてのパラメーターを実行した後、ファイナライザー フィクスチャを実行しようとしています。問題は、パラメーターが実行されるたびにファイナライザーが実行されるため、必要な値がリセットされることです。例:

@pytest.mark.parametrize('testcaseid',
                         ['1', '2', '3'])
@pytest.mark.parametrize('lang',
                         ["EN",
                          "FR"])
def test_lang(self, request, base_url, lang, testcaseid, connect_testrail):
    try:
        base_url = base_url.replace("english", "french") if lang == "FR" else base_url
        self.navigate(base_url)
        self.wait_for_page_loaded()
        result = self.check_correct_lang_displayed()

        assert result
        connect_testrail.add_to_result(testcaseid, result="Passed", cmnt=lang)
    except Exception as e:
        connect_testrail.add_to_result(testcaseid, result="Failed", cmnt=lang + ". Error: " + str(e))
        pytest.fail(str(e))

別のクラスの私の add_to_result 関数は次のとおりです。

    def add_to_result(self, case_id, result="Untested", cmnt='None'):
    self.testcase.setdefault(case_id, [])
    self.testcase[case_id].append(result)
    self.testcase[case_id].append(cmnt)

conftest ファイル内の私のティアダウン ファイナライザーは次のとおりです。

@pytest.fixture(scope='function', autouse=True)
def update_test_case_status(request):
    logging.info("Starting Test case...")

    def update_at_the_end():
        logging.info("Ending Test Case...")
        results = test_results()
        for values in results.itervalues():
            if "Failed" in values[0]:
                test_rail_conn.update_test_status(test_result="Failed")
                break
            else:
                test_rail_conn.update_test_status(test_result="Passed")

        test_rail_conn.testcase.clear()

    request.addfinalizer(update_at_the_end)

目標は、すべてのテスト ケースとその結果をディクショナリ 'testcase' に格納し、ファイナライザの最後に value[0] フィールド = 結果をチェックして、何かが失敗したかどうかを確認することです。問題は、パラメータを実行するたびにテストケース フィールドがクリアされ、結果が 1 つしか得られないことです。

どんな助けでも大歓迎です!

4

1 に答える 1