🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 简介 测试步骤 **Groovy Script** 被用来在测试中执行 [Groovy](http://book.qadoc.org/groovy) 或 [JavaScript]() 代码。默认的脚本语言是 Groovy ,若要使用 JavaScript ,请修改[项目属性]() **Script Language** 的值。 脚本可以实现复杂的测试行为,比如: - 复杂的循环和条件判断。 - 在测试用例运行期间,修改测试步骤的断言。 - 复杂的数据驱动场景:动态测试用例(比如从数据库动态生成测试步骤)。 - ReadyAPI 默认断言无法完成的复杂内容校验。 - 与外部系统集成,用于读写数据。 - 触发外部动作或过程,例如发送电子邮件或启动其他程序。 - 通过与用户交互(对话框、提示等)来获得输入信息或控制命令。 要扩展脚本,请使用 [脚本库]() 。 # 编辑 Groovy 脚本 ![](https://support.smartbear.com/readyapi/docs/_images/soapui/steps/groovy-script-editor-overview.png) :-: Groovy 编辑器 使用编辑器可以完成以下工作:编写脚本代码、运行代码、查看输出、调试脚本。通过 `CTRL + MOUSE WHEEL` 调整编辑区字体大小。 在 ReadyAPI Groovy Script 步骤的脚本代码中,可以直接使用下列对象: - [log](https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html) - 提供了测试日志的接口。 - [context](https://support.smartbear.com/readyapi/apidocs/soapui/com/eviware/soapui/model/testsuite/TestCaseRunContext.html) - 提供了当前测试运行上下文的接口。 - [testRunner](https://support.smartbear.com/readyapi/apidocs/soapui/com/eviware/soapui/model/testsuite/TestCaseRunner.html) - 提供了与执行当前测试用例和测试步骤相关的测试执行对象的接口。 输入对象名称和句号(如:`testRunner.`)将自动调出代码补全窗口,或者按下快捷键 `CTRL+SPACE` 调出代码补全窗口。 >[info]如果按下 `CTRL+SPACE` 无法调出代码补全窗口,请参考: [Windows 10 修改或关闭快捷键 CTRL+SPACE](https://faq.qadoc.org/index.php?solution_id=1040) 。 # 工具栏 ![](https://support.smartbear.com/readyapi/docs/_images/soapui/steps/groovy-script-toolbar.png) # 属性列表 在 **GroovyScript Properties** 和 **Custom Properties** 选项卡编辑测试步骤 Groovy Script 的属性。 **Groovy Script Properties 选项卡** | 属性名称 | 属性描述 | |---|---| |Name | 测试步骤名称。| |Description | 测试步骤描述。| **Custom Properties 选项卡** 你可以在项目的其他测试步骤中使用 Groovy Script 步骤 **Custom Properties** 选项卡上的属性。例如,在断言测试步骤中验证这些属性值,或者检查它们然后通过 [Conditional GoTo](ConditionalGoTo.md) 测试步骤来改变执行流。 您可以通过加载文件来添加、修改、删除和更改自定义属性的值,或者将它们保存到文件中。详细信息请参阅 [属性](属性.md) ,以下是自定义属性的介绍: **result** 只读属性,值为脚本执行结果(`return` 语句返回的值)。 ``` ... return myVariable; ... ``` >[success]如果没有 `return` 语句,将返回脚本最后一行的执行结果。 **script** 完整脚本代码的字符串。 # 调试 Groovy 脚本 调试脚本表示在某一行停止执行程序,然后从停止的位置开始逐步执行。每当调试器停止执行程序时,你都可以检查变量的值。 因此对跟踪你的测试脚本正在做什么很有帮助。 调试期间,ReadyAPI 会将所有可用变量的信息展示在 `Debug Info` 选项卡: ![](https://support.smartbear.com/readyapi/docs/_images/soapui/steps/groovy-debug-info.png) ## 要求和限制 - Groovy 脚本调试仅在 SoapUI Pro 中可用。 - 脚本调试只能用于 Groovy Script 测试步骤。 - 一次只能调试一个脚本,不支持同时调试多个脚本或测试用例。 - 对于二进制安装包:与 ReadyAPI 安装包不同,二进制包中没有必须的 Java 文件。ReadyAPI 依赖 Java JDK 中的 `tools.jar` 和 `attach.dll` 文件进行调试,然而在 JRE 安装环境中并不包含这些文件。并且如果没有两个文件,你将无法运行调试器。为了在二进制安装中启用 Groovy 调试: - 在本地或其他电脑上安装 JDK - 将文件 `%JDK installation folder%\lib\tools.jar` 复制到 `%ReadyAPI installation folder%\lib` 文件夹。 - 将文件 `%JDK installation folder%\jre\bin\attach.dll` 复制到 `%ReadyAPI installation folder%\bin` 文件夹。 ## 使用调试器 ### 启用调试器 为了降低操作系统开销,默认情况下,调试器是禁用的。当调试器被禁用时,点击 <img class="aqInlineImg" src="https://support.smartbear.com/readyapi/docs/_images/icon/debug.png" /> 将提示重启 ReadyAPI 以启用调试器。 **如果以 shell 脚本启动 ReadyAPI** 当你通过 shell 脚本( .bat 或 .sh 文件)启动 ReadyAPI,为了启用调试器,请添加启动参数:groovy ``` ready-api.bat groovy ``` 1、通过命令行启动 (1)切换到 ReadyAPI 安装目录的 bin 文件夹:`%ReadyAPI_HOME%\bin` 。按住 `Shift` 并右击,选择 `在此处打开命令窗口` 。 ![m1/TOIMG9832a0701114423N.png](https://img.liyunx.com/m1/TOIMG9832a0701114423N.png) (2)输入命令:`ready-api.bat groovy` ,以 Debug 模式启动 ReadyAPI 。 ![m1/TOIMGe2d110701114458N.png](https://img.liyunx.com/m1/TOIMGe2d110701114458N.png) 2、以 shell 启动 (1)在 `%ReadyAPI_HOME%\bin` 下新建一个 `ready-api-debug.bat` 文件,写入以下内容: ``` ready-api.bat groovy ``` (2)将 `ready-api-debug.bat` 的快捷方式发送到桌面。 **永久启用调试器** 按照下面的步骤将调试器改为默认启用: **Windows 系统** 1、打开 `ReadyAPI.vmoptions` 文件。 >[success]`ReadyAPI.vmoptions` 文件位于 \<ReadyAPI folder\>/bin/ 文件夹,且名字类似于 `ReadyAPI-2.x.x.vmoptions` 。 2、添加如下配置: ``` -agentlib:jdwp=transport=dt_shmem,suspend=n,server=y ``` 3、保存文件。 **Linux 系统** 1、在文本编辑器中打开 ReadyAPI 执行文件。 2、取消下面部分的注释: ~~~ # uncomment the following lines to enable Groovy debugger by default DEBUG_PORT=53677 netstat -an | grep $DEBUG_PORT | grep LISTEN >/dev/null 2>&1 while [ $? = 0 ] do DEBUG_PORT=$((DEBUG_PORT+1)) netstat -an | grep $DEBUG_PORT | grep LISTEN >/dev/null 2>&1 done INSTALL4J_ADD_VM_PARAMS="$INSTALL4J_ADD_VM_PARAMS -agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,suspend=n,server=y" # end of Groovy debugger switching script ~~~ 3、保存文件。 ### 开始调试 点击 <img class="aqInlineImg" src="https://support.smartbear.com/readyapi/docs/_images/icon/debug.png" > 开始调试。调试有两种方式: **调试测试步骤 Groovy Script** 调试你的 Groovy 脚本: ![](https://support.smartbear.com/readyapi/docs/_images/soapui/steps/groovy-debug-script.png) **调试测试用例、测试套件或一个项目** 在 Debug 模式下运行整个测试。每遇到一个 Groovy Script (测试步骤)中的断点,测试都将停止。 ![](https://support.smartbear.com/readyapi/docs/_images/soapui/steps/groovy-debug-from-project.png) ### 使用断点 断点是脚本中的一个位置,脚本或测试在执行期间将在此位置暂停。执行一旦暂停,ReadyAPI 将打开断点所在行,以便检查测试的状态、输出和变量。 设置断点的两种方式: - 点击左边的空白处,在该行设置断点 ![](https://support.smartbear.com/readyapi/docs/_images/soapui/steps/groovy-debug-left-margin.png) - 在要设置断点的位置右击,选择 **Toggle Line Breakpoint** 。 ![](https://support.smartbear.com/readyapi/docs/_images/soapui/steps/groovy-debug-context-menu.png) ### 调试 当测试运行到某个断点时,ReadyAPI 将启用以下命令: - <img class="aqInlineImg" src="https://support.smartbear.com/readyapi/docs/_images/icon/step-over.png" > **Step over** - 单步执行,执行点在当前脚本,不会进入被调用的其他脚本。换句话说,当该行语句有子函数时,不会进入子函数内部,而是将子函数整个执行完。在没有子函数的情况下是和 **Step into** 效果一样。 - <img class="aqInlineImg" src="https://support.smartbear.com/readyapi/docs/_images/icon/step-into.png" > **Step into** - 单步执行,遇到子函数就进入并且继续单步执行。 - <img class="aqInlineImg" src="https://support.smartbear.com/readyapi/docs/_images/icon/resume-debugging.png" > **Resume debugging** - 继续执行,直到遇到下一个断点停止。 - <img class="aqInlineImg" src="https://support.smartbear.com/readyapi/docs/_images/icon/goto-end.png" > **Continue to end** - 继续执行,直到当前脚本的末尾,忽略中间的任何断点。If there are other scripts with breakpoints in the test run, the test will still stop on them.(I can't translate this sentence. Help me.) # 日志 **Log Output** 面板用来显示运行脚本时输出的各种日志信息。例如,你可以使用 `log.info` 方法来输出一些提示信息: ``` // 运行测试步骤 def tst = testRunner.runTestStepByName("Groovy Script") // 将测试步骤的运行状态输出到 Log Output 面板 log.info(tst.status) ``` # 断言 参考 [Groovy Script]() 断言。 关于 Groovy 的更多用法请参考 [Groovy 实战指导](Groovy.md) 。 --- :-: --- 贡献者名单(排名不分先后) --- :-: **材料** 官网英文文档 :-: **编写** 李云 :-: **校验** :-: **支持**