2012-11-01 83 views
3

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

我对尝试使用TestNG而不是JUnit感兴趣,因为它声称是为单元测试而设计的,但我一直无法找到具体的例子来说明如何做到这一点。

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

测试整个链条,我设法想出下面特设的解决方案:

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

我做到这一点使用一个简单的shell脚本 - 这哪是使用TestNG自动化?

回答

2

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

TestNG支持数据驱动测试;即您提供了一个方法中的所有数据,该方法被传递给测试方法来执行检查(断言)。而且所有这些都是通过Annotation来完成的,所以你不需要为此编写任何代码。

我会建议你使用像Eclipse一样的IDE(如果你还没有使用)并且有插件可用于eclipse。通过Eclipse;编写测试用例以及自动化变得非常简单。将建议你只是谷歌;你会发现足够的例子。

另外Junit 4同样好。

2

你拥有的是一个跨越多个进程的执行环境。这意味着您的测试环境必须能够根据需要自动创建这些流程。基本流程是标准的:设置,多个测试,拆卸。在安装和拆卸程序,不过,需要启动和停止进程,初始化输入,提供具体的测试环境参数等

从你所描述的东西,它似乎并不仿佛它事项的程序p1在Java中。您可以使用java.lang.Runtime来执行p1。您已经预见到需要模拟硬件行为,所以我假设您已经知道如何在适当的集成测试模式下运行p1。如果由于某种原因,您需要更多Runtime为您提供,请查看JVMTI,调试和仪器的界面。

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