出处:https://www.jianshu.com/p/ce6f8a1f66f4

一、一些内部元件的访问

testRunner.testCase开头

1、向下访问

testRunner.testCase.testSteps[testStepName]

testRunner.testCase.getTestStepByName("新增一个空间")

2、向上访问,用于访问同一项目中的其他testSuites 和 testCase下的元素

testRunner.testCase.testSuite.project.testSuites[testSuiteName].testCases[testCaseName].testSteps[testStepName]

3、几乎所有元件都有get 和set属性的方法

setPropertyValue getPropertyValue

//在下面的4,5,6点中,几乎所有的属性值都可以和对应的get方法互相替换等价

4、获取响应体

myResponse=testRunner.testCase.getTestStepByName("新增一个空间").testRequest.response

myRequest=testRunner.testCase.getTestStepByName("新增一个空间").testRequest

可以替换使用:getTestRequest(),testSteps[testStepName],getResponse()等。

比较特殊的2个

获取响应作为String

myResponse.contentAsString 或者 myRequest.getResponseContentAsString()

获取响应作为Xml

myResponse.contentAsXml 或者myRequest.getResponseContentAsXml()

5、响应头和请求头

响应头:

testRunner.testCase.getTestStepByName("新增一个空间").testRequest.response.responseHeaders["Location"]

或者testRunner.testCase.getTestStepByName("查询空间详情").testRequest.getResponse().getResponseHeaders("Location")

请求头:

testRunner.testCase.getTestStepByName("查询空间详情").testRequest.requestHeaders

testRunner.testCase.getTestStepByName("查询空间详情").testRequest.getRequestHeaders("Location")

设置请求头

def headerMap = new StringToStringMap() //

headerMap.put("headerKeyName","HeaderKeyWord") //添加到map

testRunner.testCase.getTestStepByName("查询空间详情").testRequest.setRequestHeaders(headerMap)

6、获取请求地址

testRunner.testCase.getTestStepByName("查询空间详情").testRequest.path

7、getAt(String) 方法,传入property名字,检索出值

针对testRunner下的所有对象,都可以通过此方法直接获取到 属性,例如:

testRunner.testCase.getTestStepByName("查询空间详情").testRequest.getAt("path")

对应:testRunner.testCase.getTestStepByName("查询空间详情").testRequest.path

testRunner.testCase.getTestStepByName("查询空间详情").testRequest.response.getAt("responseHeaders")

对应:testRunner.testCase.getTestStepByName("查询空间详情").testRequest.requestHeaders

8、获取全部用例并循环

def testCaseList = testRunner.testCase.testSuite.getTestCaseList()

testCaseList.each{

if(it.testSteps["Input"])

it.testSteps["Input"].setPropertyValue("spaceid",uid)

}

9、相对的获取用例数,getTestCaseCount()

for(int i=0; i

if (!testSuite.getTestCaseAt(i).isDisabled()) {

if (!(testSuite.getTestCaseAt(i).getTestStepByName("stepName")).equals()){

.....

}

}

}

10、获取getTestSuiteCount()

testRunner.testCase.testSuite.project.getTestSuiteCount()

11、获取名称

部分元件只有Label和Name中的一个,测试一下就知道了。

getLabel() 和getName()大多数情况是等价的

a. 取test case的名称

def tc = testRunner.testCase;

log.info (tc.getLabel());

b. 取test suite的名称

def ts = testRunner.testCase.testSuite;

log.info (ts.getLabel());

getName()

取project 名称

def tp = testRunner.testCase.testSuite.project;

log.info (tp.getName());

12、在断言中需要使用用例对象的话

messageExchange.modelItem.testCase.testSteps["Properties"].getPropertyValue("userId")

13、全局属性变量访问

对于项目中的属性可分为这么几个级别Global, Project,TestSuite, TestCase

即全局变量、项目级别、用例集级别、单个用例级别

要获得如项目级别的属性变量的话,可以用以下方法

def time_num=context.expand('${#Project#time_num}') //##号内为定义哪个级别的属性变量,后面为属性名

二、json操作

1、json builder

def createAuthorId = context.expand( '${查询空间详情#Response#$.createAuthorId}' )

def flag = "1"

import groovy.json.JsonBuilder

def json = new JsonBuilder()

