SoapUI对接口测试工具 soapui用例怎么断言

接口 标签_51CTO技术博客
搜索推荐文章
搜索原创文章
搜索近期文章
&&&&arp封装原理:首先封装自己网关、根据ISO七层封装层次、以路由出接口MAC-address作为源MAC封装路由选路原则:1、子网掩码最长匹配2、管理距离最小优先3、度量值最小优先(这个是CISCO公司的路由选路原则)华为:1、子网掩码最长匹配原则2、优先级最小原则3、路由开销(COST)最小原..
&&&&OpenGL/GLSL规范在不断演进着,我们渐渐走进可编程管道的时代的同时,崭新的功能接口也让我们有点缭乱的感觉。本文再次从OpenGL和GLSL之间数据的传递这一点,记录和介绍基于OpenGL3.x的新方式,也会适时介绍UnformBufferObjecct(UBO)这一重要特性。ū疚目墒游?笾乱籠0..
&&&&以前记得一篇笔记,贴出了tcpdump介绍用简单的话来定义tcpdump,就是:dumpthetrafficonanetwork,根据使用者的定义对网络上的数据包进行截获的包分析工具。tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提..
&&&&一.View及其子类1.view类view类继承至Object实现了Drawable.CallbackKeyEvent.CallbackAccessibilityEventSource接口.直接子类有:AnalogClock,ImageView,KeyboardView,MediaRouteButton,ProgressBar,Space,SurfaceView,TextView,TextureView,ViewGroup,ViewStub间接子类无数:AbsLi..
&&&&目前快递查询接口对接需求较大,此博客做免费快递接口做整理,并附上调用方式,如果有错误的地方,望沟通指教。一.快递查询接口类型目前有提供免费快递查询接口的公司有:快递鸟快递100快递网爱快递这些快递接口除了快递鸟以外,都能够免费查询2000次/每天,快递鸟接口每天请求次..
&&&&基础回顾----------------1.跨平台os JVM:sandbox 19952.基本数据类型 byte
//1 -128~127 short //2- int
//4 doule //8 char
//2 boolean //13.引用类型 [] class interface4.运算符 &&
&&&&dpdk_device_t 字段描述lockp 发送队列锁,当发送队列个数少于线程个数时往port发包需要加锁,lockp是一个数组,每个元素对应一个发送队列,即每个发送队列一把锁device_index 为port分配的index,每个port一个vlib_hw_if_index 该port对应的hw结构的索引vlib_sw_if_index 该port..
&&&&1.passive-interface在RIP或IGRP路由器上,配置passive-interface的作用是:让特定的接口不通告任何路由更新的同时,能接受到所有的路由更新。运用场景:在多路访问环境中,配合neighbor命令,让RIP或IGRP以单播方式发送更新替代广播更新。在OSPF或EIGRP路由器上,配置passive-interface..
&&&&1.下载libsvm2.解压3.cd进入libsvm文件夹,然后make4.cd进入libsvm的python子文件夹,然后make5.会生成文件libsvm.so.2,svm.py,svmutil.py$sudocp*.py/usr/lib/python2.7/dist-packages/$cd..$sudocplibsvm.so.2/usr/lib/python2.7/6.检查1.#cd/2.#python3.#importsvm4.#svm..
&&&&项目背景:1、接口URL:http://192.168.xx.xx:8080/mserver/rest/ms2、接口参数:data=xxxxx&key=xxxxx,数据是加密的3、请求方式:post4、协议:http实战步骤1、打开fiddler2、切换到【Composer】界面3、选择请求方式:POST4、输入接口地址5、输入请求头信息,我们项目需要输..
soapui是接口测试工具,最近因为要做接口测试,使用了下,现在和大家分享下:工具安装很简单,就不说了,直接说使用,先什么都不说,照着操作一遍,我们拿天气预报的webserver来实战;主要包括:新建项目,添加测试套件、测试用例、修改参数、运行、添加断言1、打开工具..
*wechatphptest
//defineyourtoken
//定义TOKEN密钥(主要为了桥接微信服务器和自定义服务器)
//"weinxin"可以自己取名,比如取名为weixinabc
define("TOKEN","weixin");
$wechatObj=newwechatCallbackapiTest();
//调用valid方法,主要用于微信验证。
//(第一..
&&页数 ( 1/159 )
Copyright&
版权所有 未经许可 请勿转载手把手教你接口自动化测试 – SoapUI & Groovy - 推酷
手把手教你接口自动化测试 – SoapUI & Groovy
手把手教你接口自动化测试 – 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&a++)
for (b=0;b&b++)
input[a][b]= sheet.getCell(a,b).getContents();
def readBaseline(workbook,sheetName)
Sheet sheet=workbook.getSheet(sheetName);
Rows = sheet.getRows();
Columns = sheet.getColumns();
/*Get content into array*/
baseline = new Object [Columns][Rows]
for (a=0;a&Ca++)
for (b=0;b&Rb++)
baseline[a][b]= sheet.getCell(a,b).getContents();
def updateOutput(writableWorkbook,sheetName,start_row,rows,columnNo,result,resultTag){
Sheet[] sheet= writableWorkbook.getSheets();
ws = writableWorkbook.getSheet(sheetName);
if(ws==null){
ws = writableWorkbook.createSheet(sheetName,sheet.length)
for (a=0;a&columnNo;a++)
ws.addCell(new jxl.write.Label(a,0,result[a][0]));
for (b=start_row;b&b++)
wc = new jxl.write.WritableCellFormat();
if (resultTag[a][b]=='PASS')
wc.setBackground(jxl.format.Colour.WHITE);
ws.addCell(new jxl.write.Label(a,b,result[a][b],wc));
else if(resultTag[a][b]=='FAIL'){
wc.setBackground(jxl.format.Colour.RED);
ws.addCell(new jxl.write.Label(a,b,result[a][b],wc));
def updateResult(writableWorkbook,sheetName,start_row,rows,columnNo,result){
Sheet[] sheet= writableWorkbook.getSheets();
ws = writableWorkbook.getSheet(sheetName);
if(ws==null){
ws = writableWorkbook.createSheet(sheetName,sheet.length)
for (a=0;a&columnNo;a++)
ws.addCell(new jxl.write.Label(a,0,result[a][0]));
for (b=start_row;b&b++)
wcf = new jxl.write.WritableCellFormat();
wcf.setBackground(jxl.format.Colour.RED);
if(result[a][b] == 'FAIL'){
ws.addCell(new jxl.write.Label(a,b,result[a][b],wcf));
ws.addCell(new jxl.write.Label(a,b,result[a][b]));
wc = new jxl.write.WritableCellFormat();
wcc = new jxl.write.WritableCellFormat();
wc.setBackground(jxl.format.Colour.GRAY_25);
wcc.setBackground(jxl.format.Colour.LIGHT_TURQUOISE);
ws.addCell(new jxl.write.Label(0,rows-3,result[0][rows-3],wcc));
ws.addCell(new jxl.write.Label(0,rows-2,result[0][rows-2],wc));
ws.addCell(new jxl.write.Label(0,rows-1,result[0][rows-1],wc));
def updateComparison(writableWorkbook,sheetName,start_row,rows,columnNo,output,outputTag,result,baseline){
Sheet[] sheet= writableWorkbook.getSheets();
ws = writableWorkbook.getSheet(sheetName);
if(ws==null){
ws = writableWorkbook.createSheet(sheetName,sheet.length)
for (a=0;a&columnNo;a++)
ws.addCell(new jxl.write.Label(a,0,output[a][0]));
for (b=start_row;b&b++)
if(result[1][b] == 'FAIL'){
wc = new jxl.write.WritableCellFormat();
if (outputTag[a][b]=='PASS')
wc.setBackground(jxl.format.Colour.WHITE);
ws.addCell(new jxl.write.Label(a,x,output[a][b],wc));
wc.setBackground(jxl.format.Colour.RED);
ws.addCell(new jxl.write.Label(a,x,output[a][b],wc));
wbc = new jxl.write.WritableCellFormat();
wbc.setBackground(jxl.format.Colour.ICE_BLUE);
ws.addCell(new jxl.write.Label(a,x+1,baseline[a][b],wbc));
def removeSheetByName(writableWorkbook, name){
Sheet[] sheet= writableWorkbook.getSheets();
ws = writableWorkbook.getSheet(name);
if(ws != null){
for (i = 0; i & sheet. i++) {
sheetName = writableWorkbook.getSheet(i).getName();
if (sheetName.equalsIgnoreCase(name)) {
writableWorkbook.removeSheet(i);
def setProperties(Name,Value,Place)
name = Name;
target = testRunner.testCase.getTestStepByName(Place);
target.setPropertyValue(name,Value);
def cleanProperty(PropertyListName)
PropertyList = testRunner.testCase.getTestStepByName(PropertyListName);
size=PropertyList.getPropertyCount();
if (size!=0)
for (i=0;i&i++)
PropertyList.removeProperty(PropertyList.getPropertyAt(0).name);
def logFile = new File(context.expand('${#TestCase#LogFile - Check Response}'));
def xlsName = context.expand('${#TestCase#Workbook}');
def project = testRunner.testCase.getTestSuite().getProject();
def testSuite = testRunner.testCase.getTestSuite();
def testcase = testRunner.testCase
def requests = testcase.getTestStepsOfType( com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep.class )
def request = requests[0];
inputSheetName = &Input&;
baselineSheet = &Baseline&;
outputSheet = &Output&;
resultSheet = &Result&;
fieldResult = testcase.getTestStepByName('fieldResult');
ComparisonSheet = &Comparison&;
Baseline = testcase.getTestStepByName(baselineSheet);
baselineSize = Baseline.getPropertyCount();
Output = testcase.getTestStepByName(outputSheet);
def cal = Calendar.instance;
def sysdate = cal.getTime();
sleepTime=context.expand('${#Project#sleepTime}').toInteger()
Workbook workbook=Workbook.getWorkbook(new File(xlsName));
cleanProperty(inputSheetName);
readInput(workbook,inputSheetName);
for (i=0;i&i++)
setProperties(input[i][0],'',inputSheetName)
cleanProperty(baselineSheet);
readBaseline(workbook,baselineSheet);
for (i=0;i&Ci++)
setProperties(baseline[i][0],'',baselineSheet)
workbook.close();
}catch(Exception e){
e.printStackTrace();
/*-----------Set runSelect as 'true' in Project property to run selected test cases from startTag till endTag-------*/
def runSelected = context.expand('${#Project#runSelected}')
start_Test=1;
end_Test=rows-1;
def passNumbers = 0;
def decFormat = new DecimalFormat(&##.00%&);
if ('true'.equalsIgnoreCase(runSelected))
startTag=context.expand('${#Project#startTag}').toInteger();
endTag=context.expand('${#Project#endTag}').toInteger();
if((0&startTag)&&(startTag&rows)&&(endTag&=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&baselineSi++)
output[i][0]= Baseline.getPropertyAt(i).name;
outputTag[i][0]= 'PASS';
for (m=start_Test;m&=end_Tm++)
logFile.append('\n'+ testcase.name + &: &+m+& &+ &. &+sysdate+'\n');
for (i=0;i&i++)
setProperties(input[i][0],input[i][m],inputSheetName)
for (j=0;j&Cj++)
setProperties(baseline[j][0],baseline[j][m],baselineSheet)
testRunner.runTestStepByName(request.name);
Thread.sleep(sleepTime);
testRunner.runTestStepByName(&Check Response&);
result[0][m]=context.expand('${'+inputSheetName+'#Case Description}')
result[1][m]=context.expand('${'+resultSheet+'#result}')
if(result[1][m] == 'PASS'){
passNumbers++;
for (i=0;i&baselineSi++)
output[i][m]= Output.getPropertyAt(i).value;
outputTag[i][m]= fieldResult.getPropertyAt(i).value;
result[0][rows+2]='End Time:';
result[1][rows+2]=sysdate.toString();
result[0][rows]='Pass Percentage:';
passPercentage = decFormat.format(passNumbers/(end_Test-start_Test+1));
result[1][rows] = passPercentage
/*--------------Update Output, Result, Comparison sheet---------*/
workbook = Workbook.getWorkbook(new File(xlsName));
writableWorkbook =
Workbook.createWorkbook(new File(xlsName), workbook);
updateOutput(writableWorkbook,outputSheet,start_Test,end_Test+1,baselineSize,output,outputTag);
updateResult(writableWorkbook,resultSheet,start_Test,rows+3,2,result);
removeSheetByName(writableWorkbook,ComparisonSheet);
if(passPercentage != '100.00%'){
updateComparison(writableWorkbook,ComparisonSheet,start_Test,end_Test+1,baselineSize,output,outputTag,result,baseline);
writableWorkbook.write();
writableWorkbook.close();
workbook.close();
}catch(Exception e){
e.printStackTrace();
setProperties('passPercentage', passPercentage ,'Result');
testRunner.gotoStepByName('End');
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.XmlHolder
baselineSheet = &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 response
respXmlHolder.declareNamespace(&ns1&, &/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&baselineSi++)
specifiedName = Baseline.getPropertyAt(i).name;
specifiedValue = getspecifiedValue(specifiedName);
if(specifiedValue != null){
setProperties(specifiedName,specifiedValue,outputSheet)
setProperties(specifiedName,'',outputSheet)
setProperties(Baseline.getPropertyAt(0).name,Baseline.getPropertyAt(0).value,outputSheet);
setProperties(Baseline.getPropertyAt(1).name,statusCode,outputSheet);
for(t=2; t&baselineS t++){
setProperties(Baseline.getPropertyAt(t).name, '' ,outputSheet);
setProperties(Baseline.getPropertyAt(0).name,Baseline.getPropertyAt(0).value,outputSheet);
setProperties('result','PASS', resultSheet);
logFile = new File(context.expand('${#TestCase#LogFile - Check Response}'));
responseDetailLogFile= new File(context.expand('${#TestCase#LogFile - Response Detail}'));
logFile.append(& ------
Start Response Check &+ & @ &+Calendar.instance.getTime()+&\n&);
responseDetailLogFile.append(&\n&+ testcase.name + & -- & + Baseline.getPropertyAt(0).value+ &\n& + response+&\n&);
/*--------Compare the result with Baseline and update the result accordingly---------*/
for (i=0;i&baselineSi++)
if (Baseline.getPropertyAt(i).value==Output.getPropertyAt(i).value)
setProperties(Baseline.getPropertyAt(i).name,'PASS','fieldResult');
setProperties(Baseline.getPropertyAt(i).name,'FAIL','fieldResult');
setProperties('result','FAIL','Result');
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 数据工作簿查看结果
Comparison
是不是跟我上一篇文章异曲同工?
注:转载需注明出处及作者名,严禁恶意转载,尊重原作者的劳动成果。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致soapUI&添加负载测试和负载测试的断言
在创建完测试用例后,可以创建针对该测试用例的负载测试。右键单击 测试用例,点击 添加新的负载测试,add neww load
输入负载测试的名称。即可创建针对该测试用例的负载测试。
双击新添加的负载测试,为该负载测试添加断言
然后根据需要,添加断言。。。。。。。。。。。。。。。。。。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。SoapUI + Selenium Webdriver 自动化测试学习
SoapUI + Selenium Webdriver 自动化测试学习
自动化测试
SoapUI是一个接口测试工具,也是一个巨大的可扩展的测试框架。SoapUI 可以集成Selenium Webdriver,然后在SoapUI中可以用Groovy来写自动化测试用例。
Groovy是基于Java的,会Java的使用Groovy毫无压力。 这样只使用SoapUI就既可以做到Webservice接口自动化,也可以实施GUI界面操作的自动化测试。
如何实现SoapUI集成Selenium WebDriver?
根据SoapUI版本不同,我只使用过其中两个版本SoapUI,配置略有不同。
针对SoapUI 4.5.2版本
(1)下载selenium-server-standalone-2.53.0.jar,selenium各版本下载地址:http://selenium-
release./index.html。(其他版本也可以,注意浏览器版本,能与浏览器版本配套即可,
如最新的Firefox 45.0.2,+ selenium2.48.2的话,好像会报错),
将selenium-server-standalone-2.53.0.jar放到SOAPUI_HOME\jre\lib\ext下。如Windows中
目录C:\ProgramFiles\SmartBear\SoapUI-5.2.1\jre\lib\ext。
如果是SoapUI4.5.2版本,那么配置已经完成,可以打开SoapUI,建工程,TestSuite,TestCase, Groovy的TestStep,开始用Groovy写自动化测试代码了。。
为什么要放在jre\lib\ext呢? 毕竟按照SoapUI的官方指导,第三方jar包如jdbc等是放在SOAPUI_HOME\bin\ext目录
下的。原因是与SoapUI的类加载器体系有关,Selenium和SoapUI都是用了某些jar包只是版本不一致,Selenium的版本更
高一些,为了使Selenium中的生效,放在这里,否则会报错,具体错误就不再细说了。
针对SoapUI5以上还需要这一步:
如果是SoapUI 5.XX等高于5.0的版本,那么麻烦一点,还需要这一步。因为SoapUI5以上版本设置Proxy代理功能发生了变化。SoapUI修改了ProxyUtils类。在Windows操作系统下会ProxySelector.setDefault( null ),Webdriver初始化启动的候会报空指针错误。
(2)我的解决方法是:下载了SoapUI源代码,修改ProxyUtils类,然后编译ProxyUtils类,编译成
ProxyUtils.class文件。到SOAPUI_HOME\bin下找到SoapUI-version.jar,以压缩包方式用
WinRAR或7-zip等打开SoapUI-5.xxx.jar,找到对应目录下
(C: \Program Files\SmartBear\SoapUI-5.2.1\bin\soapui-5.2.1.jar\com\eviware\soapui
\impl\wsdl\support\http\)的 ProxyUtils.class,替换为自己编译的ProxyUtils.class,
然后启动SoapUI即可。
我在stackoverflow上也回答了这个问题,不知道是不是很挫或者没人看,反正我能用了。
所做的改动:将原类中ProxySelector.setDefault( proxySelector );行改为如下所示:
if(proxySelector != null){
ProxySelector.setDefault(proxySelector);
proxySelector = ProxySelector.getDefault();
O(∩_∩)O,不知道是不是改得很挫,反正能用了。
在此提供一个我所做的修改后的class文件及说明的下载链接:
资源中的附带的文档中有点不太准确,但是已上传的资源删不了,改不了,CSDN 的这个作的真挫,
关于Selenium,我试过selenium 2.48.2和2.53.0版本。
以访问百度并搜索为例
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.WebElement
import org.openqa.selenium.firefox.FirefoxDriver
import org.openqa.selenium.OutputType
import org.apache.commons.io.FileUtils
WebDriver driver = new FirefoxDriver()
driver.get("") // Url to be opened
log.info driver.getSessionId().toString()
driver.findElement(By.id("kw")).sendKeys("SoapUI")
driver.findElement(By.id("su")).click()
File f1 = driver.getScreenshotAs(OutputType.FILE)
FileUtils.copyFile(f1, new File("d:\\screenshot1.png"))
我的热门文章
即使是一小步也想与你分享}

我要回帖

更多关于 soapui rest接口测试 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信