3

如何使用 TestNG 自动化功能测试,跨越多个 Java 进程?

我对尝试使用 TestNG 而不是 JUnit 产生了兴趣,因为它声称设计的不仅仅是单元测试,但我还没有找到一个具体的例子来说明如何做到这一点。

我有一个 Java 程序 (p1),它监听来自某些特殊硬件的事件。它解析这些命令并将它们发送到另一个 Java 进程 (p2),后者根据命令执行操作。

为了测试整个链条,我设法提出了以下临时解决方案:

  1. 我有一个包含“假”硬件命令列表的文本文件
  2. 我在 p1 中添加了一个 mock,它读取文本文件而不是监听事件
  3. 我执行p1(p2已经在测试环境中运行)
  4. 我比较了 p2 的日志输出,以验证它是否与列表中的命令匹配。

我使用一个简单的 shell 脚本来做到这一点——这可以用 TestNG 自动化吗?

4

2 回答 2

2

您所拥有的是一个跨越多个进程的执行环境。这意味着您的测试环境必须能够根据需要自动创建这些流程。基本流程是标准的:设置、多次测试、拆卸。但是,设置和拆卸例程需要启动和停止进程、初始化输入、提供特定于测试的环境参数等。

p1根据您的描述,程序是否使用 Java似乎并不重要。您可以使用java.lang.Runtime来执行p1. 您已经预料到需要模拟硬件行为,所以我假设您已经知道如何p1在适当的集成测试模式下运行。如果出于某种原因您需要更多功能,Runtime请查看JVMTI,它是用于调试和检测的接口。

根据您想要或需要的测试方式,您可能会在为每个测试用例启动流程时遇到性能问题。在这种情况下,您需要一个进程用于一组测试。在这种情况下,您正在重用一项可能会失败的资产,因为它毕竟是一个测试环境。因此,您需要在每次测试开始时检查该进程是否正在运行。确保这一点的一种方法是将检查放入工厂方法中,该方法将主要的被测对象提供给测试用例。该类java.lang.Process不直接允许这种情况发生,但它确实为进程提供标准输入/输出。如果可用,在该通道上实现一个简单的“ping”接口就足够了。其他类型的共享资源也可以工作。

于 2012-11-10T01:35:20.807 回答
2

是的,您可以使用 testNG 轻松自动化多个脚本。

TestNG 支持数据驱动测试;即,您在一个方法中提供所有数据,这些数据被传递给测试方法以执行检查(断言)。此外,所有这些都是通过 Annotation 发生的,因此您无需为此编写任何代码。

我会建议您使用 Eclipse 之类的 IDE(如果您还没有使用),并且有可用于 Eclipse 的插件。通过 Eclipse;编写测试用例及其自动化变得非常容易。会建议你只是谷歌; 你会找到足够多的例子。

Junit 4 也同样出色。

于 2012-11-09T05:09:43.660 回答