我需要进行功能测试,断言一次运行显着的速度比其他运行速度快。
以下是我到目前为止编写的代码:
def test_run5(self):
cmd_line = ["python", self.__right_def_file_only_files]
start = time.clock()
with self.assertRaises(SystemExit):
ClassName().run(cmd_line)
end = time.clock()
runtime1 = end - start
start = time.clock()
with self.assertRaises(SystemExit):
ClassName().run(cmd_line)
end = time.clock()
runtime2 = end - start
self.assertTrue(runtime2 < runtime1 * 1.4)
它有效,但我不喜欢这种方式,因为1.4因子是通过我的特定的执行示例实验性地选择的。
你如何测试第二次执行总是比第一次
更快?修改
我认为没有必要对其进行解释,但在我的计划中,我不应该说一个因素对于未知的执行具有重要意义。
整个程序是一种Make
,而管道定义文件将定义什么是“速度的显着差异”,而不是我:
答案 0 :(得分:1)
我找到了一个符合我需要的名为Michaelis-Menten kinetics
的等式。这是应该做的技巧
def get_best_factor(full_exec_time, rule_count, maximum_ratio=1):
average_rule_time = full_exec_time / rule_count
return 1 + (maximum_ratio * average_rule_time / (1.5 + average_rule_time))
full_exec_time
参数为runtime1
,这是给定管道定义文件的最长执行时间。rule_count
是给定管道定义文件中的规则数。maximum_ratio
表示第二次执行最多比第一次执行快100%(实际上不可能) Michaelis-Menten kinetics
等式的变量参数是平均规则执行时间。我任意选择1.5 seconds
作为执行时间应该maximum_ratio / 2
更快的平均规则执行时间。这是实际参数,取决于您对此等式的使用。