断言一次运行明显快于另一次运行

时间:2016-06-20 12:47:36

标签: python unit-testing testing time

我需要进行功能测试,断言一次运行显着的速度比其他运行速度快。

以下是我到目前为止编写的代码:

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,而管道定义文件将定义什么是“速度的显着差异”,而不是我:

  • 如果定义文件包含很多非常快的规则,那么两次连续执行之间的执行时间差异会非常小,比如说快5%但仍然很重要
  • 否则,如果定义文件包含的规则很少但很长,那么差异会很大,比如说快了90%,所以5%的差异根本不会很大。

1 个答案:

答案 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更快的平均规则执行时间。这是实际参数,取决于您对此等式的使用。