每月一篇博文,一直在继续,庆幸自己在坚持。前面两篇讲解的TestStep有很多种类型,也详解了我们常用到的多种类别,在今天这篇将重点讲解Groovy Script TestStep。
我们知道在SoapUI中Groovy是一个特别重要的脚本语言,在SoapUI(免费版)和ReadAPI(收费版)中我们都可以用Groovy Script要做很多事情,特别在免费版中,因为很多功能不开放,我们只能用脚本实现。
前面的SoapUI系列文章参见以下链接:
1、SoapUI 入门之创建Project、生成TestCase以及参数化
2、SoapUI 入门之配置Headers,以及将Cookie、Token持久化存储
5、SoapUI入门之TestStep用法一(DataSource&DataSource Loop)
7、SoapUI入门之TestStep用法三(Groovy Script)
在ReadAPI官方文档中介绍,SoapUI Groovy Script Test Step可以使用两种脚本语言来编写,Groovy和JavaScript。默认使用Groovy语言,但是也可以使用JavaScript,需要在项目设置中设置Script Language。这里我们主要讲解Groovy。
一、如何添加Groovy Script TestStep

鼠标选中TestCase,右键选择Add Step-->Groovy Script。设置好名字就可以添加Groovy Script到TestCase中了。
二、SoapUI中Groovy脚本常用方法
1、SoapUI层级访问
testRunner.testCase.testSuite.project
.testSuites[testSuiteName(TestSuite的名字)]
.testCases[testCaseName(TestCase的名字)]
.testSteps[testStepName(TestStep的名字)]
TestRunner是作为SoapUI运转的基石,所有相关功能、获取都以它为基础
2、如何设置Property属性
这里设置Property属性和我们之前讲过的使用界面Property Transfer创建Property属性是一样的,只不过这里是用脚本创建而已。
2.1 设置Project项目级别的property
testRunner.testCase.testSuite.project.setPropertyValue("Key","propValue")
2.2 设置TestSuite级别的property
testRunner.testCase.testSuite.setPropertyValue("Key","propValue")
2.3 设置TestCase级别的property
testRunner.testCase.setPropertyValue("Key","propValue")
3、定位到某个TestSuite
def testSuite = testRunner.testCase.testSuite.project
.testSuites['testSuites Name'];
//通过TestSuite的名字,我们可以获取该TestSuite的实例,对其进行其他操作
4、定位到某个TestStep
def testStep = testRunner.testCase.testStep[testStep’s Name'];
//通过TestStep的名字,我们可以获取该TestStep的实例,对其进行其他操作
5、获取某个Project下TestSuite List
def testSuiteList = testRunner.testCase.testSuite.project
.getTestSuiteList();
//获取所有testSuite 列表,并且可以通过对其迭代获取TestCase以及TestStep。
并对其操作,如设置Http Header等。
6、获取某个TestSuite下的TestCase List
def testCaseList = testSuite.getTestCaseList();
//获取所有TestCase 列表,并且可以通过对其迭代获取TestStep,并对其操作。
如设置Http Header等。
7、获取Project、TestCase和TestSuite名字
//获取Project名字
def project = testRunner.testCase.testSuite.project;
log.info (project.getName());
//获取TestSuite名字
def testSuite = testRunner.testCase.testSuite;
log.info (testSuite.getLabel());
//获取TestCase名字
def testCase = testRunner.testCase;
log.info (testCase.getLabel());
8、跳转或执行TestStep
testRunner.gotoStepByName("Step2") //跳转到指定步骤
testRunner.runTestStepByName("Step2") //运行指定步骤或脚本
9、导入需要用到的方法和脚本
import groovy.json.JsonSlurper //例如:导入groovy.json包中的JsonSlurper方法
10、 获取Response
def loginResponse = testRunner.testCase.testSteps["Login"].testRequest
.response.contentAsString;
//获取LOGIN接口的response
11、解析Json数据
import groovy.json.JsonSlurper; //首先需要导入JSON解析包
def loginResponse = testRunner.testCase.testSteps["Login"].testRequest
.response.contentAsString;
//获取LOGIN接口的response
def json = new JsonSlurper();
def loginResponseJSON = json.parseText(loginResponse);
//将LOGIN的Response解析为JSon
12、获取Cookie并添加到对应的请求中
import com.eviware.soapui.support.types.StringToStringMap;
def cookiesList = testRunner.testCase.getTestStepByName("login")
.testRequest.response.responseHeaders["Set-Cookie"];
log.info cookiesList;
//获取cookie
String cookieNew = cookiesList.get(0);
log.info "cookie : "+cookieNew
//把cookie存入到StringMap
def cookieMap = new StringToStringMap();
cookieMap.put("Cookie",cookieNew)
testRunner.testCase.getTestStepByName("filter")
.testRequest.setRequestHeaders(cookieMap);
13、设置Request-header部分的参数
def request = testRunner.testCase.testSteps["login"].testRequest;
def headers = request.requestHeaders;
header.put("X-tokenHeader", "value");
request.requestHeaders = headers;
//可以理解为将header中参数取出来放在一个Map里边,可以对这个map进行put/remove操作,
然后在覆盖回去
以上就是在Groovy Script Test Step中常用的Groovy脚本方法,基于这些方法,我们可以使用Groovy脚本编写代码块,来执行我们想要的效果或者想要的功能。
三、Groovy Script在Test Step中使用事例
//第一部分
import groovy.json.JsonSlurper;
import com.eviware.soapui.support.types.StringToStringMap;
//第二部分
//获取LOGIN接口的response
def loginResponse = testRunner.testCase.testSteps["Login"].testRequest
.response.contentAsString;
def json = new JsonSlurper();
//将LOGIN的Response解析为JSon
def loginResponseJSON = json.parseText(loginResponse);
//第三部分
def headerMap = new StringToStringMap();//新建Header map
headerMap.put("Authorization",loginResponseJSON.token_type + " " + loginResponseJSON.access_token);
headerMap.put("Longitude","112.2396"); headerMap.put("Latitude","28.9689");
headerMap.put("AppName","SONE");
headerMap.put("MobileType","android");
headerMap.put("DeviceModel","S-N9002");
headerMap.put("OSVersion","5.0");
headerMap.put("DeviceToken","e4gc4-v8");
headerMap.put("AppVersion","63");
headerMap.put("SessionId","dev_1_160514");
headerMap.put("TimeZoneDst","true");
headerMap.put("Cache-Control","max-age=5");
headerMap.put("TimeZone","-06");
headerMap.put("AppService","FM");
//第四部分
//获取所有testSuite 列表
def testSuiteList = testRunner.testCase.testSuite.project.getTestSuiteList();
def testCaseList;
def testStepList;
for(testSuite in testSuiteList){ //遍历给所有testStep request api 添加header
testCaseList = testSuite.getTestCaseList();
for(testCase in testCaseList){
testStepList = testCase.getTestStepsOfType(com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep.class);
for(testStep in testStepList){
testStep.testRequest.setRequestHeaders(headerMap);
}
}
}
在这个Test Step中第一部分是导入我们需要的包,在这里是Json解析包和StringToStringMap包用于存储Header字段,并赋值给request header。
第二部分是获取接口Response,并解析json数据。
第三部分将我们需要的字段存入map
第四部分是获取所有的requestStep,并为其设置header
四、结语
本章我们主要解析了Groovy Script TestStep中,我们会常用的Groovy方法,利用这些方法我们可以做很多事情,因为SoapUI本身就是基于Groovy脚本执行的。合理灵活的使用Groovy脚本可以在限制很多功能的免费版本中如鱼得水。
下一节我们将开始下一个阶段,前几篇下来,我觉得应该基本可以使用SoapUI编写集成测试,那么下一篇我们将讲解如何集成到Jenkins,进行持续集成。敬请期待。Thanks♪(・ω・)ノ
申明:禁用于商业用途,如若转载,请附带原文链接。https://www.jianshu.com/p/fd2e12e62c9f蟹蟹(#.#)