在我的IDE(Eclipse或NetBeans,无所谓)中,我有一些TestNG测试类(但我的问题还涉及远程JUnit测试),它们是Integration测试。这些测试需要集成服务器才能运行,它们无法在本地计算机上运行。他们需要集成服务器的完整环境 - 不仅是JavaEE容器相关的东西(=>没有Arquillian,也没有JEEUnit)。
现在我希望能够在我的IDE(Eclipse)中运行这些测试 - 最好使用TestNG插件 - 但是当我启动它们时,它们实际上应该在远程集成服务器上运行。
是否可以在IDE中从远程服务器上启动集成测试? 我喜欢在远程服务器上安装某种代理的想法,它等待测试请求并执行它们。但正如我所说,如果这是从TestNG插件内部运行的话会很好。
我是否需要某种解决方法,例如Ant脚本(希望不是)或某些Maven魔法?什么是最佳实践?
我知道我也可以为我的应用程序创建Webservices,然后我可以从本地单元测试中调用它们。但是我想知道是否还有没有Webservices的可能性。
答案 0 :(得分:4)
您将如何实现这一点取决于您正在使用的集成服务器和IDE以及您的应用程序。我假设你正在使用Eclipse;我假设你正在使用Jenkins,因为IMO最容易让它做你想做的事。
大部分内容都可以直接使用。但是,有一点需要额外的工作。
您需要执行以下操作:
现在,将Eclipse连接到Jenkins稍微复杂一点。不幸的是,我认为没有任何预先存在的工具能够完全满足您的需求。好消息是使用自定义脚本实现它应该非常简单。所有脚本必须做的是:
$programFile
http://<your-jenkins-server>:8080/<integrated-testing-job-name>/buildwithparameters?TestingProgram=$programFile
您可以阅读有关使用the jenkins docs中的参数触发Jenkins远程构建的更多信息。
完成这些步骤的脚本几乎可以是任何东西。鉴于您希望最终将其合并到IDE中,似乎最合乎逻辑的选择是ant脚本或Eclipse插件。两者都不会太复杂 - 蚂蚁脚本只会执行这些步骤,您可以将ant脚本导入到专门用于测试的Eclipse项目中 - 而插件只需添加一个菜单项,当在项目中运行时,它将执行该项目的上述步骤。
注意:实际上有几种不同的方法可以使用Jenkins触发带参数的构建。例如,您可以执行POST请求,使用json传递参数,如我链接到的jenkins文档中所述,使用Jenkins CLI等。并非所有这些都使用文件参数,但您可以在所有文件参数中使用它们非常相似的方式 - 作为自定义脚本中的一个步骤,您将在Jenkins上执行远程构建,并传递您要用于测试的文件。例如,我给出的解释假设测试文件非常小;如果不是这种情况,您可能希望改为执行POST请求。如果使用一种方法遇到问题,应该很容易将其切换为使用效果更好的其他方法。
答案 1 :(得分:2)
不幸的是我没有现成的解决方案,但我想我可以给你一些提示,因为我花了一些时间思考这个问题。
我不知道TestNG,但JUnit能够插入自己的测试执行程序。我确信TestNG具有适当的功能。所以,找到它并熟悉它。由于您可以控制调用测试的方式,因此您甚至可以执行其他操作而不是调用测试用例的方法。例如,调用一些远程API,使测试远程运行。
显然,可以通过Web服务使远程代理(根据您的建议)在远程计算机上运行测试。这很好,但我更喜欢无代理或半无代理的解决方案。我的意思是什么?例如,如果您的远程计算机是Unix,则可以执行SSH或Telnet连接并运行命令行。在这种情况下,您可以创建mvn或ant脚本,使用ssh复制到远程计算机,然后运行它。该脚本将运行您的测试。所以它几乎没有代理。您只需要Java安装和SSH支持。
如果远程计算机是Windows,则可以使用Telnet或WMI。因此,如果安全性不是问题,但您需要跨平台支持,请使用Telnet。
如果您需要有关SSH / Telnet的更多帮助,请随时与我联系。
答案 2 :(得分:2)
我自己没有这样做(我的测试是本地测试),但这里有一些可行的方法:
答案 3 :(得分:2)
在我的解决方案中,我将在本地JNDI服务器上午餐并添加远程对象(对象实现Remote接口),然后您可以使用远程对象同步本地IDE和远程服务器或其他位置。