Java 从IDE内部在远程服务器上运行TestNG/JUnit集成测试

Java 从IDE内部在远程服务器上运行TestNG/JUnit集成测试,java,jakarta-ee,junit,integration-testing,testng,Java,Jakarta Ee,Junit,Integration Testing,Testng,在我的IDE(Eclipse或NetBeans,没关系)中,我有一些TestNG测试类(但我的问题也涉及到远程JUnit测试),它们是集成测试。这些测试需要集成服务器才能运行,不能在本地计算机上运行。他们需要集成服务器的完整环境,而不仅仅是JavaEE容器相关的东西(=>没有Arquillian或JEEUnit) 现在我希望能够从IDE(Eclipse)中运行这些测试——最好是使用TestNG插件——但当我启动它们时,它们实际上应该在远程集成服务器上运行 是否可以从我的IDE中在远程服务器上启动

在我的IDE(Eclipse或NetBeans,没关系)中,我有一些TestNG测试类(但我的问题也涉及到远程JUnit测试),它们是集成测试。这些测试需要集成服务器才能运行,不能在本地计算机上运行。他们需要集成服务器的完整环境,而不仅仅是JavaEE容器相关的东西(=>没有Arquillian或JEEUnit)

现在我希望能够从IDE(Eclipse)中运行这些测试——最好是使用TestNG插件——但当我启动它们时,它们实际上应该在远程集成服务器上运行

是否可以从我的IDE中在远程服务器上启动集成测试? 我喜欢在远程服务器上有某种代理,它等待测试请求并执行它们。但是正如我所说的,如果从TestNG插件内部运行,那就太好了

我是否需要一些变通方法,例如Ant脚本(希望不是)或一些Maven魔术?最佳实践是什么


我知道我也可以为我的应用程序创建Web服务,然后我可以从本地单元测试调用它们。但我想知道,如果没有Web服务,是否也有可能。不幸的是,我没有现成的解决方案,但我想我可以给你一些提示,因为我花了一些时间思考这个问题

我不知道TestNG,但JUnit能够插入您自己的测试执行器。我确信TestNG具有适当的功能。所以,找到它并熟悉它。因为您可以控制如何调用您的测试,所以您甚至可以执行其他操作,而不是调用测试用例的方法。例如,调用将使测试远程运行的远程API

显然,可以是web服务使远程代理(根据您的建议)在远程计算机上运行测试。这很好,但我更喜欢无代理或半无代理解决方案。我是什么意思?例如,如果您的远程计算机是Unix,则可以执行SSH或Telnet连接并运行命令行。在这种情况下,您可以创建mvn或ant脚本,使用ssh复制到远程计算机,然后运行它。脚本将运行您的测试。所以它几乎是无代理的。您只需要java安装和SSH支持

如果远程计算机是windows,则可以使用Telnet或WMI。因此,如果安全性不是问题,但需要跨平台支持,请使用Telnet


如果您需要有关SSH/Telnet的更多帮助,请随时与我联系。

您将如何实现这一点在很大程度上取决于您使用的是什么集成服务器和IDE,以及应用程序是什么。我假设您正在使用Eclipse;我假设您正在使用,因为它是最容易让它做您想做的事情的

大部分工作都是开箱即用的。然而,有一点将需要一些额外的工作

您将要执行以下操作:

  • 在Jenkins建立一个名为“集成测试”的工作(名称无关紧要)。将其配置为运行您希望能够从IDE运行的测试,并允许远程计算机触发生成
  • 将此作业设置为参数化作业,并添加文件参数。假设这叫做“测试程序”。这将是作业将测试的程序
  • 使集成测试作业使用TestingProgram文件运行测试。如果您的程序需要多个文件,那么可以假设这是一个包含所有必要文件的zip文件
  • 将Eclipse项目配置为生成集成测试作业所期望的相同文件(我假设这已经发生了,因为它可能正在构建某种bin版本的程序)
  • 现在是将Eclipse连接到Jenkins的稍微复杂一点的部分。不幸的是,我不认为有任何预先存在的工具可以完全满足您的需求。好消息是,用自定义脚本实现它应该非常简单。脚本所要做的就是:

  • 如果您的程序需要多个文件,而eclipse还没有这样做,它将需要压缩这些文件
  • 它需要获取文件并将其读入某个变量,然后对其进行base64编码。有很多图书馆将为您处理大部分信息,例如。假设此文件被读入名为
    $programFile
  • 它需要向
    HTTP://:8080//buildwithparameters?TestingProgram=$programFile
  • 您可以阅读更多关于在中使用参数触发Jenkins远程构建的信息

    完成这些步骤的脚本几乎可以是任何内容。考虑到您希望最终将其合并到IDE中,看起来最符合逻辑的选择应该是ant脚本或Eclipse插件。两者都不太复杂——ant脚本只需执行这些步骤,您可以将ant脚本导入Eclipse项目中专门用于测试——插件只需添加一个菜单项,当在项目中运行时,该菜单项将为该项目执行上述步骤

    注意:实际上有几种不同的方法可以使用Jenkins触发带有参数的构建。例如,您可以执行POST请求,使用json传递我链接到的jenkins文档中所述的参数,使用jenkins CLI等。并非所有这些参数都可以使用文件参数,但您可以以非常类似的方式使用它们-作为自定义脚本中的一个步骤,您可以在jenkins上执行远程构建,并传递要用于测试的文件。例如,我给出的解释假设测试文件非常小;如果不是这样,您可能希望改为执行POST请求。如果您在使用一种方法时遇到问题,应该很容易将其切换为使用另一种效果更好的方法。

    我自己没有做过(我的测试是本地的),但是