当前位置: 首页 > news >正文

Web Service单元测试工具实例介绍之SoapUI

原文  Web Service单元测试工具实例介绍之SoapUI

SoapUI是当前比较简单实用的开源Web Service测试工具,提供桌面应用程序和IDE插件程序两种使用方式。能够快速构建项目和组织测试用例是该工具的一大特性,下面将通过实例介绍如果使用SoapUI进行Web Service单元测试。

l        构建项目

SoapUI工具中的项目(Project)是由一个或多个Web Service组成的,这里我们以“中国电视节目预告 Web 服务:

http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx?wsdl”为例,新建WSDL项目。点击FileèNew WSDL Project输入项目名称“ChinaTV”,初始WSDL“

http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx?wsdl”,如图1:690)this.width=690;" src="http://www.52testing.com/FUploadFile/0008.JPG">

 

其中WSDL可以是URL也可以是wsdl的静态文件。

l        单个服务请求的运行

SoapUI工具会解析WSDL文件获取服务接口,创建请求。如图2、3:该服务提供8个接口,并根据Soap的版本不同提供两种。

690)this.width=690;" src="http://www.52testing.com/FUploadFile/0009.JPG">  690)this.width=690;" src="http://www.52testing.com/FUploadFile/00010.JPG">

展开接口“getTVstationDataSet”的Soap请求“Request 1”:

双击查看请求的SOAP消息:如图4

690)this.width=690;" src="http://www.52testing.com/FUploadFile/00011.JPG">

 

 

我们看到的是服务请求Soap消息,其中的“?”问号代表的是入参,将其修改为请求入参值“-1”(本实例中,-1代表中央电视),然后点击图标 按钮运行,获得请求结果:如图5

690)this.width=690;" src="http://www.52testing.com/FUploadFile/00012.JPG">

 

我们看到返回的Soap消息及其中的数据。

l        构建测试用例

选择项目“ChinaTV”并右键,选择New TestSuite,构建一个测试套件如图6

690)this.width=690;" src="http://www.52testing.com/FUploadFile/00013.JPG">

 

然后,在TestSuite中右键,选择New TestCase,新建TestCase并将服务请求加入到TestCase中:如图7

690)this.width=690;" src="http://www.52testing.com/FUploadFile/00014.JPG">

 

 

这样,我们拥有了第一个测试用例:如图8

690)this.width=690;" src="http://www.52testing.com/FUploadFile/00015.JPG">

 

 

因为上述过程中已经设置了服务请求入参,所以这里我们双击TestCase 1点击 可以直接运行:如图9

690)this.width=690;" src="http://www.52testing.com/FUploadFile/00016.JPG">

 

 

我们看到了“绿条”,这表示运行通过。

l        增加检查点

如图,打开服务请求getTVstationDataSet – Request 1,点击 ,添加检查点:如图10

690)this.width=690;" src="http://www.52testing.com/FUploadFile/00017.JPG">

 

 

检查点有多种类型,这里我们选择包含“Contains”并输入检查内容“中央电视台”:如图11690)this.width=690;" src="http://www.52testing.com/FUploadFile/00018.JPG">

 

我们运行服务请求getTVstationDataSet – Request 1:如图12

690)this.width=690;" src="http://www.52testing.com/FUploadFile/00019.JPG">

 

可以看到检查点是有效的:Contains-VALID

l        组织测试步骤

将getAreaDataSet(获得支持的省市(地区)和分类电视列表)、getTVstationDataSet(通过省市ID或分类电视ID获得电视台列表)、 getTVchannelDataSet(通过电视台ID获得该电视台频道列表)、getTVprogramDataSet(通过频道ID获得该频道节目列表)依次加入到TestCase 1的测试步骤中去,然后组织测试步骤获取“CCTV-1”的节目列表。

测试步骤:

1、获得“中央电视”的分类ID“-1”

2、获取“中央电视”类别中的“中央电视台”ID:“39”

3、获取“中央电视台”的频道“CCTV-1”ID:“606”

4、获取“CCTV-1”频道的节目列表 如图13

690)this.width=690;" src="http://www.52testing.com/FUploadFile/00020.JPG">

 

我们需要将服务请求getAreaDataSet结果中的“中央电视”ID“-1”作为服务请求getTVstationDataSet入参,右键点击getAreaDataSet-Request 1,选择Insert StepèProperty Transfer,如图14:

 690)this.width=690;" src="http://www.52testing.com/FUploadFile/00021.JPG">

这个Property Transfer用于两个服务请求间的交互,我们将其命名为:“AreaTransferStation”如图15

690)this.width=690;" src="http://www.52testing.com/FUploadFile/00022.JPG">

 

Source中我们选择getAreaDataSet-Request 1的Response,Target中我们选择getTVstationDataSet-Request 1的Request,并通过脚本选择服务请求getAreaDataSet返回结果Soap消息中节点(AreaList[4])中(areaID[1])的值传递给服务请求getTVstationDataSet作为入参(theAreaID[1])的值。

其中:declare  namespace diffgr=

"urn:schemas-microsoft-com:xml-diffgram-v1";用于声明命名空间,与SOAP消息中的命名空间对应。如图16

690)this.width=690;" src="http://www.52testing.com/FUploadFile/00023.JPG">

 

同样的操作步骤,我们组织好其他几个服务请求间的交互,就组织完成了一个完整的测试步骤,最后我们运行TestCase,看到全部的运行结果:(绿色表示运行通过)如图17

690)this.width=690;" src="http://www.52testing.com/FUploadFile/00024.JPG">

 

注:soapui官方网站http://www.soapui.org/

相关文章:

  • 春季学期第十一周作业
  • 【30-swift-projects-in-30-days】swift 5 学习 02.Watch'sDemo
  • 【phonegap】下载文件
  • DES算法总结
  • 基于C 的libvirt 接口调用
  • python基础知识~元组,range和字典
  • 【ios】UITableView中的uitablviewcell在64位下显示重叠问题
  • Python生物学 Python for Bioinformatics 2nd - 2018.pdf
  • 服务发现系统consul-health check
  • 数据类型与运算符小结(JAVA)
  • redis的复制
  • 人工智能 + 物联网 = 智慧物联网
  • extjs Date的使用
  • rocketmq-producer
  • 谈谈javascript语法里一些难点问题(一)
  • @jsonView过滤属性
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 2017-09-12 前端日报
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Docker入门(二) - Dockerfile
  • MySQL主从复制读写分离及奇怪的问题
  • Vue实战(四)登录/注册页的实现
  • vue中实现单选
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 聊一聊前端的监控
  • 扑朔迷离的属性和特性【彻底弄清】
  • 如何合理的规划jvm性能调优
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 微信公众号开发小记——5.python微信红包
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​secrets --- 生成管理密码的安全随机数​
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (二开)Flink 修改源码拓展 SQL 语法
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (蓝桥杯每日一题)love
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .form文件_SSM框架文件上传篇
  • .NET Framework 服务实现监控可观测性最佳实践
  • .Net MVC4 上传大文件,并保存表单
  • .net 怎么循环得到数组里的值_关于js数组
  • .stream().map与.stream().flatMap的使用
  • ::
  • @Autowired自动装配
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [ C++ ] STL---仿函数与priority_queue
  • [04] Android逐帧动画(一)
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution