SoapUI Groovy 脚本
测试用例操作
SoapUI Groovy 提供了一些脚本,让我们可以完成增删改查的效果~
访问子级测试步骤
testRunner.testCase.testSteps[name]
testRunner.testCase.getTestStepByName(name)
访问父级、兄弟级
可以使用脚本访问父级,或者访问其他兄弟级别的测试步骤。
testRunner.testCase.testSuite.project.testSuites[name].testCases[name].testSteps[name]
获取响应
myResponse=testRunner.testCase.getTestStepByName(name).testRequest.response
myRequest=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.path
testRunner.testCase.getTestStepByName(name).testRequest.response.getAt("responseHeaders")
对应:testRunner.testCase.getTestStepByName(name).testRequest.requestHeaders
获取测试用例数量
for(int i=0; i<testSuite.getTestCaseCount(); i++) {
if (!testSuite.getTestCaseAt(i).isDisabled()) {
if (!(testSuite.getTestCaseAt(i).getTestStepByName(name)).equals()){
.....
}
}
}
获取全局变量
def time_num=context.expand('${#Project#time_num}')
JSON 操作
构建 JSON
def createAuthorId = context.expand(name)
def flag = "1"
import groovy.json.JsonBuilder
def json = new JsonBuilder()
json {
userID createAuthorId
fileflag flag}
return json
解析 JSON
import groovy.json.JsonSlurper
def xresponse = testRunner.testCase.testSteps["getCalendarListByCoid"].testRequest.response.contentAsString
def 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'}
数据库
JSBC
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.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){}
}
}
}
SQL
import groovy.sql.Sql
sql = Sql.newInstance("jdbc:mysql://localhost:3306/words", "words",
"words", "org.gjt.mm.mysql.Driver")
流程操控
testRunner.testCase
testRunner.fail(....)
testRunner.gotoTestStepByname(name)
testRunner.runTestStepByname(name)
context.myProperty="xxxx"
聊聊 SoapUI
其实 SoapUI Groovy 脚本 是挺好用的,就是 SoapUI 用起来感觉不太好用,门槛较高:
- 不支持中文
- 不免费
- 界面难看
- 操作麻烦
今天给大家推荐一个超级好用,同意支持 脚本操作 的 API 工具 —— Apifox
Apifox 脚本使用
Apifox 支持脚本的使用,而且非常方便使用,我们可以查看 Apifox 的帮助文档,里面写的很详细
帮助文档地址:https://www.apifox.cn/help/app/scripts/
主要分成以下脚本操作:
- 前置脚本:在接口请求前执行的脚本
- 后置脚本:在接口请求后执行的脚本
- 公共脚本:可以公用的脚本
Apifox 脚本实践
目标:我们现在用 Apifox 的脚本去完成两个操作:
- 获取请求url
- 检测返回数据的 code 是否为 200
接口创建
我们先新建一个接口,并填好 名称、URL、Method 等信息。
前后置脚本
我们的两个目标是:
- 获取请求url:需要在前置脚本里做
- 检测返回数据的 code 是否为 200:需要在后置脚本里做
前置脚本
选择 前置脚本 中的 自定义脚本。
Apifox 提供了一些现成的脚本代码,如果你想使用的话,直接点击它们就行。
我们这里输入:
console.log(pm.request.url)
后置脚本
选择 后置脚本 中的 自定义脚本。
并选择 Apifox 为我们提供的 检验状态码 的脚本代码。
然后点击 保存 按钮。
运行
最后就是运行了,我们点击 发送 按钮,然后查看 前后置脚本代码 运行的结果:
- 得到了请求的 URL 信息
- 检验了返回的状态码为 200
Apifox
欢迎体验一下,完全免费的哦:在线使用 Apifox
Apifox 是一体化 API 协作平台,可以实现 API 文档、API 调试、API Mock、 API 自动化测试,是更先进的 API 设计/开发/测试工具。
Apifox 提供了一种全面的 API 管理解决方案。使用 Apifox ,你可以在统一的平台上设计、调试、测试以及协作你的 API,消除了在不同工具之间切换和数据不一致的问题。
个人使用体验还是不错的,推荐使用~