博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手把手教你接口自动化测试 – SoapUI & Groovy
阅读量:6621 次
发布时间:2019-06-25

本文共 6081 字,大约阅读时间需要 20 分钟。

原文:

手把手教你接口自动化测试 – SoapUI & Groovy

 

关键词:SoapUI接口测试,接口自动化测试,数据驱动测试,SoapUI进阶使用, Groovy in SoapUI, SoapUI中Groovy的使用,数据分离。

 

阅读这篇文章需要一定的SoapUI基础,至少入过门,另外还需要一些Groovy的知识,当然如果你会java 也可以,这里用到的Groovy知识和Java很类似。

另外,本文的思路和我上一篇文章很相似,只不过把Java+TestNG的组合换成了SoapUI+Groovy, 另外测试对象也换成了基于Soap的web service, 依旧用Excel来管理数据,做到数据分离。

由于我用到的SoapUI是免费版本,相比Pro版,少很多的功能,像DataLoop之类的,所以只能通过Groovy写一些脚本来做数据驱动的测试。

 

首先打开SoapUI, 新建一个Workspace 名为Demo

 

 

然后点击File->New soapUI Project

 

然后输入你的Project Name, WSDL 地址 点击OK

 

 

输入服务的用户名密码 点击OK

 

项目工程建好了

 

右击ServicePort 建立TestSuite

 

以其中一个接口为例 来生成用例

 

输入TestSuite name 然后确认

工程结构如下

 

 

通过右击TestCase -> Add Step  增加 Groovy Script 和 Properties

 

增加四个Groovy Script, 并且命名成 Start, Process, Check Response, End

增加5个 Properties, 并且命名成Input, Baseline, Output, Result, fieldResult

调整它们的顺序,最后形成下图的工程目录结构

 

 

Start脚本主要创建log文件

/*Check the log file, create folder and file if necessary*/import java.io.*;def cal = Calendar.instance;def sysdate = cal.getTime();def Y = cal.get(Calendar.YEAR); def M = cal.get(Calendar.MONTH)+1; def D = cal.get(Calendar.DATE);if (D<10) D = "0"+D; if (M<10) M = "0"+M; date = Y+"-"+M+"-"+D;time=sysdate.toString().replaceAll(':','-')def testSuites=testRunner.testCase.getTestSuite();def testcase = testRunner.testCase;def logFolder = new File(context.expand('${#Project#LogFolder}'));def responseLogName = (context.expand('${#Project#LogFolder}')+date+'\\'+testSuites.name+' - '+ testcase.name +' - ' + time+".log");def responseDetailLogName = (context.expand('${#Project#LogFolder}')+date+'\\'+testSuites.name+' - ' + testcase.name +' - ' + time + " Response Detail.log");def responseLogFile = new File(responseLogName);def responseDetailLogFile = new File(responseDetailLogName);def subFolder= new File (context.expand('${#Project#LogFolder}')+date+'\\')/*Set date and Log Name to Project - Testcase Properties*/testcase.setPropertyValue('date', date);testcase.setPropertyValue('LogFile - Check Response', responseLogName);testcase.setPropertyValue('LogFile - Response Detail', responseDetailLogName);if(!logFolder.exists()){    logFolder.mkdirs();    }if(!subFolder.exists()){    subFolder.mkdirs();    }/*Check the file, create a new one if not found*/if(!responseLogFile.exists()){    responseLogFile.createNewFile();    }responseLogFile.append("---------------Test Start on "+sysdate+" ------------------------"+'\n');if(!responseDetailLogFile.exists()){    responseDetailLogFile.createNewFile();    }responseDetailLogFile.append("---------------Test Start on "+sysdate+" ------------------------"+'\n');
View Script - Start

 

Process脚本是整个工程的核心,读取Excel数据文件的Input, Baseline 放入二维数组,然后循环读入Input和Baseline这两个Properties, 调用request, 取到Ouput和Result Properties的值放入Output, Result数组,最后更新Excel的Output, Result, Comparison sheet。

