Pytest -k选项不限制测试功能的运行

时间:2019-12-10 23:10:38

标签: python pytest

当我指定使用'-k'运行的Pytest函数时,我期望只运行一个函数。但是,它正在运行两个测试。

python3 -m pytest -s /home/jorge/projects/grip/grip-server/tests/unit/models/json_models/test_recovery_time_series.py -k 'test_generate_recovery_time_series_columns_for_single_data_row'

输出:

============================================================================ 2 failed, 1 warnings in 0.59 seconds ============================================================================

测试:

import json
from pathlib import Path
import os
from models.json_models.asset_models import generate_asset_models_from_json_dump_path_no_glm_json

from utils.globals import SIMULATION_TYPES

from tests.data.recovery.recovery_asset_models_api_response import get_recovery_asset_models_api_response

from models.json_models.recovery_time_series import generate_recovery_time_series_columns_for_single_data_row

import pytest

@pytest.fixture(scope='module')
def global_data():
    row = ['2019-09-18T18:00:00Z', '100', '50', '123', '45',
           '50', '123', '100', '50', '123', '45', '50', '123',
           '123.45', '543.21', '123.45', '543.21', '123.45',
           '543.21', '123.45', '123.45', '543.21', '123.45',
           '543.21', '123.45', '543.21']
    original_headers = ['timestamp', 'node_001__measured_voltage_A___mag',
                        'node_001__measured_voltage_A___ang',
                        'node_001__measured_voltage_B___mag',
                        'node_001__measured_voltage_B___ang',
                        'node_001__measured_voltage_C___mag',
                        'node_001__measured_voltage_C___ang',
                        'node_002__measured_voltage_A___mag',
                        'node_002__measured_voltage_A___ang',
                        'node_002__measured_voltage_B___mag',
                        'node_002__measured_voltage_B___ang',
                        'node_002__measured_voltage_C___mag',
                        'node_002__measured_voltage_C___ang',
                        'node_002__measured_power_A___real',
                        'node_002__measured_power_A___imag',
                        'node_002__measured_power_B___real',
                        'node_002__measured_power_B___imag',
                        'node_002__measured_power_C___real',
                        'node_002__measured_power_C___imag',
                        'objective_function_value',
                        'node_001__measured_power_A___real',
                        'node_001__measured_power_A___imag',
                        'node_001__measured_power_B___real',
                        'node_001__measured_power_B___imag',
                        'node_001__measured_power_C___real',
                        'node_001__measured_power_C___imag']

    summary_view = {'total_duration': 0.0, 'number_of_time_steps': 0}
    new_row = [24, 27]
    new_timestep_number = 0
    controller_nodes_empty = []
    segment_nodes_empty = []

    return row, original_headers, summary_view, new_row, new_timestep_number, controller_nodes_empty, segment_nodes_empty


def test_generate_recovery_time_series_columns_for_single_data_row(global_data):
    print('running test', type(global_data))

    controller_nodes = ['node001', 'node002']
    segment_nodes = ['node001', 'node002']

    row, original_headers, summary_view, new_row, new_timestep_number, controller_nodes_empty, segment_nodes_empty = global_data

    new_row_dict, summary_view = generate_recovery_time_series_columns_for_single_data_row(row, original_headers, summary_view, new_row,
                                                              new_timestep_number, controller_nodes, segment_nodes)

    print('resp', 'new_row_dict', new_row_dict, 'summary_view', summary_view)

    assert(new_row_dict)

    timeseries_value = json.loads(new_row_dict['objective_function'][4])['value']
    assert (timeseries_value == 123.45)

    #assert (new_row_dict['phase_a_controller_power'][3] == 0)
    #assert (new_row_dict['phase_a_controller_power'][4] == None)
    #assert(summary_view != None and len(summary_view) >= 1)
    #assert(summary_view['total_duration'] == 0.0)
    #assert (summary_view['number_of_time'] == 0.0)


def test_generate_recovery_time_series_columns_for_single_data_row_no_controller_no_segments(global_data):
    print('running test', type(global_data))

    row, original_headers, summary_view, new_row, new_timestep_number, controller_nodes, segment_nodes = global_data

    new_row_dict, summary_view = generate_recovery_time_series_columns_for_single_data_row(row, original_headers, summary_view, new_row,
                                                              new_timestep_number, controller_nodes, segment_nodes)

    print('resp', 'new_row_dict', new_row_dict, 'summary_view', summary_view)

    assert(new_row_dict)
    assert (new_row_dict['objective_function'][4] == 0)
    assert (new_row_dict['phase_a_controller_power'][3] == 0)
    assert (new_row_dict['phase_a_controller_power'][4] == None)
    assert(summary_view != None and len(summary_view) >= 1)
    assert(summary_view['total_duration'] == 0.0)
    assert (summary_view['number_of_time'] == 0.0)

1 个答案:

答案 0 :(得分:1)

-k选项的工作方式如下:substring match;您认为这两个测试都匹配。

一个选项可以排除您不想运行的选项:

python3 -m pytest -s /home/jorge/projects/grip/grip-server/tests/unit/models/json_models/test_recovery_time_series.py -k 'not no_controller_no_segments'

另一种选择是稍微修改测试功能名称,以便您可以指定单个测试名称。

另一种选择是添加markers,然后使用-m选项运行带有特定标记的测试。