使用 class 方法进行参数化,然后使用对象调用该方法
Parametrizing with class method, then calling that method with object
(伪代码)
我有 class 个具有属性的节点:
class Node(WebElement):
def __init__(self, element):
super().__init__(element)
...
@property
def name(self):
<returns name>
@property
def node_id(self):
<returns node_id>
@property
def device_type(self):
<returns device type>
等等...
我需要创建测试,它将检查节点 属性 是否不是 None(必须进行参数化,管理有数量偏差)
简单的方法是使用 getattr
@pytest.mark.parametrize("property", ["name" ,"node_id" ,"device_type"])
def test_01_device_information(self, property):
property = request.param
...
for node in nodes:
assert device.getattr(node, property) is not None
但缺点是,这是动态反射,测试会在运行时间内知道属性是否存在。 IDE syntaxer 不会找出丢失的 属性。测试 运行 整夜...
我可以制作一个属性列表(语法器会发现是否有任何缺失):
@pytest.mark.parametrize("property", [Node.name ,Node.node_id ,Node.device_type])
有没有办法在 for 循环中的对象 'node' 上调用它?我知道,我可以在 property
上调用 __name__
,但我认为可能会有更好或不同的解决方案。
我会感谢你的建议! :)
你可以这样做:
for node in nodes:
assert property.fget(node) is not None
(伪代码) 我有 class 个具有属性的节点:
class Node(WebElement):
def __init__(self, element):
super().__init__(element)
...
@property
def name(self):
<returns name>
@property
def node_id(self):
<returns node_id>
@property
def device_type(self):
<returns device type>
等等... 我需要创建测试,它将检查节点 属性 是否不是 None(必须进行参数化,管理有数量偏差)
简单的方法是使用 getattr
@pytest.mark.parametrize("property", ["name" ,"node_id" ,"device_type"])
def test_01_device_information(self, property):
property = request.param
...
for node in nodes:
assert device.getattr(node, property) is not None
但缺点是,这是动态反射,测试会在运行时间内知道属性是否存在。 IDE syntaxer 不会找出丢失的 属性。测试 运行 整夜...
我可以制作一个属性列表(语法器会发现是否有任何缺失):
@pytest.mark.parametrize("property", [Node.name ,Node.node_id ,Node.device_type])
有没有办法在 for 循环中的对象 'node' 上调用它?我知道,我可以在 property
上调用 __name__
,但我认为可能会有更好或不同的解决方案。
我会感谢你的建议! :)
你可以这样做:
for node in nodes:
assert property.fget(node) is not None