【发布时间】:2023-03-13 18:53:01
【问题描述】:
我有一个专门的字符串处理方法,我想要测试,以便我可以轻松检查它是否正常工作。
我已经使用 unittest 编写了几个测试结果的正确性,我对结果感到满意。我的工作流程是在 PyCharm 中使用命令“Run Unittests in [FOLDER]”,然后将结果导出为 HTML。
我使用的算法有点复杂,所以我想确保我不会不小心让它变得不合理地低效。所以我也想要一个检查这个的测试。但是,测试通常应该有一个客观的通过/失败结果 - 所以我不确定如何实施我的性能检查。
我找到了一个简单的基准:我看到我的函数处理字符串需要多长时间,并将其与 string.split() 需要多长时间进行比较。当然这两种方法都太快了,所以我运行了几千次。由于这两种都是字符串处理方法,我认为这种比较作为第一个近似值是合理的。然后我创建了一个测试方法,它将我的方法的运行时间与split 的比率,并检查它是否不超过 1000。“在库函数的 3 个数量级内”似乎“足够接近" 对我来说,所以我现在可以正常工作了。
但是,最好知道实际的比率是多少。例如,如果我重写了修复错误的方法,但它最终运行速度变慢了两倍,这是我有兴趣知道的(即使它仍然满足我的“3 个数量级”的要求)。我想要的是 HTML 测试报告显示实际测量结果以及通过/失败,以便我可以手动检查它并决定是否需要进一步关注(即使它通过了)。 HTML 报告已经显示了给定测试的运行时间,但这不仅包括我的函数的运行时间,还包括基准函数和与我正在测量的内容无关的各种设置/拆卸(函数运行速度有多快通过字符串)。
那么,如何在我的 HTML 测试报告中包含任意测量值?
- 我知道我可以编写一个脚本来运行并计时,但我不知道如何使它适合我的一键式测试设置(嗯,实际上是 2 次单击 - 一个用于运行测试,一个用于导出结果为 HTML)。
- 我知道衡量性能的方法是分析代码,但我还没有找到与我的工作流程兼容的分析器。我希望将性能测量作为测试电池的一部分进行,而不是作为需要我采取额外行动的事情。
【问题讨论】:
-
对我来说只是一个好奇:你为什么要麻烦导出到 HTML?为什么不直接登录到文本文件?
-
@PatrickDaSilva HTML 看起来更好。
标签: python performance pycharm workflow python-unittest