我正在研究通过运行许多具有不同参数的模拟来表征某些软件。
每个模拟都可以被同化为具有不同输入参数的测试。
测试规范列出了不同的参数:
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中有类似内容吗?
答案 0 :(得分:3)
答案 1 :(得分:0)
考虑到缺少可用的包,这里是一些不同的想要的功能的实现:
包含config
变量的python文件,该变量是静态需求的字典,variables
变量是不同需求的字典(存储为列表)。
config = {'db' : 'database_1'}
variables = {'threshold' : [1,2,3,4]}
使用imp
导入测试规范,通过将脚本的参数解析为args:
testspec = imp.load_source("testspec", args.test)
使用product
中numpy
的修改版本生成测试列表:
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')
这里不多,只是登录终端。