SoapUI入门之TestStep用法三(Groovy Script)

每月一篇博文,一直在继续,庆幸自己在坚持。前面两篇讲解的TestStep有很多种类型,也详解了我们常用到的多种类别,在今天这篇将重点讲解Groovy Script TestStep。

我们知道在SoapUI中Groovy是一个特别重要的脚本语言,在SoapUI(免费版)和ReadAPI(收费版)中我们都可以用Groovy Script要做很多事情,特别在免费版中,因为很多功能不开放,我们只能用脚本实现。

前面的SoapUI系列文章参见以下链接:
1、SoapUI 入门之创建Project、生成TestCase以及参数化

2、SoapUI 入门之配置Headers,以及将Cookie、Token持久化存储

3、SoapUI 入门之让你爽爽的用上断言

4、SoapUI入门之附件上传和配置Https请求

5、SoapUI入门之TestStep用法一(DataSource&DataSource Loop)

6、SoapUI入门之TestStep用法二

7、SoapUI入门之TestStep用法三(Groovy Script)

在ReadAPI官方文档中介绍,SoapUI Groovy Script Test Step可以使用两种脚本语言来编写,Groovy和JavaScript。默认使用Groovy语言,但是也可以使用JavaScript,需要在项目设置中设置Script Language。这里我们主要讲解Groovy。

一、如何添加Groovy Script TestStep

图1.1

鼠标选中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蟹蟹(#.#)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容