我正在用python编写测试,用unittest
库,我有几个测试环境和不同的测试数据。如何将测试参考数据保存在单独的商店中?
- 什么是存储测试参考数据的最佳方式(我不想把它们放到'test * .py'文件中)?
- 有什么好的方法来存储特殊格式(输入值来调用方法,输出值比较)?
任何想法?
我正在用python编写测试,用unittest
库,我有几个测试环境和不同的测试数据。如何将测试参考数据保存在单独的商店中?
任何想法?
您可以编写一个装饰器,从您的自定义存储中进行数据检索并将其传递到实际测试函数。我在过去做到了这一点:
装饰
from functools import wraps
def data_provider(fn_dp):
def test_decorator(fn_test):
@wraps(fn_test)
def wrapper(self, *args, **kwds):
for data in fn_dp():
try:
fn_test(self, **data)
except AssertionError, e:
raise(AssertionError('{0} - [{1}]'.format(e, data)))
return wrapper
return test_decorator
现在我可以写我的单元测试是这样的:
data = lambda: (
{
'input': '1234',
'expected_op': '1234'
},
{
'input': '1234',
'expected_op': '1234'
}
)
@helper.data_provider(data)
def test_something(self, input, expected_op):
self.assertEqual(input, expected_op)
现在装饰将调用测试功能的所有数据点。
对于您的具体情况,请在data_provider
中查看fn_test(self, **data)
。而不是**data
您可以从您的自定义存储中读取并从此处调用测试功能。
我需要如何组织数据存储的想法。即:我需要填写2个输入(我有ID),点击按钮并检查结果(表格) – 2012-04-24 15:14:38
我的解决办法下: 我有一个存储类,女巫也会从JSON文件的测试数据,在每个测试之前(在安装方法调用):
def setUp(self):
self.data = self.storage.getDataFor(self._testMethodName)
def test_ftu_02_003(self):
self.assertEqual(self.data['title'], self.page.get_title())
self.assertEqual(self.data['header'], self.page.get_header())
和样品JSON文件例如,JSON文件名是相同的作为PY文件名:
{
"test_ftu_02_003":{
"title":"example_title",
"header":"example_title"
}
}
这样我就可以改变路径为每个环境的文件夹中,它很容易从Python代码重写JSON文件。
问题:那么输出数据呢?
答案:所有的数据都是输入数据(它去输入断言*)
安德鲁,我编辑了一下。你期望在数据存储中有“输入数据”和“预期结果”吗? – karlcow 2012-07-10 18:10:02