收集pytest会产生pandas数据帧

时间:2018-01-22 14:27:24

标签: python pytest

我想在pandas数据帧中解析并收集pytest结果。 有没有办法解析它?

我只找到了这个引用,不知道如何使用它。 Collecting and Reporting pytest Results

2 个答案:

答案 0 :(得分:2)

您可以在makereport中实现自定义conftest.py挂钩。一个简单的例子:

import pytest
import pandas as pd


df = pd.DataFrame(columns=('failed', 'nodeid', ))


@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    global df
    outcome = yield
    rep = outcome.get_result()

    if rep.when == 'call':
        df = df.append({'failed': rep.failed, 'nodeid': rep.nodeid}, ignore_index=True)

答案 1 :(得分:0)

您可以使用pytest-harvest。只需安装它,即可直接使用预定义的灯具:

import pytest
import time

@pytest.mark.parametrize('p', ['world', 'self'], ids=str)
def test_foo(p):
    """
    A dummy test, parametrized so that it is executed twice
    """
    print('\n   hello, ' + p + ' !')
    time.sleep(len(p) / 10)

def test_synthesis(module_results_df):
    """
    Shows that the `module_results_df` fixture already contains what you need
    """
    # drop the 'pytest_obj' column
    module_results_df.drop('pytest_obj', axis=1, inplace=True)

    print("\n   `module_results_df` dataframe:\n")
    print(module_results_df)

收益

>>> pytest -s -v

============================= test session starts =============================
...
collecting ... collected 3 items
test_basic.py::test_foo[world] 
   hello, world !
PASSED
test_basic.py::test_foo[self] 
   hello, self !
PASSED
test_basic.py::test_synthesis 
   `module_results_df` dataframe:

                 status  duration_ms      p
test_id                                    
test_foo[world]  passed   500.028610  world
test_foo[self]   passed   400.022745   self
PASSED

========================== 3 passed in 0.05 seconds ===========================

您也可以从“ dict”装置开始,该装置包含有关设置/拆卸时间的更多详细信息,并使用提供的帮助器方法将其转换为数据框。 有关详细信息,请参见文档。

最后,如果您还希望使用参数,固定装置,步骤...,您可能希望看看这个datascience benchmark example

我是作者;)