import java.io.*;import jxl.*;import java.text.DecimalFormat;def readInput(workbook,inputSheetName){        Sheet sheet=workbook.getSheet(inputSheetName);                rows = sheet.getRows();    columns = sheet.getColumns();    /*Get content into array*/    input = new Object [columns][rows]    for (a=0;a
=startTag)&&(rows>endTag)){ start_Test=startTag; end_Test=endTag; }} result = new Object [2][rows+3] result[0][0]='Case Description'; result[1][0]='Result' result[0][rows+1]='Start Time:'; result[1][rows+1]=sysdate.toString(); /*--New object and put the output name and value into this list--*/ output = new Object [baselineSize][rows] outputTag = new Object [baselineSize][rows] for (i=0;i
View Script - Process

 

Check Response 顾名思义,用来检查返回结果, 通过XmlHolder getNodeValue 来取response各节点的值,并且填入Output Properties已作对比之用。

import java.lang.*;import java.util.*;import groovy.lang.*;import groovy.util.*;import com.eviware.soapui.support.XmlHolderbaselineSheet = "Baseline";outputSheet = "Output";resultSheet = "Result";def testcase = testRunner.testCase;Baseline = testcase.getTestStepByName(baselineSheet)baselineSize = Baseline.getPropertyCount();Output = testcase.getTestStepByName(outputSheet);def requests = testcase.getTestStepsOfType( com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep.class )def request = requests[0];def response = request.testRequest.response;respXmlHolder = new XmlHolder(response.contentAsXml)//declare namespace in xml responserespXmlHolder.declareNamespace("ns1", "http://schemas.xxx.com/v201203/yourservice")def statusCode = request.testRequest.response.responseHeaders["#status#"].toString();def setProperties(Name,Value,Place){                     name = Name;       target = testRunner.testCase.getTestStepByName(Place);       target.setPropertyValue(name,Value);}def getspecifiedValue(field){      prefix = "//ns1:";       nodePath = "${prefix}${field}"       specifiedValue = respXmlHolder.getNodeValue("${nodePath}")}testRunner.testCase.getTestStepByName(outputSheet).clearPropertyValues();//normal output, status = '200 OK'if(statusCode.contains('200 OK')){       for (i=1;i
View Script - Check Response

 

End脚本 在log上打时间戳

def cal = Calendar.instance;def sysdate = cal.getTime();responseLogFile = new File(context.expand('${#TestCase#LogFile - Check Response}'));responseDetailLogFile= new File(context.expand('${#TestCase#LogFile - Response Detail}'));responseLogFile.append('\n'+ "---------------Test End on " + sysdate.toString() + " ------------------------"+'\n');responseDetailLogFile.append('\n'+ "---------------Test End on " + sysdate.toString() + " ------------------------"+'\n');
View Script - End

 

配置

双击DemoProject, 点击下方的Properties tab

然后 Add property

Add 如下图所示的5个Property

 

双击项目工程列表里的'Demo TestCase'

点击Properties tab

Add Property 如图

 

Value 填Excel 的路径

 

Excel数据工作簿里的Input sheet 如图

 

接下来需要把Input里的column name 与 Soap request里的input 字段映射起来

双击Test Steps 里的request

将xml文件里的?用参数来代替

左下角的TestRequest Properties  要填上用户名 密码

 

Baseline sheet里要把输出结果的字段名都定义好, 因为是根据字段名去response里取结果的

每条用例期望结果都写好,用作和实际结果对比

 

另外Check Response里的脚本需要设置一下

假设你的response xml文件结构如下

如果你需要检查Soap body标签下的内容, 则你需要配置一下Check Response的脚本

将xml namespace的路径配置一下

 

右击Project  Save一下Project 

最后可以运行了 双击Demo TestSuite  点击Run

 

打开Workbook 数据工作簿查看结果

Output

Result

Comparison

 

是不是跟我上一篇文章异曲同工?

 

 

注:转载需注明出处及作者名,严禁恶意转载,尊重原作者的劳动成果。

 

你可能感兴趣的文章
14.使用通配符
查看>>
软件的模块化开发
查看>>
腾讯、百度、阿里面试经验—(3)阿里面经
查看>>
稍复杂的ionic例子:显示一个列表,并且允许点击进入列表项
查看>>
一些新的web性能优化技术
查看>>
Liferay 6开发学习(二十六):数据库连接相关问题
查看>>
【转】半路学编程,可以成为大牛吗?
查看>>
【20170506】贝业新兄弟IT总监李济宏:第三方家居物流的IT架构探索
查看>>
【Excle数据透视】如何在数据透视表字段列表中显示更多的字段
查看>>
vue 记一次编译没反应、无进度、没有任何报错的提示,但后台却TM一直消耗内存的BUG:...
查看>>
llvm pass
查看>>
poj3517
查看>>
iphone http下载文件
查看>>
poj 1195:Mobile phones(二维树状数组,矩阵求和)
查看>>
Codeforces 433 C. Ryouko&#39;s Memory Note
查看>>
java中的Static class
查看>>
实例讲解Linux下的makefile
查看>>
json lib 2.4及其依赖包下载
查看>>
计算机中文核心期刊
查看>>
sql的left join 命令
查看>>