通过记录和重放方法的调用方式自动生成测试

时间:2009-07-09 13:15:31

标签: testing automated-tests

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

对于一个典型的应用程序,该程序只需几次使用该程序即可自动生成成千上万的测试。

这个程序存在吗?如果没有,为什么不呢?是否有一个程序可以做到这一点?

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

  1. 它会重新组合参数 多次调用以创建新测试。 例如:调用方法 (1,A)和(2,B)。这个实用程序会 生成调用的单元测试 (1,B)和(2,A)的方法。
  2. 这会扰乱创建新测试的调用。例如:使用两个整数(1,2)调用方法。该实用程序将创建使用(0,2),(1,3),(0,3)等调用方法的测试。
  3. 我很欣赏这样一个实用程序生成的一些测试不正确的事实。尽管如此,我认为这样的实用程序非常有用,特别是在测试遗留应用程序时。

3 个答案:

答案 0 :(得分:2)

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

您所描述的内容IMO不是很有用,因为以这种方式生成的测试不会测试所需的行为,而只是现有的行为。即使这是错的。即使这是一个无关紧要的实施细节。这些测试非常脆弱且极其冗余 - 即它们缺乏自动化测试中最重要的两个属性:稳定性和独立性。

应用程序的任何更改,任何重构都会导致数千次破坏测试。最终结果可能是一个被抛弃和被忽略的测试套件,或者是一个及时冻结的应用程序,任何人都无法以任何方式改变动机,因为它需要调整测试用例的10倍工作量。

  

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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