动机

您和您的团队正在使用Java开发Java应用程序 。您已设置一个持续集成(CI)流程,该流程可构建您的应用程序并运行电池 压扁 每次代码更改后进行测试。

到现在为止还挺好。现在,在对应用程序进行最新更改之后,自动Squish测试在一次或多次验证中开始失败。因此,您尝试修复应用程序,推送修复程序,然后让您的CI系统重新运行Squish测试。

那’s fine, but wouldn’如果您可以直接在应用程序上运行失败的测试,那就太好了 修复时,也就是说,当它在Eclipse中运行并正在调试时?

您可以。

因为Eclipse可以控制启动应用程序,所以Squish无法启动被测应用程序(AUT)本身。相反,需要制作AUT“attachable”, so 压扁 (a local 压扁 install is assumed) can interact with it. In general, this can be achieved using the startjavaaut utility shipped with 压扁 . The approach of how to let 蚀 invoke startjavaaut is described in 知识库。尽管它有其局限性,所以我们采取的路线略有不同。

实施,第一部分

首先,我们需要在启动Eclipse之前设置一些环境变量。为此,我们使用一个简短的shell脚本。它准备环境,然后启动Eclipse。大多数变量特定于Squish。最后一个是稍后在Eclipse中使用的:

Linux / eclipse_java_attachable.sh

#!/bin/sh
# Change this as needed
export SQUISH_PREFIX=/opt/squish-for-java-6.6.2

# Maybe configure this, should be a good default though
export SQUISH_ATTACHABLE_PORT=4444

# Do not change these
export TRACELIB_NO_SIGNALHANDLERS=1
export SQUISH_NO_CRASHHANDLER=1
export SQUISH_JAVA_OPTIONS='"-Dsquish.wrapper=${env_var:SQUISH_PREFIX}/lib/libsquishjavawrapper.so" "-javaagent:${env_var:SQUISH_PREFIX}/lib/squishagent.jar=${env_var:SQUISH_PREFIX}/lib" "-Xverify:none" "-Dsquish.tmpdir=/tmp/frogtemp" "-Dsquish.bcel=${env_var:SQUISH_PREFIX}/lib/bcel.jar" "-Djava.security.policy=file:/tmp/frogtemp/squish.policy"'

# Change this as needed
/opt/eclipse/eclipse
  • SQUISH_PREFIX 应该指向Squish安装。
  • SQUISH_ATTACHABLE_PORT 可以根据需要进行调整(需要介于1024和65535之间)。

Windows / eclipse \ _java \ _attachable.bat

实现相同Eclipse的批处理文件如下所示:

bat
:: Change this as needed:
set SQUISH_PREFIX=C:\users\myuser\squish-for-java-6.6.2

:: Maybe configure this, should be a good default though:
set SQUISH_ATTACHABLE_PORT=4444

:: Do not change these:
set TRACELIB_NO_SIGNALHANDLERS=1
set SQUISH_NO_CRASHHANDLER=1
set PATH=%PATH%;%SQUISH_PREFIX%\bin
set SQUISH_JAVA_OPTIONS='"-Dsquish.wrapper=${env_var:SQUISH_PREFIX}/lib/libsquishjavawrapper.so" "-javaagent:${env_var:SQUISH_PREFIX}/lib/squishagent.jar=${env_var:SQUISH_PREFIX}/lib" "-Xverify:none" "-Dsquish.tmpdir=/tmp/frogtemp" "-Dsquish.bcel=${env_var:SQUISH_PREFIX}/lib/bcel.jar" "-Djava.security.policy=file:/tmp/frogtemp/squish.policy"'

:: Change this as needed:
C:\Users\myuser\Eclipse\eclipse.exe

实施,第二部分

在Eclipse开始使用上述shell脚本的情况下,我们现在必须调整“运行/调试配置”。为此,请打开“调试配置”对话框(运行->调试配置),然后选择AUT使用的配置。在里面‘Environment’ tab we have to define the _JAVA_OPTIONS variable, which the Java VM picks up, upon AUT startup. Choose the ‘Add’ button next to the list of environment variables. The name should be _JAVA_OPTIONS and the value needs to be set to ${env_var:SQUISH_JAVA_OPTIONS}. Close the dialog with ‘OK’。然后,该变量应显示在列表中。

 蚀 调试配置对话框

应用更改后,使用此配置运行AUT。 AUT应该出现并准备好与Squish连接。

在Squish IDE中,我们必须配置“attachable AUT”。为此,我们导航至编辑->服务器设置…在对话框中,选择‘Manage AUTs’在左窗格中。在右窗格中,选择‘Attachable AUTs’ and click ‘Add…’。可以自由选择名称,主机应已设置为‘localhost’. The port number needs to match the port number that SQUISH_ATTACHABLE_PORT in the shell script points to.

 压扁  IDE 管理AUT dialog

关闭对话框后,使用‘Run’ > ‘Launch AUT’。 AUT列表现在列出新条目。选择它,然后关闭‘OK’。 压扁 现在连接到已经启动的AUT。

在测试脚本中,您可以使用 attachToApplication() 附加到正在运行的AUT的功能。

局限性

所描述的方法仅适用于Java 9及更高版本。注意:新的Java版本可能包含技术更改,需要对概述的方法进行调整。

描述的替代方法 在我们的知识库中 would touch the Java installation, which might not be feasible in a lot of cases. Since it uses the startjavaaut utility, the only requirement for new Java versions (if at all) would be to update 压扁 .

包起来

无论采用哪种解决方案,最终,我们都可以运行Squish测试并检查AUT,同时使用Eclipse开发和调试它。我们甚至可以利用Eclipse’s ‘Hot deploy’ feature.

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

复制链接