2017-04-12 6 views
0

pytestテスト結果のカスタムHTMLレポート用のPythonプラグインを作成しています。私はいくつかのテスト情報(いくつかのPythonオブジェクト...)をテストの中に保存したいと思います。そして、レポートを作成するときに、この情報をレポートに再利用したいと思います。これまでのところ、私はちょっとしたハックな解決策しか出てこなかった。Pytestはテストから任意の情報を渡す

私はrequestオブジェクトを私のテストに合格させ、request.node._report_sectionsの一部を自分のデータで埋めます。 このオブジェクトはTestReport.sections属性に渡されます。フックpytest_runtest_logreportから利用できます。最後にHTMLを生成してから、すべてのオブジェクトをsections属性から削除します。 pseudopythoncodeで

def test_answer(request): 
    a = MyObject("Wooo") 
    request.node._report_sections.append(("call","myobj",a))  
    assert False 

def pytest_runtest_logreport(report): 
    if report.when=="call": 
     #generate html from report.sections content 
     #clean report.sections list from MyObject objects 
     #(Which by the way contains 2-tuples, i.e. ("myobj",a)) 

これを行うには良いpytest方法はありますか?

答えて

0

このようにすればOKです。 改善点私は提案できる:

Fixtureを使ってMyObjectオブジェクトを作成することを考えてみましょう。その後、request.node._report_sections.append(("call","myobj",a))をフィクスチャーの中に置き、テスト中に非表示にすることができます。このように:

@pytest.fixture 
def a(request): 
    a_ = MyObject("Wooo") 
    request.node._report_sections.append(("call","myobj",a_)) 
    return a_ 

def test_answer(a): 
    ... 

場合には、あなたのすべてのテストでこのオブジェクトを持っているに適しているもう一つのアイデア、フックpytest_pycollect_makeitemまたはpytest_pyfunc_callの一つであり、そこに「植物」オブジェクトを実装することです最初の場所。

関連する問題