是否有适合运行模拟的Python测试框架

时间:2014-06-19 09:05:14

标签: python functional-testing

我正在研究通过运行许多具有不同参数的模拟来表征某些软件。

每个模拟都可以被同化为具有不同输入参数的测试。

测试规范列出了不同的参数:

param_a = 1
param_b = range(1,10)
param_c = {'package_1':1.1, 'params':[1,2,34]}
function = algo_1

这会产生一系列测试:

['test-0':{'param_a':1, 'param_b':1, param_c:},
 'test-1':{'param_a':1, 'param_b':2, param_c:},
 ...]

并使用这些参数调用该函数。函数的返回值是应以“友好方式”报告的测试结果。

test-0: performance = X%, accuracy = Y%, runtime = Zsec ...

例如,Erlang的Common Test和Quickcheck非常适合这项任务,并提供测试的HTML报告。

Python中有类似内容吗?

2 个答案:

答案 0 :(得分:3)

你可以给Robot Framework一个机会。从Robot测试用例调用Python代码将很容易/原生。我们也会得到很好的HTML reports。如果您被屏蔽,我们会在SO(代码robotframework)或Robot User Mailing List上获得一些帮助。

答案 1 :(得分:0)

考虑到缺少可用的包,这里是一些不同的想要的功能的实现:

  • 测试定义:

包含config变量的python文件,该变量是静态需求的字典,variables变量是不同需求的字典(存储为列表)。

config = {'db' : 'database_1'}

variables = {'threshold' : [1,2,3,4]}

使用imp导入测试规范,通过将脚本的参数解析为args:

testspec = imp.load_source("testspec", args.test)
  • 测试生成:

使用productnumpy的修改版本生成测试列表:

def my_product(dicts):
    return (dict(izip(dicts, x)) for x in product(*dicts.itervalues()))
def generate_tests(testspec):
    return [dict(testspec.config.items() + x.items()) for x in my_product(testspec.variables)]

返回:

[{'db': 'database_1', 'threshold': 1},
 {'db': 'database_1', 'threshold': 2},
 {'db': 'database_1', 'threshold': 3},
 {'db': 'database_1', 'threshold': 4}]
  • 动态模块加载:

要在通用名称database_1下加载正确的模块db,我再次使用imp与使用模块的类中的testspec结合使用:

dbModule = testspec['db']
global db
db = imp.load_source('db', 'config/'+dbModule+'.py')
  • 漂亮的印刷:

这里不多,只是登录终端。