【问题标题】:Automatically generating tests by recording and replaying how methods are called通过记录和回放方法的调用方式自动生成测试
【发布时间】:2009-07-09 13:15:30
【问题描述】:

这是一个我认为应该存在的程序:当应用程序运行时,它会自动记录对所有方法的所有调用。然后它会根据每个调用创建一个测试。 (这样的测试可能被称为单元测试,但我在这里不这样做,因为存在捕获状态的问题。)

对于一个典型的应用程序,这个程序会在几次使用后自动生成成千上万的测试。

这个程序存在吗?如果不是,为什么不呢?有没有类似的程序?

此程序的更复杂版本将执行以下操作:

  1. 它将重新组合来自 多次调用以创建新测试。 例如:一个方法被调用 (1,A)和(2,B)。该实用程序将 生成调用 (1,B) 和 (2,A) 的方法。
  2. 它会干扰创建新测试的调用。例如:使用两个整数 (1,2) 调用方法。此实用程序将创建使用 (0,2)、(1,3)、(0,3) 等调用方法的测试。

我很欣赏这样一个实用程序生成的一些测试是不正确的事实。不过,我认为这样的实用程序会非常有用,尤其是在测试旧版应用程序时。

【问题讨论】:

标签: testing automated-tests


【解决方案1】:

有类似的工具,但它们基于捕获用户输入并重放它。

您所描述的 IMO 不是很有用,因为以这种方式产生的测试不会测试 期望的 行为,而只会测试 现有 行为。哪怕是错的。即使它是一个微不足道的实现细节。测试将非常脆弱且极其冗余 - 即它们将缺乏自动化测试的两个最重要的属性:稳定性和独立性。

应用程序中的任何更改、任何重构都会导致数千个测试失败。最终结果要么是一个被遗弃和被忽视的测试套件,要么是一个应用程序被冻结,没有人能够激发以任何方式进行更改的动力,因为它需要 10 倍于调整测试用例的工作。

它会扰乱创建的调用 新的测试。例如:一个方法是 用两个整数 (1,2) 调用。这 实用程序将创建调用 具有(0,2),(1,3),(0,3)的方法, 等等

该工具如何知道这些生成的调用应该产生什么影响? Fuzz testing 是一个类似的概念,但不测试应用程序的正确性,只测试没有缓冲区溢出和类似的灾难性错误。

【讨论】:

  • +1 这就是我要写的全部内容。关于模糊测试的提示很有用!
【解决方案2】:

在 3D 图形世界中,它们以类似的方式存在 - 它们记录所有 API 调用,您可以稍后“播放”它们并获得完全相同的帧序列等。

我不明白为什么您提到的实用程序需要创建额外的测试(即 (1,A) 业务)。 (2, B) 甚至是一个有效的组合吗?方法记录本身就是一个很好的想法,无需重新组合。

【讨论】:

  • @Pod:它不必重新组合事物。但是,这样做的能力会使它对某些应用程序更强大。我设想这是实用程序中可以打开或关闭的一个选项。您说某些组合无效是正确的。
【解决方案3】:

如果您正在对 Web 应用程序进行功能测试,可以使用 Selenium 等框架来记录浏览器中的用户输入,并可以重放以进行测试。

【讨论】:

  • 我知道 Selenium。但是,出于 UI 测试目的记录最终用户的键盘和鼠标事件与记录方法调用不同。两者都很有用。虽然有记录和回放 UI 事件的方法,但似乎没有记录和回放方法调用的方法。
猜你喜欢
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多