testing - 自动规划自动回归测试执行顺序的框架?

标签 testing automated-tests integration-testing functional-testing

我目前正在为一个相对复杂的应用程序实现测试套件。该应用程序基于 Java 和 Spring,带有 Web 前端。前端测试也可以用 Java 编写(使用 Silk4J 及其自动化客户端)。实际上编写测试不是问题,这是简单的部分。开始变得棘手的是各个测试的执行顺序。

目前我们正在使用 JUnit 编写测试。由于 JUnit 是一种单元测试工具,因此执行测试的顺序是不固定的。如果我们简单地为应用程序的每个模块创建测试,我们很快就会遇到麻烦。一些测试必须依赖其他部分才能正常工作,并且来自其他模块的某些数据可用。我可以以一种将应用程序状态初始化为预定义状态然后执行其测试的方式为每个模块编写测试,但是必须清理和准备状态将是一项相当大的努力。更复杂的测试需要大量跨多个模块的准备和测试场景。

我正在寻找的是一个测试框架,其中每个测试都可以以某种方式定义其需求以及它测试/提供的服务(创建用户功能的测试实际上可以创建用户......至少它应该)。现在我不想硬编码哪个测试用哪个数据和以哪个顺序运行,因为确定顺序非常复杂,并且对应用程序的更改将使得完全重构测试成为必要。

例如,我的“create-user-test”创建用户作为实际检查用户是否正确创建的副作用。对我来说,使用 userA、userB 或 userC 测试此功能并不重要,只要它经过测试即可。如果我现在有另一个测试“create-account-test”需要一个只有 userC 满足的用户,那么测试系统应该知道“哦...... create-account-test 需要 userC,尚未创建但通过传递userC 到我的“create-user-test”,这将创建它。因此在最终执行中,它在“create-account-test”之前使用 userC 运行“create-user-test”,并因此使用“create”的副作用-user-test”创建“create-account-test”所需的状态。

通过检查我的测试的要求和服务。这样的系统应该能够创建一个包含每个测试至少一次的非循环图(特此测试整个功能),但不必为每个测试准备/拆除应用程序状态,或者如果无法以某种方式触发错误创建这样一个图表。至少这样我可以创建仍然可维护的巨大测试场景。

我知道这有点复杂。我在谷歌上搜索了一会儿,是否有人已经在研究这样的框架。不幸的是,我找不到任何类似的东西。

现在我希望这里有人可以指导我使用一种工具,或者告诉我为什么这是一个完全糟糕的主意。回复“嘿……好主意……还没有人创造出这样的东西”……肯定会大大消磨我下类后的休闲时间,因为在那种情况下,我很可能会开始开发这样的工具;-)

克里斯

最佳答案

像 jUint 这样的工具通常不支持对测试的运行进行排序,因为它通常被认为是单元测试的不良做法。在单元测试中,您希望确保每个测试完全独立于其他测试,并且没有外部依赖性。

但是您没有进行单元测试,因此尝试使用 jUnit 会导致您尝试实现的目标与工具实现者设计 jUnit 的目的之间发生冲突...

不过你似乎想做很多事情。您希望能够运行测试并让测试工具找出并创建您需要的数据。这是一个非常高的要求......我不知道有什么工具可以满足您的所有要求,但是有很多工具可以提供您想要的大部分内容,只需付出一些努力。

像 Robotframework 这样的测试框架允许您指定测试运行的顺序。它可能更适合您要实现的目标。

但是为了在测试之前设置您的环境,总会有一些工作要做。我通常将需要特定配置或数据集的测试收集在一起。然后我在运行那组测试之前运行这些步骤。它减少了在每次测试之前进行配置和数据设置的需要。但它也降低了复杂性,因此易于管理。

关于testing - 自动规划自动回归测试执行顺序的框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5676680/

相关文章:

angularjs - 使用 angularjs 测试 promise

web-services - 录制时 WireMock 会播放吗?

jenkins - 如何为 Jenkins 中的每个项目设置凭据?

Selenium WebDriver - 同时按下和单击 C#

c# - 在集成测试 MSTesting C# 中获取参数

java - 如何让集成测试 setUp() 操作在嵌入式 Jetty 容器中运行的内存数据库中的 HSQL 数据?

wcf - 在 Visual Studio 中测试 WSDL

unit-testing - 如何使用 JUnit 测试我的 servlet

java - InstallAnywhere 向导的自动测试

java - Mockito 无法注入(inject)模拟