gpt4 book ai didi

python - 基于高级期望行为示例的自动低级测试生成

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

顶级问题

我们的团队继承了一个非常庞大且脆弱的 python 2(以及 C、C++ 和其他一些)代码库,更新起来非常困难且成本高昂。大量的依赖。测试很少。添加行为改进和转换为 python 3 似乎都是艰巨的任务。即使对新版本进行小的更改,我们也不得不多次恢复,因为它损坏了某些东西。

这是一个测试不充分及其主要技术债务的故事。

尽管如此,这个项目是如此庞大和有用,更新它似乎比重新发明它所做的一切更容易。

子问题

如何添加大量缺失的小测试。我们如何从高级用户验收测试中自动生成简单的输入/输出验收单元测试?

尝试的解决方案

此代码库需要处理大约 50 个大型高级行为测试。不幸的是,运行它们需要几天时间,而不是几秒钟。这些执行了我们最关心的所有代码,但它们太慢了。 (也是一个 Nerd 的观察,80% 的相同代码在每个代码中被执行)。有没有办法在运行时从自动堆栈检查中自动生成输入/输出单元测试?

换句话说,我有高级测试,但我想根据这些高级测试的执行自动创建低级单元和集成测试。

用单元测试镜像高级测试对于增加的代码覆盖率确实为零,但它所做的是使测试更快,更不脆弱。它将允许快速而自信地重构这些部分。

我非常熟悉首先使用 TDD 来缓解这个巨大的脆弱的 blob 问题,因为它实际上在很多情况下加速了开发并防止了这个问题,但这是一个独特的问题解决因为代码库已经存在并且“有效”;)。

有什么自动化测试工具的技巧吗?我在谷歌上搜索了很多,我发现了一些可能适用于 C 的东西,但我找不到任何东西让 python 生成 pytests/unittest/nose 或其他东西。我不关心它使用什么 python 测试框架(尽管更喜欢 pytest)。我一定是在搜索错误的术语,因为 python 不存在测试生成工具似乎令人难以置信。

最佳答案

首先,很好,您已经进行了一些更高级别的测试。并行执行它们,在不同的硬件上运行每个,如果可能的话购买更快的硬件——因为你将要处理的重构任务似乎很大,这仍然是最便宜的方法。考虑将这些更高级别的测试分解为更小的测试。

其次,正如 lloyd 所提到的,对于您计划重构的组件,确定组件的边界,并在执行更高级别的测试期间记录边界处的输入和输出值。使用一些脚本,您可以将记录的值转换为单元测试代码的起点。在极少数情况下,这将立即成为有用的单元测试:通常您需要进行一些重要的架构分析并可能重新设计:

  • 要测试的单元应该是什么?单个方法、方法组、类组?例如,setter 方法在没有其他方法的情况下无法进行合理的测试。或者,要测试任何方法,首先必须存在一个构造对象,因此需要调用构造函数。
  • 组件的边界是什么?什么是依赖组件?您可以使用哪些依赖组件,哪些需要被模拟?许多组件可以按原样使用 - 例如,您不会模拟 sin 或 cos 等数学函数。
  • 单元测试之间的界限是什么,也就是说,您认为在长时间运行的测试中的哪些点开始和结束单元测试?记录的哪一部分被视为设置、执行、验证?

所有这些困难向我解释了为什么一些通用工具可能很难找到,您可能只能使用专门创建的脚本来生成测试代码。

关于python - 基于高级期望行为示例的自动低级测试生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55671363/

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