CasperJS Tests in Maven Build

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

我是自动化测试的忠实粉丝,尤其是集成测试。我坚信编写测试所花费的精力是对正在开发的产品质量和稳定性的直接投资。

CasperJS是一个基于PhantomJS的测试框架,PhantomJS是一个无头浏览器。使用CasperJS,我们可以确保我们的应用程序对常规Web浏览器发送的请求做出正确的响应。

这是一个示例CasperJS测试,它向正在运行的WAR应用程序的主页发出HTTP请求,并断言该响应具有200的HTTP状态代码。

我将这个测试保存在 src/test/casperjs/home-page.js 文件中。让我们看看如何在每次 Maven 构建中自动执行 CasperJS。

以下是使用 Maven 插件组合实现的测试场景。

  1. Install CasperJS

  2. 保留一个随机的TCP端口

  3. 在该TCP端口上启动Tomcat(内有WAR文件)

  4. 运行CasperJS测试并将其指向正在运行的Tomcat。

  5. Shutdown Tomcat

我正在使用一系列插件。我们逐一讲解每个步骤。

顺便说一下,在下面的示例中,我没有显示插件的版本,主要是因为它们大多数都在积极开发中。可以在Maven Central上检查它们的版本(是的,它们都可以在那里找到)。

首先,我们需要下载PhantomJS可执行文件。它是一个特定平台的二进制文件。感谢Kyle Lieber,我们有一个现成的Maven插件:phantomjs-maven-plugin,它能够理解当前平台是什么,并自动下载适当的二进制文件,将其放置在target目录中。

下载的二进制文件的确切名称存储在${phantomjs.binary} Maven属性中。

很遗憾,目前尚未找到适用于CasperJS安装的类似插件(至少我还没有找到)。这就是为什么我正在使用老式的git(你的构建机器上应该已经安装了它)。

3. Reserve TCP Port

我需要获取一个随机的TCP端口,用于启动Tomcat。该端口必须在构建机器上可用。我希望能够并行运行多个Maven构建,这就是为什么每次构建时我都会获取一个随机端口的原因。

在其他示例中,你可能会看到人们使用固定的端口号,比如5555或类似的数字。这是一种非常糟糕的做法。当你需要时,始终保留一个新的随机端口。

该插件保留一个端口,并将其值设置为${tomcat.port} Maven 属性。

现在,是时候使用WAR包来启动Tomcat了。我正在使用tomcat7-maven-plugin来启动一个真正的Tomcat7服务器,并将其配置为在上述保留端口上提供服务。

由于选项fork被设置为true,当插件执行完成时,Tomcat7会继续运行。这正是我所需要的。

现在,是时候运行CasperJS了。尽管有一些插件可供使用,但我使用的是简单的exec-maven-plugin,主要是因为它更灵活可配置。

环境变量 PHANTOMJS_EXECUTABLE 是使整个场景成为可能的未记录功能。它配置了PhantomJS可执行文件的位置,该文件在上面的几个步骤中下载。

在最后一步,我关闭了Tomcat服务器。

Real Example

如果你想看到这一切是如何运作的,请参考stateful.co。它是一个托管在CloudBees上的Java Web应用程序。它的源代码是开放的,并且可以在GitHub上找到。

它的pom.xml包含了上面解释的完全相同的配置,只是放在一起了。

如果你有任何问题,请随时在下方提问。

附注:还要检查一下:PhantomJS作为HTML验证器。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-16 at 15:39

sixnines availability badge   GitHub stars