Download link: https://www.soapui.org/downloads/soapui/
信息来自网络,侵权删除!!
1 背景介绍
SoupUI分为开源社区版和企业收费版,日常工作,开源版本足够使用
Soapui可以对webservice,REST and http 接口进行测试,知识点背景介绍:
1.1 SOAP 和 REST接口
WebService 三要素
SOAP、WSDL(WebServicesDescriptionLanguage)、UDDI(UniversalDescriptionDiscovery andIntegration)之一, soap用来描述传递信息的格式, WSDL 用来描述如何访问具体的接口, uddi用来管理,分发,查询webService 。SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。
SOAP -- Simple Object Access Protocol)
SOAP 顾名思义,是一个严格定义的信息交换协议,用于在Web Service中把远程调用和返回封装成机器可读的格式化数据。事实上SOAP数据使用XML数据格式,定义了一整套复杂的标签,以描述调用的远程过程、参数、返回值和出错信息等等。而且随着需要的增长,又不得增加协议以支持安全性,这使SOAP变得异常庞大,背离了简单的初衷。另一方面,各个服务器都可以基于这个协议推出自己的API,即使它们提供的服务及其相似,定义的API也不尽相同,这又导致了WSDL的诞生。WSDL
(Web Service Description Language) 也遵循XML格式,用来描述哪个服务器提供什么服务,怎样找到它,以及该服务使用怎样的接口规范,简言之,服务发现。现在,使用Web Service的过程变成,获得该服务的WSDL描述,根据WSDL构造一条格式化的SOAP请求发送给服务器,然后接收一条同样SOAP格式的应答,最后根据先前的WSDL解码数据。绝大多数情况下,请求和应答使用HTTP协议传输,那么发送请求就使用HTTP的POST方法。
REST -- Representational State Transfer 直接翻译:表现层状态转移。
形式上应该表述为客户端通过申请资源来实现状态的转换,在这个角度系统可以看成一台虚拟的状态机。REST应该满足这样的特点:
1. REST描述的是在网络中client和server的一种交互形式;REST本身不实用,实用的是如何设计 RESTful API(REST风格的网络接口);
2. Server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词。“资源”是REST架构或者说整个网络处理的核心。比如:
· http://api.qc.com/v1/newsfeed: 获取某人的新鲜;
· http://api.qc.com/v1/friends: 获取某人的好友列表;
· http://api.qc.com/v1/profile: 获取某人的详细信息;
3. 用HTTP协议里的动词来实现资源的添加,修改,删除等操作。即通过HTTP动词来实现资源的状态扭转:
· GET 用来获取资源,
· POST 用来新建资源(也可以用于更新资源),
· PUT 用来更新资源,
· DELETE 用来删除资源。
比如:
· DELETE http://api.qc.com/v1/friends: 删除某人的好友 (在http parameter指定好友id)
· POST http://api.qc.com/v1/friends: 添加好友
· UPDATE http://api.qc.com/v1/profile: 更新个人资料
4. Server和Client之间传递某资源的一个表现形式,比如用JSON,XML传输文本,或者用JPG,WebP传输图片等。当然还可以压缩HTTP传输时的数据(on-wire data compression)。
5. 用 HTTP Status Code传递Server的状态信息。比如最常用的 200 表示成功,500 表示Server内部错误等。
说到底,REST只是一种架构风格,而不是协议或标准。但这种新的风格(也许已经历史悠久?)对现有的以SOAP为代表的Web Service造成的冲击也是革命性的,因为它面向资源,甚至连服务也抽象成资源,因为它和HTTP紧密结合,因为它服务器无状态。
REST与SOAP的区别
因为SOAP并不假定传输数据的下层协议,因此必须设计为能在各种协议上运行。即使绝大多数SOAP是运行在HTTP上,使用URI标识服务,SOAP也仅仅使用POST方法发送请求,用一个唯一的URI标识服务的入口。
举一个图书馆在线查询管理系统为例,服务提供者必须为每一本书提供一个内部标识,然后可能定义一个listBooks操作来返回一系列图书,一个getBook操作来返回指定的图书,一个createBook操作来向数据库加入新增的图书,一个deleteBook操作来删除作废的图书,每个操作都有各自的参数,尤其是用内部标识来标识操作的图书。这种设计被诟病之处,在于deleteBook操作也要用POST方法来发送,而其实HTTP协议有更和逻辑的DELETE方法可用。REST正是这样设计的,REST为每一个资源(此处是图书)指定一个唯一的URI,而用HTTP的4种方法GET、POST、PUT、DELETE直观地表示获取、创建、更新和删除图书。同时图书集合也是和单本的图书不同的资源,如果用/books来代表图书列表,/books/ID来代表标识为ID的图书,那么对/books的GET操作就代表返回整个图书列表,对/books/ID的DELETE操作代表删除指定的图书,等等
SOAP(Simple Object Access Protocol - 简单对象访问协议)定义了一种强类型的消息传递框架,该框架高度依赖XML和schemas。
REST(Representation State Transfer - 表示状态转移)是一种架构样式风格,它利用了当下被广泛采用的技术(特别是HTTP),本身却不创建任何新的标准。REST可以将数据结构序列化为XML,YAML或任何其他机器可读格式,但通常首选JSON。
2 Sample讲解
打开soapui
新建工程:Create empty project --- http
New SOAP project ---- SOAP, Simple Object Access Protocol
New REST project ----- REST
开发将代码发布为webservice,测试会拿到一个测试地址,类似: http://IP:PORT/ws/services
点击wsdl
http://IP:PORT/ws/services?wsdl
根据以上信息,判定为SOAP接口项目, initial wsdl 为项目的接口地址
项目创建后,将自动解析wsdl内服务,并生成request请求,双击request, 左侧为请求,右侧为响应
在request body中填入对应的参数,即可进行简单测试验证测试验证
默认情况下,请求和响应都是xml格式,可以选择Raw查看更多信息
创建test suite:选中项目--右键—New TestSuite
在testsuite下新建 test case
两种方式可以新建测试步骤,右键添加步骤 或 在请求中右键选择,将其添加到test case
在test case 中添加断言
批量运行cases, 分串行和并行执行,并行模式下不支持查看log,有点在于回归测试比较方便。
3 SOAP接口测试
完成webservice接口测试,是基于SOA理念,采用XML+SOAP+HTTP协议来实现接口规范。
操作实现: new soap project --- 入参 --- 变量 --- 断言 --- 添加到testcase
如果只知道地址和服务名,那么尝试在浏览器中输入地址服务+?wsdl,如果可以解析到xml 内容,那么就是标准的webservice接口,可以对其进行相关的测试
New – new soap project -- 填入名称和wsdl地址,即上一步可以解析的wsdl地址,可以同时勾选上chuangjian sample request 和 Testsuite
项目创建后,对test case 增加断言,这里增加一个xpath 断言 或简单使用Contains
Xpath
Contains 断言,可以使用正则表达试
对接口压力测试
效果示例:
小结:
Test suite中只会执行相关的功能测试,而不会执行性能测试。
性能测试需要单独的手动执行;
对于soap测试,重点难点在于找到服务,有了服务地址之后,使用soapui测试就比较简单
参数选择:服务解析会列出所有的参数,入参分为可选、必选和非必选参数,应根据测试需要选择参数:
· 传空值
· 直接删掉对象
4 REST 接口测试
Representational State Transfer --- 表现层状态转移
REST中的资源所指的不是数据,而是数据和表现形式的组合。资源标识符URI (Uiform Resource Identifier),不管是图片、word还是视频文件,甚至是虚拟的服务,也不管是xml、txt还是其他格式,全部通过URI对资源进行唯一的标识。
URL--- Uniform Resource Locator,统一资源定位器,是完整的访问接口,而URI是域名之后的部分。
如:
URL: https://weather.com/zh-CN/weather/today/l/CHXX0008:1:CH?Goto=Redirected
URI: /zh-CN/weather/today/l/CHXX0008:1:CH?Goto=Redirected
创建项目
Soupui根据地址自动解析
根据需求添加新的资源
https://weather.com/zh-CN/weather/today/l/CHXX0013:1:CH?Goto=Redirected
添加参数
查看
WADL(Web Application Description Language)用来描述REST接口。WADL就像是WSDL的REST版,随着REST被应用到复杂的领域,SOAP的影子无处不在。
小结:
可以根据需求,将资源定义为不同的method请求
WSDL和WADL区别:
1.WSDL是面向接口的描述,WADL是面向资源的描述
2.WADL是基于HTTP的,WSDL 2.0是接口独立的。
5 HTTP接口测试
创建http项目
File – new empty project--- add test suite – test step – add steps – HTTP request
获取请求,打开页面,使用浏览器的抓包功能F12 network获取参数
样式:
抓取login信息:
这一步需要获取两个信息:content type header 和 jumpurl
复制到soupui,默认情况下会自动识别 media type 类型,如果需要手动添加,则从上一步获取的信息中copy
手动添加header,添加user-agent
手动添加user-agent 或使用全局添加
运行不存储login信息,因为接口之间默认没有关联关系,如果想要保存login信息, 勾选 maintain HTTP session,这样可以在页面中看到登录信息
发布文章:这里content-type以及内容已经改变,抓包新内容填充
6 关联实现
实现用户的登录登出
实际应用场景中,需要将auth获取的token参数用于login 和 logout
如何实现关联:tempjson 和token, 这里的tempjson 是与soupui关联参数相关,因为响应中xml嵌套了json格式
正在实现关联的参数是:property transfer
Step1
Step2
Step3 login and logout 都使用变量引用, 这里返回的是json和xpath
如果返回的是纯字符串,则需要使用 Groovry script,取名为getverify
在getverify中写入脚本,先添加Properties,里面引入也给变量verify,初始为空值。
然后,编写getverify脚本
参数化fatie, verify值将自动更新。
方式二:
修改变量为全局变量
更改调用参数