gpt4 book ai didi

python - 可重现的测试框架

转载 作者:行者123 更新时间:2023-11-28 18:38:05 25 4
gpt4 key购买 nike

我正在寻找支持长时间、昂贵的正确性测试的测试或集成框架。仅当影响测试的代码发生更改时,才应重新运行测试。

理想情况下,测试框架应该

  • 找到测试代码
  • 生成它的哈希值,
  • 运行代码并将散列作为名称写入输出文件
  • 如果已经存在则跳过。
  • 简要概述哪些测试成功,哪些失败。

如果测试必须指定它所依赖的模块和文件就可以了。

Python 会是理想的,但这个问题可能足够高级,其他语言也能解决。

也许已经存在一个测试或构建集成框架,我可以对其进行调整以适应这种行为?

最佳答案

基本上,您需要跟踪测试在做什么,以便检查它是否发生了变化。

可以使用 sys.settrace(tracefunc) 追踪 Python 代码.有一个模块 trace这可以提供帮助。

但如果它不仅仅是 Python 代码——如果测试执行其他程序、测试输入文件等,并且您也需要观察它的变化,那么您将需要在操作系统级别进行跟踪,例如 stracedtracedtruss

我创建了一个简单测试框架的小型演示/原型(prototype),它只运行自上次运行以来发生变化的测试:https://gist.github.com/messa/3825eba3ad3975840400它使用 trace 模块。它是这样工作的:

  1. 收集测试,每个测试都按名称标识
  2. 从 JSON 文件加载测试指纹(如果存在)
  3. 对于每个测试:
    • 如果指纹与指纹中列出的函数的当前字节码匹配,则跳过测试
    • 否则运行测试
      1. 边跑边跟踪,记录所有被调用的函数
      2. 使用函数名称和每个记录函数的字节码 MD5 哈希值创建测试指纹
  4. 将更新的测试指纹保存到 JSON 文件

但是有一个问题:它。使用 trace.Trace 跟踪代码时运行代码比不跟踪时慢大约 40 倍。所以也许你会更好地运行所有测试而不跟踪 :) 但是如果跟踪器将在 C 中实现,例如 it is in the coverage module它应该更快。 (Python trace 模块不在 C 中。)

也许其他一些技巧可以帮助提高速度。也许您只对某些顶层函数感兴趣,无论它们是否更改,因此您不需要跟踪所有函数调用。

您是否考虑过其他方法来加速昂贵的测试?像并行化、ramdisk (tmpfs)...例如,如果您针对数据库进行测试,请不要使用“系统”或开发数据库,​​而是运行具有轻量级配置的数据库的特殊实例(无预分配,无日志。 ..) 来自 tmpfs。如果可能的话,当然 - 一些测试需要在类似于生产的配置上运行。

一些测试框架(或其插件)只能运行上次失败的测试——这是不同的,但功能类似。

关于python - 可重现的测试框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30448084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com