docbench—使用doctest进行基准测试
docbench的Python项目详细描述
docbench是一个基于 doctest到基准 python代码。如果你已经熟悉了博士,你应该 能在几分钟内使用docbench。如果你发现那个医生 方便-或Python-希望你会有同样的感觉 码头工人!
我们将通过一个简单的用例来指导您如何使用docbench: 计算素数的模块。
创建一个primes.py文件并定义primes函数:
def primes(n): p = [] for i in range(2, n+1): for j in range(2, i): if (i % j == 0): break else: p.append(i) return p
函数返回一个素数的有序列表 n。它的实现很简单,但是执行需要很多 n增长的时间。下列sieve函数应返回 相同的结果,但计算量较少,因此应该 更快。
def sieve(n): p = [] for i in range(2, n+1): prime = True for j in p: if j * j > i: break if (i % j == 0): prime = False break if prime: p.append(i) return p
医生-有效吗?
如果您已经知道doctest,可以跳过此部分。
用doctest测试这个模块非常简单:创建 test.py带有函数的文件test_primes没有实现 但是primes函数的doctest:
def test_primes(): """ >>> from primes import primes >>> n = 50 >>> primes(n) [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] """
如果test_primesdoctest作为 在这个doctest中公布,primes函数的行为正确。 因此,现在可以对primes测试sieve:
def test_sieve(): """ >>> from primes import primes, sieve >>> n = 10000 >>> primes(n) == sieve(n) True """
最后,在文件末尾添加以下样板a:
if __name__ == "__main__": import doctest doctest.testmod()
您可以使用以下命令执行此测试套件:
$ python test.py
没有显示错误?primes模块已成功通过所有 测验!
Docbench–是不是很快?
创建新文件名benchmark.py。添加充当 函数primes和sieve的docbench持有者。我们依靠 只有在最后一次陈述中所花费的时间 docbench将被测量,前面的被认为是设置代码。
def benchmark_primes(): """ >>> from primes import primes >>> n = 10000 >>> primes(n) """ def benchmark_sieve(): """ >>> from primes import sieve >>> n = 10000 >>> sieve(n) """
在文件末尾添加以下样板:
if __name__ == "__main__": import docbench docbench.benchmod()
使用以下命令运行基准:
$ python benchmark.py
您应该得到类似的输出:
Benchmark Time ------------------------- ---------------- __main__.benchmark_primes 1.03 __main__.benchmark_sieve 0.00876
实际上,sieve比primes快得多!