2

我正在尝试将 BDD 实践应用于我的组织。我在一家银行工作,每晚的批处理作业是一个庞大的编排多系统批处理作业流,它们运行并在彼此之间传递数据。

在我们的测试中,交互式在线测试可能只占测试场景的 40-50%,而其余的则嵌入到批处理作业中。例如,测试场景可能是:

  1. 鉴于截至晚上 10 点,我的储蓄账户余额为 100 美元
  2. 当夜间批处理在晚上 11 点运行时
  3. 然后在批处理运行完成后的凌晨 3 点,我应该回来查看我有 0.001 美元的额外应计利息。
  4. 并且银行的总分类帐应该有一个额外的应计利息条目 0.001 美元。

如您所见,这是一个非常异步的场景。如果我要使用 Cucumber 来触发它,我可能可以创建一个步骤定义,以便在晚上 10 点之前将 100 美元的余额插入帐户,但是使用 Cucumber 来触发批处理在晚上 11 点运行是不现实的,因为批处理作业是通常由操作员使用自己的调度工具(例如 Control-M)执行。然后让 Cucumber 等待并听几个小时,然后再验证应计利息,我不确定我是否会遇到超时。

这只是一种情况。批量运行对银行来说非常昂贵,我们总是在尽可能多的场景中进行一次批量运行。我们也有老化的场景,我们需要运行 6 个月的批处理,只是为了检查定期存款期限结束时的最终利息是否正确(我绝对不能让 Cucumber 等那么久,可以吗?)

我的问题是,有没有将 BDD 实践应用于诸如此类的大批量场景的示例?一个人将如何解决这个问题?

编辑以解释为什么我不打算在我控制的情况下执行孤立的测试场景:

我们在其中一个测试级别(我们在我的银行中将其称为系统测试)中进行了孤立的场景,并且 BDD 确实在这种情况下工作。但最终,我们需要达到一个具有完整端到端环境的测试级别,通常是在 SIT 中。在这种环境中,并行运行多个测试场景是一个标准,其中没有一个可以完全控制环境。根据项目的范围,此环境最多可运行 200 个应用程序。因此,客户渠道如网上银行将运行交易场景,而在核心银行系统中,将执行诸如计息、自动转账等场景。还会有会计场景,总账系统会合并和平衡环境中的所有账户。

我想要做的是找到一种方法来利用 BDD 框架来自动化测试执行并捕获结果,这样我们就不必在环境中手动跟踪它们。

4

2 回答 2

1

在我看来,您似乎无法控制场景的执行。

显然,在验证结果之前等待几个小时并不是一个好主意。

是否可以只提取在这种情况下感兴趣的批次部分?如果这是可能的,那么我不希望执行时间为 4 - 6 小时。

如果无法单独执行所需的功能,那么您的系统的可测试性就会出现问题。这很常见,也是您真正想要解决的问题。如果测试的唯一方法是运行整个系统,那么您就无法自信地说它工作正常,因为所有需要测试的组合都很难执行,有时甚至是不可能执行的。

不幸的是,似乎不存在快速修复。您需要能够验证系统的小部分,以便快速可靠地验证它们。无论您是使用 Cucumber 还是任何其他工具进行验证,所有工具都会有同样的问题。

于 2016-05-12T06:23:23.637 回答
0

您可能会考虑的一种方法是使用一个报告流程来查询每个批次运行的结果。然后它将您感兴趣的结果(即来自您的测试的结果)存储到测试分析数据库中。

我假设每个批次运行都有一个唯一标识符。此标识符将用作测试结果的键。

这是它如何工作的示例:

  • 我们知道批处理运行何时完成(比如凌晨 4 点)。我们安排一个报告作业在批处理运行完成后(比如凌晨 5 点)开始分析测试帐户。
  • 报告作业查看帐户 X 和帐户 Y。它在表格中记录他们帐户中的金额,旁边是批处理运行的唯一标识符。该信息存储在测试结果数据库中。
  • 一个单独的过程将测试场景与测试结果相匹配。它知道测试场景 29 与批处理运行 ZZ20 相关联,因此在测试结果数据库中查找批处理运行 ZZ20 的分析。
  • 早上,测试工程师检查运行结果。他们看到测试场景 29 失败,因为账户 X 中只有 100 英镑,而不是预期的 100.001 英镑。

此设置将允许您同步处理异步批处理运行。但是,配置起来会很有挑战性,因为您需要围绕报告以及将测试场景与测试结果链接起来进行大量自动化。

于 2016-05-12T09:11:37.887 回答