『动善时』JMeter基础 — 50、使用JMeter测试WebService接口
因为我之前对
WebService
接口也不是很了解,所以本篇文章先简单的概括的说明一下WebService
的相关知识。在文章的后半部分,才是测试WebService
接口的演示。
1、什么是WebService
(1)先说说什么是服务
想要理解WebService
,必须先理解什么是Service
(服务)。
传统上,我们把计算机后台程序(Daemon
)提供的功能,称为"服务"(Service
)。比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个"服务"。通俗地说,"服务"就是计算机可以提供的某一种功能。
根据来源的不同,"服务"又可以分成两种:
一种是"本地服务":使用同一台机器提供的服务,不需要网络。
另一种是"网络服务":使用另一台计算机提供的服务,必须通过网络才能完成。
举例来说:
- 我现在有一批图片,需要把它们的大小缩小一半。那么,我们可以把"缩放图片"看成是一种服务。你可以使用"本地服务",在自己计算机上用软件缩小图片,也可以使用"网络服务",将图片上传到某个网站,让服务器替你缩小图片,完成后再通过网络送回给你。
- 再比如,一件事你可以自己做,也可以交给另一个人去做。肚子饿了,你可以自己做饭,也可以打电话去订一份比萨,让店家替你做好送上门。
(2)什么是WebService
WebService
直译就是网络服务的意思。"网络服务"的本质,就是通过网络调用其他网站的资源。
而WebService
服务的标准解释:WebService
是一种跨编程语言和跨操作系统平台的远程调用技术。
解释说明:
- 所谓跨编程语言:就是说服务端程序采用Java编写,客户端程序则可以采用其他编程语言编写,反之亦然!
- 所谓跨操作系统平台:则是指服务端程序和客户端程序可以在不同的操作系统上运行。
- 所谓远程调用:就是通过网络,一台计算机A上的一个程序可以调用到另外一台计算机B上的一个服务接口。
总结:
WebService
就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。- 我们把调用这个
WebService
服务的应用程序叫做客户端,而把提供这个WebService
服务的应用程序叫做服务端。 WebService
是建立可互操作的分布式应用程序的一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service
,只要我们可以通过Web service
标准对这些服务进行查询和访问。
也就是说
WebService
是一个平台,是一个标准,实现跨编程语言和跨操作系统平台的远程调用服务。并且
WebService
规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。
2、WebService和SOAP的关系
可以简单的理解:
WebService=SOAP+WSDL
(1)SOAP请求协议介绍
SOAP(Simple Object Access Protocol
):简单对象访问协议。(也就是需要遵守的规则)
SOAP传输协议使用的就是HTTP协议,SOAP请求是HTTP中POST请求的一个专用版本,也可以说成是对HTTP中POST请求的一种封装。遵循一种特殊的XML消息格式,请求头属性Content-type
设置为text/xml
的时候,任何数据都可以XML化。
SOAP请求的内容:
# 请求头内容
POST /WebServices/WeatherWebService.asmx HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3603)
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://WebXml.com.cn/getSupportCity"
Host: www.webxml.com.cn
Content-Length: 348
Expect: 100-continue
Connection: Keep-Alive
# 请求体内容
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<getSupportCity xmlns="http://WebXml.com.cn/">
<byProvinceName>广东</byProvinceName>
</getSupportCity>
</soap:Body>
</soap:Envelope>
说明:
- 可以看到,一个SOAP请求其实就是一个HTTP请求,但为了表明内容是SOAP的数据,需要加入上面请求头中
SOAPAction: "http://WebXml.com.cn/getSupportCity"
部分来以示区别。 - 也就是说,如果请求头中有
SOAPAction
属性,那么请求会被当作SOAP的内容来处理而不会当作HTML来解析。 - 当然可以用上面指定
SOAPAction
头来表示内容是SOAP的内容,也可以指定Content-Type: application/soap+xml
来表示内容是SOAP的内容。 - SOAP请求中最后的那段XML数据,这个就是请求的具体内容,这个就是SOAP规定的请求数据格式。
(2)SOAP请求的数据格式
上面知道了SOAP请求是通过HTTP协议的POST方法来传输数据的,只不过是请求的Header中加了一些标识来说明自己是一个SOAP请求。
而发送数据的具体格式,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://WebXml.com.cn/">
<soap:Header>
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
<soap:Body>
<getSupportCity xmlns="http://WebXml.com.cn/">
<byProvinceName>广东</byProvinceName>
</getSupportCity>
</soap:Body>
</soap:Envelope>
逐个解释里面的元素:
Envelope
:SOAP的请求内容必须以Envelope
做为根节点。
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
不能修改,否则会出错。Header
:这个是可选的,如果需要添加Header元素,那么它必须是Envelope
的第一个元素。
Header的内容并没有严格的限制,我们可以自己添加一些和应用程序相关的内容,但是客户端一定要记得处理这些Header元素,可以加上mustUnderstand
强制进行处理。Body
:这个就是请求的主题内容了,请求什么函数,参数是什么类型等等都在这里面指定。
用标签表示一个函数,然后用子元素表示它的参数。
在调用时不需要指定参数和返回类型,因为提供服务的一方已经规定好了数据类型,在调用时指定数据类型没有任何意义。- 在
<soap:Body>
里面的内容:就是请求的内容,请求的方法为getSupportCity
,该方法有一个名为byProvinceName
的参数,参数的值为“广东”这个字符串。
再看一下返回的内容:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<getSupportCityResponse xmlns="http://WebXml.com.cn/">
<getSupportCityResult>
<string>广州 (59287)</string>
<string>深圳 (59493)</string>
<string>珠海 (59488)</string>
<string>汕头 (59316)</string>
<string>佛山 (59279)</string>
</getSupportCityResult>
</getSupportCityResponse>
</soap:Body>
</soap:Envelope>
3、什么是WSDL
(1)WSDL的定义:WSDL(Web Services Description Language
)指网络服务描述语言 。是基于 XML 的用于描述 WebServices
以及如何访问 WebServices
的语言。
(2)WSDL的作用:WSDL 是一种使用 XML 编写的文档,这种文档可描述某个 WebService
服务。它可规定服务的位置,以及此服务提供的操作(或方法)。
具体的解释说明:
1)WSDL到底是什么?
好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。
同理
WebServices
也一样,WebServices
客户端要调用一个WebServices
服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用。所以,
WebServices
务器端首先要通过一个WSDL文件,来说明自己家里有啥服务可以对外调用。比如:
服务是什么:服务中有哪些方法,方法接受的参数是什么,返回值是什么。
服务的网络地址用哪个URL地址表示。
服务通过什么方式来调用。
2)WSDL的作用是什么?
WSDL就是一个基于XML的语言,用于描述
WebServices
及其函数、参数和返回值。它是
WebServices
客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。
一些最新的开发工具,既能根据你的
WebServices
生成WSDL文档,又能导入WSDL文档,生成调用相应WebServices
的代理类代码。3)WSDL文件存在的位置?
WSDL文件保存在Web服务器上,通过一个URL地址就可以访问到它。
客户端要调用一个
WebServices
服务之前,要知道该服务的WSDL文件的地址。例如我们访问:http://www.webxml.com.cn/webServices/WeatherWebservice.asmx?wsdl
,我们就可以看到这个接口下有什么方法和参数。
WebServices
服务提供商可以通过两种方式来暴露它的WSDL文件地址:1、注册到UDDI服务器,以便被人查找;
2、直接告诉给客户端调用者。
所以总结来说:
WebServices
是一个平台,是一个标准,是一个规范,不是实实在在的东西,简单的说是通过SOAP请求协议和WSDL语言构成的,但总体呈现出来的效果,也可以称之为一种技术。- SOAP是一种访问协议,具体的技术。
- WSDL是一种网络服务描述语言,具体的技术。
4、测试WebService接口前的准备
(1)如何判断是WebService接口
- 询问开发可知。
- 通过地址查看可知。如果接口URL地址最后有WSDL,表示该接口为
WebService
接口。 - 通过浏览器展示的信息可知。在浏览器中访问该接口URL地址,如果返回如下图所示的内容,说明该接口就是一个WebService接口。
(2)如何获取WebService接口相关信息
- 查看接口文档(上上策)。
- 通过浏览器展示的信息可知。
- 通过工具查看可知(这里推荐
SoapUI
工具)。
如果我们要调用远程的WebService
接口,就必定要告诉对方,我们要调用的是一个什么方法,以及这个方法的参数的值等等。
我们以一个查询城市天气预报的地址http://www.webxml.com.cn/webServices/WeatherWebservice.asmx?wsdl
为例,访问这个接口,我们就可以看到这个接口下有什么方法和参数。
1)访问WebService接口的地址
就是上面的地址。
2)如何获取请求参数
也就是如何表示数据,用什么格式去表示函数以及它的参数。
我经常使用SoapUI
工具来解析WebService
接口内容,可以获取到接口的地址,接口的个数,和接口的参数。
上面访问的地址解析后,如下图所示:
说明:我们要查询天气,就需要调用getSupportCity
方法,后边红框中就是请求中的内容。
5、使用JMeter测试WebService接口示例
查询天气的WebService
服务的WSDL文档访问地址:http://www.webxml.com.cn/webServices/WeatherWebservice.asmx?wsdl
(1)测试计划内包含的元件
添加元件操作步骤:
- 创建测试计划。
- 创建线程组:
选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
。 - 在线程组中,添加配置元件HTTP信息头管理器组件:
选中“线程组”右键 —> 添加 —> 配置元件 —> HTTP信息头管理器
。 - 在线程组中,添加取样器“HTTP请求”组件:
选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求
。 - 在线程组中,添加监听器“察看结果树”组件:
选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树
。
最终测试计划中的元件如下:
点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。
(2)HTTP信息头管理器内容
前面说过SOAP传输协议是一种封装的HTTP中的POST请求,并且请求头属性Content-type
设置为text/xml
的时候,任何数据都可以XML化。
所需我们需要在请求的请求头信息中,添加Content-type=text/xml
。
如下图所示:
(3)HTTP请求界面内容
在JMeter中,并没有发送SOAP请求的取样器,又因为SOAP传输协议是一种封装的HTTP中的POST请求,所示我们创建一个HTTP请求取样器,来发送SOAP请求即可。(请求方式POST)
编辑完的界面内容如下:
说明:
- 接口基本信息部分,就是分解这个
http://www.webxml.com.cn/webServices/WeatherWebservice.asmx?wsdl
地址。 - 而请求发送的参数,就是上面用
SoapUI
工具来解析WebService
接口,如下:<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://WebXml.com.cn/">
<soap:Header/>
<soap:Body>
<web:getSupportCity>
<!--Optional:-->
<web:byProvinceName>山东</web:byProvinceName>
</web:getSupportCity>
</soap:Body>
</soap:Envelope>
这种格式的数据,只能放在消息体数据选项页中。
(4)运行查看结果
结果如下图所示:
和在SoapUI
工具中请求的数据一样,如下图:
这就说明我们使用JMeter访问WebService
接口成功了。
参考:
『动善时』JMeter基础 — 50、使用JMeter测试WebService接口的更多相关文章
- 『动善时』JMeter基础 — 50、使用JMeter测试WebSocket接口
目录 1.什么是WebSocket接口 2.为什么需要WebSocket 3.测试WebService接口前的准备 4.WebSocket Sampler组件界面详解 5.使用JMeter测试WebS ...
- 『动善时』JMeter基础 — 51、使用JMeter测试WebService接口
目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...
- 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求
目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...
- 『动善时』JMeter基础 — 41、使用JMeter连接数据库(MySQL)
目录 1.为什么要使用JMeter连接数据库 2.JMeter连接数据库的前提 3.JDBC连接配置组件界面介绍 4.JMeter连接数据库演示 (1)测试计划内包含的元件 (2)测试计划中添加链接数 ...
- 『动善时』JMeter基础 — 58、JMeter分布式测试
目录 1.JMeter分布式测试概念 2.JMeter分布式测试前提条件 3.JMeter实现分布式测试 (1)在执行机中的配置 (2)在控制机中的配置 (3)启动执行机中的JMeter服务 (4)在 ...
- 『动善时』JMeter基础 — 2、JMeter的安装和启动
1.安装Java环境 由于JMeter是纯Java的桌面应用程序,因此它的运行环境需要Java环境,即需要安装JDK或JRE.(也就是安装JDK环境) 步骤简要说明: 下载并安装JDK 配置环境变量 ...
- 『动善时』JMeter基础 — 7、jmeter.properties文件常用配置
目录 1.默认语言设置 2.配置默认编码格式 3.GUI图标放大比例设置 4.功能区工具栏图标大小设置 5.视图区目录树图标大小设置 6.内容区编辑字体设置 7.添加JMeter元素快捷键设置 8.捕 ...
- 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化
目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...
- 『动善时』JMeter基础 — 32、JMeter察看结果树组件详解
目录 1.察看结果树介绍 2.察看结果树界面详解 3.察看结果树的其他功能 (1)将数据写入文件中 (2)Search功能 (3)Scroll automatically选项 4.总结 1.察看结果树 ...
随机推荐
- BUAA软件工程个人项目
写在前面 项目 内容 所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航) 作业要求 [个人项目作业](<https://edu.cnblogs.com/campus/buaa/BU ...
- 北航OO(2020)第三单元博客作业
一.JML理论基础及相关工具链 1.JML理论基础 该部分梳理本单元作业中涉及到的JML知识. 1.1注释结构 JML采用javadoc注释的方式来表示规格,且每行以@开头.通过使用//@annota ...
- stm32开发笔记(二):stm32系列使用V3.5固件库的帮助文件以及GPIO基本功能(一)
前言 stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的. 本章讲解使用库函数使用GPIO引脚功能. 补充 本文章为多年前学习 ...
- 《Ray Tracing in One Weekend》阅读笔记 - 9、Metal(金属)
如果我们希望不同的物体使用不同的材料,则需要进行设计决策.我们可以使用具有许多参数的通用材料,而将不同的材料类型仅将其中一些参数归零.这不是一个坏方法.或者我们可以有一个抽象的材料类来封装行为.我是后 ...
- ssh-的搭建和使用
ssh的作用 : 可实现远程客户端登录服务器并对服务器的文件进行操作 ssh服务器的安装 farsight@ubuntu:~$ sudo apt-get install openssh-server ...
- 通过Cloudflare开启全站https
Cloudflare 添加域名后,会自动生成通用证书,快速开启全站HTTPS,服务端不用做任何修改,还可以选择多种开启模式 一.注册Cloudflare账号 直接打开网站:https://www.cl ...
- golang:函数总结
golang保留的函数 init(), main()是golang的保留函数,有如下特点: main() 只能用在main包中,仅可定义一个,init() 可定义任意包,可重复定义,建议只定义一个 两 ...
- [Java] 数据分析--数据预处理
数据结构 键-值对:HashMap 1 import java.io.File; 2 import java.io.FileNotFoundException; 3 import java.util. ...
- 011.Ansible条件语句
一 简介 在有的时候play的结果依赖于变量.fact或者是前一个任务的执行结果,或者有的时候,我们会基于上一个task执行返回的结果而决定如何执行后续的task.这个时候就需要用到条件判断. 条件语 ...
- Docker存储(4)
一.docker存储资源类型 用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及到容器的数据管理 (1)Da ...