我正在使用unittest
库在python中编写测试,我有几个测试环境和不同的测试数据。
有什么想法吗?
答案 0 :(得分:1)
您可以编写一个装饰器,从您的自定义商店执行数据检索,并将其传递给实际的测试功能。我过去做过这个:
<强>装饰强>
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)
现在,装饰器将为所有数据点调用测试函数。
针对您的具体情况,请查看fn_test(self, **data)
中的data_provider
。您可以从自定义存储中读取**data
而不是{{1}},而是从此处调用测试函数。
答案 1 :(得分:0)
我的解决方案: 我有一个存储类,在每次测试之前从json文件中获取测试数据(在setUp方法中调用):
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 filename与py文件名相同:
{
"test_ftu_02_003":{
"title":"example_title",
"header":"example_title"
}
}
所以我可以使用每个环境的文件更改路径到文件夹,并且很容易从python代码重写json文件。
问题:输出数据怎么样?
答:所有数据都是输入数据(输入到断言*)