使用TestNG自动进行功能测试?

时间:2012-11-01 13:09:20

标签: testng functional-testing

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

我对尝试使用TestNG而不是JUnit感兴趣,因为它声称其设计不仅仅是单元测试,但我还没有找到关于如何做到这一点的具体示例。

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

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

  1. 我有一个带有“假”硬件命令列表的文本文件
  2. 我向p1添加了一个模拟,它读取文本文件而不是监听事件
  3. 我执行p1(p2已在测试环境中运行)
  4. 我比较p2的日志输出以验证它是否与列表中的命令匹配。
  5. 我使用简单的shell脚本执行此操作 - 可以使用TestNG实现自动化吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

同样Junit 4同样出色。

答案 1 :(得分:2)

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

根据您的描述,似乎程序p1在Java中并不重要。您可以使用java.lang.Runtime执行p1。您已经预见到需要模拟硬件行为,因此我假设您已经知道如何在适当的集成测试模式下运行p1。如果出于某种原因需要Runtime给出的更多信息,请查看JVMTI,即调试和检测的界面。

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