SoapUI Groovy 脚本:实战指南与核心操作
掌握 SoapUI 中的 Groovy 脚本,能让 API 自动化测试更高效灵活。本文将通过具体代码示例,系统讲解如何对测试用例、数据结构及流程进行自动化操控,涵盖日常开发中的高频应用场景。
测试用例操作
访问测试步骤
通过步骤名称获取指定测试步骤,是脚本操作的基础。以下两种方法均可实现:
testRunner.testCase.testSteps[name]testRunner.testCase.getTestStepByName(name)
访问父级、兄弟级
需要跨层级操作时,可以通过完整的上下文路径访问项目、测试套件、测试用例及步骤,实现更复杂的流程交互。
testRunner.testCase.testSuite.project.testSuites[name].testCases[name].testSteps[name]
获取请求与响应
提取 HTTP 请求与响应内容是自动化验证的关键:
myResponse=testRunner.testCase.getTestStepByName(name).testRequest.responsemyRequest=testRunner.testCase.getTestStepByName(name).testRequest可以替换使用:getTestRequest(),testSteps[name],getResponse()等。
获取与设置请求头
动态处理请求头信息,可以模拟不同的客户端或环境。
testRunner.testCase.getTestStepByName(name).testRequest.response.responseHeaders[name]或者testRunner.testCase.getTestStepByName(name).testRequest.getResponse().getResponseHeaders(name)
设置请求头
def headerMap = new StringToStringMap()headerMap.put(name,value) testRunner.testCase.getTestStepByName(name).testRequest.setRequestHeaders(headerMap)
获取端点 URL
快速获取当前测试请求的访问路径。
testRunner.testCase.getTestStepByName(name).testRequest.path
获取测试步骤属性
灵活读取请求或响应的内部属性,如路径、请求头等,用于动态断言。
testRunner.testCase.getTestStepByName(name).testRequest.getAt("path")对应:testRunner.testCase.getTestStepByName(name).testRequest.pathtestRunner.testCase.getTestStepByName(name).testRequest.response.getAt("responseHeaders")对应:testRunner.testCase.getTestStepByName(name).testRequest.requestHeaders
遍历测试用例与步骤
通过脚本遍历项目中的测试用例和步骤,可实现批量操作与条件筛选。
读取在SoapUI项目级别定义的全局变量,用于数据驱动。 使用 JsonBuilder 快速构建结构化的 JSON 数据,适用于创建 API 请求负载。 利用 JsonSlurper 解析响应体,支持通过点语法或谓词查找精确提取和验证数据。 通过原生 JDBC 接口连接 MySQL 数据库并执行查询,适用于需要精细控制数据库操作的场景。 Groovy 提供的 Sql 类能极大简化数据库连接与操作代码,提升脚本可读性和编写效率。 通过脚本控制测试执行逻辑,如跳转步骤、条件失败、步骤间传值等,实现动态测试流。 for(int i=0; i获取项目级自定义属性
def time_num=context.expand('${#Project#time_num}')
JSON 数据处理
动态生成 JSON 请求体
def createAuthorId = context.expand(name)def flag = "1"import groovy.json.JsonBuilderdef json = new JsonBuilder()json {userIDcreateAuthorIdfileflagflag}return json
解析与校验 JSON 响应
import groovy.json.JsonSlurperdef xresponse = testRunner.testCase.testSteps["getCalendarListByCoid"].testRequest.response.contentAsStringdef slurper = new JsonSlurper()def re = slurper.parseText(xresponse)re.calendar re.calendar.size()re.calendar.calendar_id re.calendar.calendar_id[index]re['calendar']['calendar_id'][index]re.calendar.calendar_id.find{it=='1706'}re.calendar.find{it.calendar_id=='1706'}
数据库连接与查询
使用 JDBC 连接数据库
import ja va.sql.Connection;import ja va.sql.DriverManager;import ja va.sql.ResultSet;import ja va.sql.SQLException;import ja va.sql.Statement;public class JDBCExample1 {public static void main(String[] args) { Connection con = null; Statement stmt = null; ResultSet rs = null; try{ Class.forName("org.gjt.mm.mysql.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/words","words", "words"); stmt = con.createStatement(); rs = stmt.executeQuery("select * from word"); while (rs.next()) { System.out.println("word id: " + rs.getLong(1) + " spelling: " + rs.getString(2) + " part of speech: " + rs.getString(3)); } }catch(SQLException e){ e.printStackTrace(); }catch(ClassNotFoundException e){ e.printStackTrace(); }finally{ try{rs.close();}catch(Exception e){} try{stmt.close();}catch(Exception e){} try{con.close();}catch(Exception e){}}}}
使用 Groovy Sql 简化数据库操作
import groovy.sql.Sql sql = Sql.newInstance("jdbc:mysql://localhost:3306/words", "words","words", "org.gjt.mm.mysql.Driver")
测试流程控制
testRunner.testCasetestRunner.fail(....)testRunner.gotoTestStepByname(name)testRunner.runTestStepByname(name)context.myProperty="xxxx"
