如何使用TestNG自动化功能测试,跨越多个Java流程?
我对尝试使用TestNG而不是JUnit感兴趣,因为它声称其设计不仅仅是单元测试,但我还没有找到关于如何做到这一点的具体示例。
我有一个Java程序(p1),它监听来自某些特殊硬件的事件。它解析这些命令并将它们发送到另一个Java进程(p2),该进程根据命令执行操作。
为了测试整个链,我设法提出了以下临时解决方案:
我使用简单的shell脚本执行此操作 - 可以使用TestNG实现自动化吗?
答案 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”接口就足够了。其他类型的共享资源也可以工作。