繁体   English   中英

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

[英]Run TestNG/JUnit Integration Tests on Remote Server from within IDE

Inside my IDE (Eclipse or NetBeans, doesn't matter), i have some TestNG testclasses (But my question also refers to remote JUnit tests), which are Integration tests. 这些测试需要集成服务器才能运行,它们不能在本地机器上运行。 他们需要完整的集成服务器环境——不仅仅是 JavaEE 容器相关的东西(=> 没有 Arquillian 也没有 JEEUnit)。

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

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

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

我知道我还可以为我的应用程序创建 Web 服务,然后我可以从本地单元测试中调用它们。 但是我想知道没有Webservices是否也有可能。

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

其中大部分将开箱即用。 但是,有一点需要一些额外的工作。

您需要执行以下操作:

  1. 在 Jenkins 中设置一个名为“集成测试”的作业(名称无关紧要)。 将其配置为运行您希望能够从 IDE 运行的测试,并允许远程计算机触发构建。
  2. 将此作业设为参数化作业,并添加文件参数。 让我们假设这被称为“TestingProgram”。 这将是作业将测试的程序。
  3. 使集成测试作业使用 TestingProgram 文件来运行测试。 如果您的程序需要多个文件,则假设这将是一个包含所有必要文件的 zip 文件。
  4. 配置您的 Eclipse 项目以生成集成测试作业所期望的相同文件(我假设这已经发生,因为它可能正在构建您程序的某种 bin 版本)

现在是连接 Eclipse 到 Jenkins 的稍微复杂的部分。 不幸的是,我认为没有任何预先存在的工具可以完全满足您的需求。 好消息是使用自定义脚本应该非常简单。 脚本所要做的就是:

  1. 如果您的程序需要多个文件,而 eclipse 还没有这样做,则需要 zip 这些文件
  2. 它需要获取文件并将其读入某个变量,然后 base64 对其进行编码。 有很多库可以为您处理大部分内容,例如这个 让我们假设这个文件被读入一个名为$programFile的变量
  3. 它需要向http://<your-jenkins-server>:8080/<integrated-testing-job-name>/buildwithparameters?TestingProgram=$programFile发送 HTTP 请求

您可以阅读更多关于使用jenkins 文档中的参数触发 Jenkins 远程构建的信息。

完成这些步骤的脚本几乎可以是任何东西。 鉴于您希望最终将其合并到 IDE 中,似乎最合乎逻辑的选择是 ant 脚本或 Eclipse 插件。 两者都不会太复杂 - ant 脚本只会执行这些步骤,您可以将 ant 脚本导入 Eclipse 项目,该项目专门用于在项目中运行时执行测试 - 并且在项目中运行时,只需添加一个菜单项即可该项目的上述步骤。

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

In my solution, I will lunch a local JNDI server and add a remote object (an object implement the Remote interface), then you could use the remote object to sync your local IDE and remote server or other place.

不幸的是,我没有现成的解决方案,但我想我可以给你一些提示,因为我花了一些时间思考这个问题。

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

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

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

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

我自己没有做过(我的测试是本地的),但这里有一些可以工作的东西:

  • Cargo可用于运行服务器并将模块部署到其中
  • 可以使用 Cactus(相当老的)或 JUnitEE 来运行测试。 在这两种情况下,您都使用 JUnit 实现测试并远程运行它们。 另一种选择是编写测试以与运行测试并返回报告的服务器上的专用 API 进行交互。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM