pytest:在测试中使用夹具的参数输出作为类实例名称

时间:2018-11-20 21:46:27

标签: python pytest

使用pytest_generate_tests提供的数据时遇到问题。关键是数据是作为字符串值的元组提供的,而且在测试中,我需要将其中之一用作被测试类的名称,并且我找不到解决方案如何使用此str值作为其名称来初始化类

这是一个简单的测试类:

class Grade(Enum):
    TRAINEE = 1
    JUNIOR = 2
    MIDDLE = 5
    SENIOR = 10

class Employee(metaclass=ABCMeta):
    def __init__(self, name, surname, grade: Grade):
        self.name = name
        self.surname = surname
        base = 300
        self.salary = int(base * grade.value)

class QAEngineer(Employee):
    def __init__(self, name, surname, salary):
        super().__init__(name, surname, salary)

和一个简单的测试,以检查实例是否正确初始化。 为此,编写了使用pytest_generate_tests方法的测试治具。 Fixture使用来自简单输入txt文件的数据,格式为:

QAEngineer, Mary, Mills, SENIOR

并通过以下方式从其中创建param_list

[['QAEngineer', ('Mary', 'Mills', 'SENIOR')]]

并返回为:

metafunc.parametrize("emplopyee_class, employee_parameters", tuple(params_list2))

so employee_class = QAEngineer,employee_parameters =('Mary','Mills','SENIOR')

然后我需要在测试中提供emplopyee_class, employee_parameters值,这里的问题是-由于emplopyee_class是str,因此在创建要测试的QAEngineer实例时不能将其用作类名。我需要对其进行硬编码,即:

def test_emp_append_file(emplopyee_class, employee_parameters):
    grade = Grade.__getattr__(employee_parameters[2])
    employee = QAEngineer(employee_parameters[0], employee_parameters[1], grade)
    assert employee.name == employee_parameters[0]
    assert employee.surname == employee_parameters[1]

如何更改emplopyee_class的类型以及将其用作类名的类型,因此改成这样的形式:

employee = emplopyee_class(employee_parameters[0], employee_parameters[1], grade)

0 个答案:

没有答案