SoupUI 测试入门

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紧密结合,因为它服务器无状态。

RESTSOAP的区别

因为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操作代表删除指定的图书,等等

SOAPSimple Object Access Protocol - 简单对象访问协议)定义了一种强类型的消息传递框架,该框架高度依赖XML和schemas。

RESTRepresentation 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

clip_image001

开发将代码发布为webservice,测试会拿到一个测试地址,类似: http://IP:PORT/ws/services

clip_image002

点击wsdl

http://IP:PORT/ws/services?wsdl

clip_image003

根据以上信息,判定为SOAP接口项目, initial wsdl 为项目的接口地址

clip_image004

项目创建后,将自动解析wsdl内服务,并生成request请求,双击request, 左侧为请求,右侧为响应

clip_image005

在request body中填入对应的参数,即可进行简单测试验证测试验证

clip_image006

默认情况下,请求和响应都是xml格式,可以选择Raw查看更多信息

创建test suite:选中项目--右键—New TestSuite

clip_image007

在testsuite下新建 test case

clip_image008

两种方式可以新建测试步骤,右键添加步骤 或 在请求中右键选择,将其添加到test case

clip_image009------》 clip_image010

在test case 中添加断言

clip_image011

批量运行cases, 分串行和并行执行,并行模式下不支持查看log,有点在于回归测试比较方便。

clip_image012

3 SOAP接口测试

完成webservice接口测试,是基于SOA理念,采用XML+SOAP+HTTP协议来实现接口规范。

操作实现: new soap project --- 入参 --- 变量 --- 断言 --- 添加到testcase

如果只知道地址和服务名,那么尝试在浏览器中输入地址服务+?wsdl,如果可以解析到xml 内容,那么就是标准的webservice接口,可以对其进行相关的测试

clip_image013

New – new soap project -- 填入名称和wsdl地址,即上一步可以解析的wsdl地址,可以同时勾选上chuangjian sample request 和 Testsuite

clip_image014

项目创建后,对test case 增加断言,这里增加一个xpath 断言 或简单使用Contains

Xpath

clip_image015

Contains 断言,可以使用正则表达试

clip_image016

对接口压力测试

clip_image017

效果示例:

clip_image018

小结:

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

创建项目

clip_image019

Soupui根据地址自动解析

clip_image020

根据需求添加新的资源

https://weather.com/zh-CN/weather/today/l/CHXX0013:1:CH?Goto=Redirected

clip_image021

添加参数

clip_image022

查看

WADL(Web Application Description Language)用来描述REST接口。WADL就像是WSDL的REST版,随着REST被应用到复杂的领域,SOAP的影子无处不在。

clip_image023

小结:

可以根据需求,将资源定义为不同的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

clip_image024

获取请求,打开页面,使用浏览器的抓包功能F12 network获取参数

clip_image025

样式:

clip_image026

抓取login信息:

clip_image027

这一步需要获取两个信息:content type header 和 jumpurl

clip_image028

复制到soupui,默认情况下会自动识别 media type 类型,如果需要手动添加,则从上一步获取的信息中copy

clip_image029

手动添加header,添加user-agent

clip_image030

手动添加user-agent 或使用全局添加

clip_image031-------clip_image033

运行不存储login信息,因为接口之间默认没有关联关系,如果想要保存login信息, 勾选 maintain HTTP session,这样可以在页面中看到登录信息clip_image034

发布文章:这里content-type以及内容已经改变,抓包新内容填充

clip_image035

6 关联实现

实现用户的登录登出

clip_image036

实际应用场景中,需要将auth获取的token参数用于login 和 logout

clip_image037

如何实现关联:tempjson 和token, 这里的tempjson 是与soupui关联参数相关,因为响应中xml嵌套了json格式

clip_image038

正在实现关联的参数是:property transfer

clip_image039

Step1

clip_image040

Step2

clip_image041

Step3 login and logout 都使用变量引用, 这里返回的是json和xpath

clip_image042

如果返回的是纯字符串,则需要使用 Groovry script,取名为getverify

clip_image043

在getverify中写入脚本,先添加Properties,里面引入也给变量verify,初始为空值。

clip_image044

然后,编写getverify脚本

clip_image045

参数化fatie, verify值将自动更新。

clip_image046

方式二:

修改变量为全局变量

clip_image047

更改调用参数

clip_image048

***************用努力照亮现实的梦!***********************
原文地址:https://www.cnblogs.com/orange2016/p/14524152.html