json {

userID createAuthorId

fileflag flag}

return json

2、json 解析

如json为:

{"calendar": [ {"calendar_id":"1705","showtime":"1288927800","endshowtime":"1288931400","allDay":false},

{"calendar_id":"1706","showtime":"1288933200","endshowtime":"1288936800","allDay":false},

{"calendar_id":"1709","showtime":"1288935600","endshowtime":"1288938900","allDay":false}

] }

import groovy.json.JsonSlurper

def xresponse = testRunner.testCase.testSteps["getCalendarListByCoid"].testRequest.response.contentAsString

def slurper = new JsonSlurper()

def re = slurper.parseText(xresponse)

//访问顶级元素,返回的是一个列表使用size 获得长度

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'} //获得的结果是 calendar_id 1706

re.calendar.find{it.calendar_id=='1706'} //获得的是calendar元素

三、XML操作(解析)

ef groovyUtils = new com.eviware.soapui.support.GroovyUtils(context )

//获取上下文对象,转化成groovyUtils对象

defwsdlResponse=testRunner.testCase.testSteps["发贴"].getTestRequest().getResponseContentAsXml()

log.info("wsdlResponse==="+wsdlResponse)

//获取指定步骤的返回信息并转化成xml

holder = groovyUtils.getXmlHolder(wsdlResponse)

//获取指定节点的值

defmessage=holder.getNodeValue("//ns1:Response[1]/ns1:response[1]/ns1:e[1]/ns1:message[1]")

log.info("获得节点对应的值是"+message)

deffandom_creator_sn=holder.getNodeValue("//ns1:fandom_creator_sn")

log.info("获得节点对应的值是"+fandom_creator_sn)

四、文件操作

直接百度groovy文件操作就好了,用得少不收集了

五、各级别的集合操作

1、TestSteps的操作

testRunner.testCase.testSuite.project.testSuites["互动空间测试用例"].testCases["空间管理测试"].testSteps

=getTestSteps()。都是获取用例下的testStep列表,返回的是 key=object 形式的字典map

getTestStepList() 获取用例下的testStep列表,纯列表

getTestStepCount() 获取数量

getTestStepAt(int) getTestStepById(java.util.UUID) 通过位置和UUID 查找step

getTestStepsOfType(com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep.class) 通过类型过滤查找得到 testSteps列表。

2、testCases操作

testRunner.testCase.testSuite.project.testSuites["互动空间测试用例"].testCases=getTestCases()

返回的是 key=object 形式的字典map

getTestCaseList(), 获取的列表,纯列表

getTestCaseCount(), 获取数量

getTestCaseAt(int), getTestCaseById(java.util.UUID) 通过位置和UUID

3、testSuites操作

testRunner.testCase.testSuite.project.testSuites=getTestSuites()

返回的是 key=object 形式的字典map

getTestSuiteList(),获取的列表,纯列表

getTestSuiteCount() 获取数量

,getTestSuiteAt(int), getTestSuiteById(java.util.UUID) 通过位置和UUID

4、返回是list时操作

testCaseList=testRunner.testCase.testSuite.project.testSuites["互动空间测试用例"].getTestCaseList()

log.info testCaseList[0] //使用 index访问

//each循环

testCaseList.each{

it.xxxxx

}

5、返回是map时操作

testStepsMap=testRunner.testCase.testSuite.project.testSuites["互动空间测试用例"].testCases["空间管理测试"].testSteps

//使用名称key访问

log.info testStepsMap["新增一个空间"]

log.info testStepsMap.get("新增一个空间")

//遍历 使用默认闭包it

testStepsMap.each{

log.info it.key+" "+it.value

}

//使用自定义闭包名称遍历

testStepsMap.each{myp->

log.info myp.key+" "+myp.value

}

六、数据库操作

1、普通的jdbc编程

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){}

}

}

}

2、grrovy sql

import groovy.sql.Sql

sql = Sql.newInstance("jdbc:mysql://localhost:3306/words", "words",

"words", "org.gjt.mm.mysql.Driver")

查出所有行

sql.eachRow("select * from word"){ row |

println row.word_id + " " + row.spelling + " " + row.part_of_speech

}

执行插入操作

wid = 999

spelling = "Nefarious"

pospeech = "Adjective"

