我有三个文件;一个包含测试,一个包含数据,一个包含运行测试的指令。
基础.py
#!/usr/bin/env python
class Base(object):
def __init__(self):
pass
def is_true(self):
return True
数据驱动程序.py
def pytest_generate_tests(metafunc):
"""
Parse the data provided in scenarios.
"""
idlist = []
argvalues = []
for scenario in metafunc.cls.scenarios:
idlist.append(scenario[0])
items = scenario[1].items()
argnames = [x[0] for x in items]
argvalues.append(([x[1] for x in items]))
metafunc.parametrize(argnames, argvalues, ids=idlist)
###
# EDIT BELOW
# ADD NEW SCENARIOS
###
scenario1 = ('ACME_Manage_Keys', { 'org': 'ACME_Corporation',
'perm_name': 'ManageAcmeCorp',
'resource': 'activation_keys',
'verbs': ('manage_all',),
'allowed': {"test1": is_true}})
test_execute.py
#!/usr/bin/env python
from lib.base import Base
import pytest
from unittestzero import Assert
from data.datadrv import *
class TestDictionarySupport(object):
scenarios = [scenario1]
def test_datadriven_support(self,
org,
perm_name,
resource,
verbs,
allowed):
base = Base()
functionToCall = allowed['test1']
Assert.true(base.functionToCall())
""" THIS WORKS, uncomment the block to see """
"""
Assert.true(base.is_true())
"""
我的最终目标是让Assert.true(base.is_true())
我所做的每一次尝试都导致 TypeErrors 或 NameErrors。我在这里错过了什么或做错了什么?
要重现上述内容,只需创建 3 个目录;库、数据和测试。将 test_execute.py 放在测试中,将 datadrv.py 放在 data 中,将 base.py 放在 lib 中。您将需要 pytest 和 unittestzero 才能运行。您可以从根目录运行 py.test。
注意:当我有这么多工作时,我将有一个 for 循环和多个测试,所以functionToCall = allowed['test1']
会变成类似functionToCall = key[value]
另外,我的起始参考点是http://code.activestate.com/recipes/65126-dictionary-of-methodsfunctions/。
谢谢,错误如下:
注意错误因尝试的方法而异。
使用'allowed': {'test1': Base.is_true}})
:
_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___错误收集测试/test_execute.py _ __ _ __ _ __ _ _ _ __ _ __ _ __ _ ___
测试/test_execute.py:6:在
from data.datadrv import * data/datadrv.py:22: in 'allowed': {'test1': Base.is_true}}) E NameError: name 'Base' is not defined ========== =========================================== 0.02 秒内出现 1 个错误 === ====================================================
使用'allowed': {'test1': base.is_true}})
:测试/test_execute.py:6:在
from data.datadrv import * data/datadrv.py:22: in 'allowed': {'test1': base.is_true}}) E NameError: name 'base' is not defined
与Assert.true(base.functionToCall())
:
测试/test_execute.py:6: 在
from data.datadrv import * data/datadrv.py:22: in 'allowed': {'test1': is_true}}) E NameError: name 'is_true' is not defined