sql.execute("insert into word (word_id, spelling, part_of_speech)

values (${wid}, ${spelling}, ${pospeech})")

使用位置参数

val = sql.execute("select * from word where word_id = ?", [5])

更新

nid = 5

spelling = "Nefarious"

sql.executeUpdate("update word set word_id = ? where spelling = ?", [nid, spelling])

删除

sql.execute("delete from word where word_id = ?" , [5])

创建数据集

sql = Sql.newInstance("jdbc:mysql://localhost:3306/words", "words",

"words", "org.gjt.mm.mysql.Driver")

words = sql.dataSet("word")

words.each{ word |

println word.word_id + " " + word.spelling

}

words.add(word_id:"9999", spelling:"clerisy", part_of_speech:"Noun")

查询结果集的访问

sql.eachRow("select * from word"){ grs |

println "-1 = " + grs.getAt(-1) //使用索引访问最后一个

println "2 = " + grs.getAt(2) //使用索引访问第三个

grs.columName //通过列名访问

}

七、流程控制方面

testRunner.testCase //可以访问和操作项目中的所有对象

testRunner.fail(....) testRunner.cancel,结束测试执行

testRunner.gotoTestStepByname("Groovy Script") // goto 表示跳转到哪一步开始执行,会等待当前脚本执行完成再跳转到对应步骤执行

testRunner.runTestStepByname("Groovy Script") //脚本会先去执行这个步骤,然后继续执行当前脚本

context.myProperty="aaaa" //会在上下文中创建一个名为myProperty的属性,赋值为aaa

八、脚本返回值和引用

return UUID.randomUUID() \\return 返回数据

${Groovy Script#result} \\引用

def result = context.expand( '${Groovy Script#result}' ) \\引用

九、抄的两个实例之一----为所有RestTestRequestStep设置请求头(Cookie,session),以及编码

import com.eviware.soapui.support.types.StringToStringMap

def cookiesList = testRunner.testCase.getTestStepByName("登录").testRequest.response.responseHeaders["Set-Cookie"] //获得登陆后返回响应中的set-cookie

log.info "cookiesList:" + cookiesList

def cookieNew =""

cookiesList.each{

cookieNew = cookieNew+it.split(";")[0]+";"; //拆分得到 SESSION

}

log.info "Cookie:"+cookieNew

def cookieMap = new StringToStringMap() //cookiemap

cookieMap.put("Cookie",cookieNew) //添加到map

//Pass cookie to all testSteps of the project

//将cookieMap设置到项目中的所有RestTestRequestStep,顺带设置编码

def testSuiteList = testRunner.testCase.testSuite.project.getTestSuiteList()

def testCaseList

def testStepList

testSuiteList.each{

testCaseList = it.getTestCaseList()

testCaseList.each{

//获得RestTestRequestStep类型的testStepList

testStepList = it.getTestStepsOfType(com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep.class)

testStepList.each{

if(it.name!="登录"){

it.testRequest.setRequestHeaders(cookieMap)

it.testRequest.setEncoding("UTF-8")

}

}

}

}

log.info "==========Cookie:"+ cookieMap.get("Cookie");

十、抄的两个实例之二----数据库验证

import com.eviware.soapui.support.types.StringToStringMap

def Location= testRunner.testCase.getTestStepByName("新增一个教材册次").testRequest.response.responseHeaders["Location"]

log.info "Location:" + Location[0]

def uid = Location[0].split("/")[-1]

testRunner.testCase.testSteps["Input"].setPropertyValue("uid",uid)

log.info "uid:" + uid

import groovy.sql.Sql

//获取testSuite对象,以获取其中参数

def DBProperties = testRunner.testCase.testSuite

//获取数据库对象

def sql = Sql.newInstance(DBProperties.getPropertyValue( "connection-url" ),DBProperties.getPropertyValue( "sysdb-user-name" ),

DBProperties.getPropertyValue( "sysdb-password" ),DBProperties.getPropertyValue( "driver-class" ))

def query = "Select * From inf_book_second Where inf_book_second.uid = '"+ uid +"'"

def raw = sql.firstRow(query )

log.info query

def expect_name = testRunner.testCase.getTestStepByName( "Properties" ).getPropertyValue('name')

log.info "expect_name: "+expect_name

def actual_name = raw.name

log.info "actual_name: "+actual_name

//断言

assert actual_name ==expect_name

mysql 向上汇总_soapui groovy脚本汇总相关推荐

  1. mysql 获取刚插入行id汇总

    mysql 获取刚插入行id汇总 我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的. ...

  2. SQL Performance Analyzer SPA常用脚本汇总

    SPA常用脚本汇总 附件为 一个SPA报告 spa_buffergets_summary SQL 性能分析器 SQL Performance Analyzer SPA Oracle Database ...

  3. mysql函数大全最小,MySQL函数一览_MySQL函数全部汇总

    前言 MySQL提供了众多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求.本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时 ...

  4. IDEA不愧为神器,结合Groovy脚本,简直无敌!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 人间哪有四月天 来源 | segmentfau ...

  5. groovy定义变量获取当前时间_IDEA不愧为神器,结合Groovy脚本,简直无敌!

    作者:人间哪有四月天 segmentfault.com/a/1190000020189801 导语 如今,有许许多多的插件或者编辑器都支持根据数据表自动生成数据实体类了, 比如IDEA, 各种MyBa ...

  6. 复杂多变场景下的Groovy脚本引擎实战

    作者:vivo互联网服务器团队-Gao Xiang 一.前言 因为之前在项目中使用了Groovy对业务能力进行一些扩展,效果比较好,所以简单记录分享一下,这里你可以了解: 为什么选用Groovy作为脚 ...

  7. java groovy jar包_如何将jar包包含在groovy脚本中?

    如果你真的需要,你也可以在运行时加载一个JAR: this.getClass().classLoader.rootLoader.addURL(new File("file.jar" ...

  8. ElasticSearch Groovy脚本远程代码执行漏洞

    什么是ElasticSearch? 它是一种分布式的.实时性的.由JAVA开发的搜索和分析引擎. 2014年,曾经被曝出过一个远程代码执行漏洞(CVE-2014-3120),漏洞出现在脚本查询模块,由 ...

  9. 监控mysql的shell脚本_监控MySQL主从状态的shell脚本

    分享一个Linux下,监控MySQL主从状态及配合企业微信机器人报警的Shell脚本 SLAVE_IP:为监控的主机IP USER:为msyql用户 PASSWORD:为mysql密码 WHEREIS ...

最新文章

  1. t-top 命令详解
  2. ES5-Array-valueOf/toString
  3. Intel Realsense D435 是否启动pipeline.start()就开始传输帧,还是只有我们调用wait_for_frames()函数时它才会传输帧?(任务管理器USB带宽内存测试)
  4. 换种思路去理解设计模式
  5. react中的state详解
  6. 损失函数与优化器理解+【PyTorch】在反向传播前为什么要手动将梯度清零?optimizer.zero_grad()
  7. (转)Android 如何建立你的菜单
  8. visio2013激活软件
  9. AppData、Roaming、Locallow等文件夹中常见大文件夹有哪些、有什么用以及如何清理方法参考资料
  10. POJ 3537 Crosses and Crosses 博弈论 SG函数 记忆化搜索
  11. 基于python的第三方库Pyautogui实现程序自动控制鼠标与键盘
  12. 2D游戏案例:雷霆战机
  13. 二分法(Bisection)求解单根(python,数值积分)
  14. 秋招公司真题刷题2019-2020java工程师
  15. `SpringBoot`+`axios`结合发送`ajax`请求
  16. 计算机导论模板,计算机导论论文提纲范文模板 计算机导论论文大纲怎样写
  17. 优化算法中的鞍点与梯度下降
  18. SAP系统资产年结步骤、以及资产年结错误后处理方式
  19. 【招银网络科技java面试题目面试经验】-看准网
  20. SMBIOS读取本机的MEMORY信息

热门文章

  1. 爬虫入门经典(十七) | 图形验证码识别
  2. vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别(上)
  3. 数据挖掘十大算法之决策树详解(1)
  4. 前端入门【HtmlCSS】
  5. jQuery与DOM的区别
  6. php上传视频太慢,优酷上传视频教程及上传慢和时间等问题
  7. python回文数判断_python回文数判断
  8. MySQL内置函数存储过程视图JDBC
  9. 如何实现对数ln运算?
  10. 什么行业前景好最赚钱?来看看,这十大最赚钱的行业!