如何高效的进行WebServicepython 接口性能测试试

jmeter发送soap请求进行webservice接口压力测试
1.创建线程组
2.创建soap请求
3.显示图形结果
vcD4KPHA+PGltZyBzcmM9"/Collfiles/53.jpg" alt="\">关注51Testing
如何高效的进行WebService接口性能测试
发表于: 09:26 &作者:蜂言蜂语 & 来源:博客园
推荐标签:
  关于的理解,主要有两类,一类是模块与模块间的调用,此类接口测试应该归属于的范畴,主要测试模块与模块之间联动调用与返回。此类测试大多关注于流程性与正确性,通过设置不同的输入,得到相应的返回与对应输入数据的预期输出目标比较是否一致,来确认接口的正确性和流程性。  另一类是系统的调用,如登录调用认证系统的接口,如本系统调用第三方系统的接口等等,这类针对由端发起的调用的测试也是一种接口测试,这类测试关注点更着重放在效率和健壮性上。  对于第一种,比较好的实践是将输入数据做成参数,在HyperPacer的数据池中进行维护,而接口调用则做成自动化进行。目前HyperPacer已经很好的能实现此类测试的需求。作为的专题,我们不在此展开赘述。我们重点来说第二种接口测试。  在这类web接口测试中,最多的就是WebService的测试。关于WebService,soap,XML,rpc,wsdl等一系列概念,有不清楚的可以参考下面链接中给出的一些概念解释:官人,点我点我~虽然解释的不够详细,但是基本的概念大概解释清楚了。  对于WebService的测试,我们在网上比较容易查找到的实践资料,LoadRunner在这方面确实方便,基本不需要太多这方面的知识,直接图形化界面就可以自动生成相应方法的调用和参数输入。  而和HyperPacer对于WebService的测试资料相对较少,而且也没有便捷的方式能自动生成相应方法,所以导致很多新人在使用这两个工具进行WebService测试的时候感觉无从下手。这里以HyperPacer为例,讲解一下用HyperPacer编写脚本调用WebService进行性能测试。首先我们,在网上找到一个公开的天气预报的WebService接口,该接口的描述文档如下:完整的文档在这儿~~~  这是一个WSDL文档的片段截图,在一个WSDL文档中  一个WSDL文档由以下几部分部分组成:  types  指定了WebService用到的所有数据类型。  message  指明一个操作所用到的数据类型。  portType  指出了这个WebService所有支持的操作,就是说有哪些方法可供调用。  binding  transport指明传输协议,  operation指明要暴露给外界调用的操作。  use属性指定输入输出的编码方式,这里没有指定编码。  services  指定服务的一些信息,主要是指定服务的访问路径。在我们的片段截图里面我们可以看到提供了很多的方法,由于我们是举例子,这里我们只选择其中的一个方法getWeatherbyCityName来进行演示,我们可以看到在这个方法里只有一个参数theCityName,顾名思义,这个接口的这个方法是实现我们输入一个城市名或者编号,就可以得到该城市的天气情况。  下面我们来用HyperPacer来实现这个WebService的调用,首先添加一个工程,interface_demo和一个叫接口测试的并发场景,在场景内增加一个WebService取样器,取样器的界面如下:  可以看到在WebService发送的请求体中主要信息就是我们要调用的方法和方法的参数数据。  在过去接触的很多新人中,大多都是在这个请求体的地方不知道该如何编写。这里给出模版如下:首先请求体先是XML的声明,然后是soapenvelop对象。这个没有为什么,soap请求内容能够必须以envelope作为根节点,以及envelope中的各个命名空间内容也都是固定的,有兴趣详细了解的可以点击下面的链接进行查看:就是我~~~,里面有Envelope的schema的相关定义。  在envelope的根节点下分别是Header元素和Body元素。  Header这个是可选的,如果需要添加Header元素,那么它必须是Envelope的第一个元素。Header的内容并没有严格的限制,我们可以自己添加一些和应用程序相关的内容,但是客户端一定要记得处理这些Header元素。  而Body就是请求的主体了,如请求调用的方法,方法包含哪些参数等信息。在调用中没有指定参数和返回类型,这里不需要指定,因为提供服务的一方自己已经规定好了数据类型,在调用时指定数据类型没有任何意义,可以回过头查看上面WSDL文档截图中关于根据城市获取天气这个的方法。  而一般情况下,我们用标签来表示我们调用的方法,然后用子标签来表示它的参数。如上面我们调用的是getWeatherbyCityName这个方法,所以在Body元素中,我们这样写:  &getWeatherbyCityNamexmlns=".cn/"&  &theCityName&58367&/theCityName&  &/getWeatherbyCityName&  在上面,我们用黑色粗体标识的标签就是方法名,而用斜体标识的标签就是该方法的参数。  所以拼起来请求体就是如下格式:  &XML声明&  &soap:Envelope&  &Header&  &/Header&  &Body&  &方法名&  &参数名&参数value&/参数名&  &/方法名&  &/Body&  &/soap:Envelope&  按照上面的模版拼出来请求体以后,我们的WebService采样器就编写完成了,执行一下,结果如下:  我们可以看到执行完成后,已经可以获取到上海的天气情况了。实际执行测试的时候,我们当然不会这么简单,只测试一个方法。很多时候是需要将多个方法联动串联起来进行测试。譬如,这里我们用到的获取天气的接口,我们可以看到还有获取支持的城市列表的方法。感兴趣的小伙伴可以在看完本文档后,自己试着完成先调用获取城市列表的方法取到支持的城市列表,然后每个用户分别取到一个城市名,再根据取到的这个城市名在获取该城市的天气,并且根据取到的天气信息中,如果低于5摄氏度则将该城市名输出到控制台。
搜索风云榜
51Testing官方微信
51Testing官方微博
测试知识全知道博客分类:
先说明一下,本人是开发,对测试不是特别熟悉,但因工作的需要,也做过一些性能测试方面的东西。比较久之前很简单的用过,最近又用到了,熟悉一下。现做一个总结。
使用loadrunner进行压力测试主要分两步,第一步是编写脚本(比较重点),第二步执行测试(配置都是在界面上点点就行了,当然我只的是比较简单的,能满足日常需要的),第三步分析结果(这一步比较高深,但是对于我来说能看懂简单的性能指标就OK了)。所以这里就说一下脚本的编写,给未来再用到做参考。
1.HTTP的GET请求
这里以访问百度为例,地址/s?wd=mobile,表示在百度上搜索mobile。具体脚本如下(有注释)
lr_start_transaction("send");
web_reg_find("Search=Body",//这里说明在Body的范围内查找
"SaveCount=ret_Count",//这里表示把返回值的个数放在变量ret_Count里
"Text=mobile",//这里表示查找的内容是“mobile”
status=web_url("Baidu_Search",
"URL= /s?wd=mobile",
"TargetFrame=Main",
"Resource=0",
"RecContentType=text/html",
"Mode=http",
lr_output_message("Request Status:%d",status);
lr_output_message("查找到的返回值个数:%d",atoi(lr_eval_string("{ret_Count}")));
if (atoi(lr_eval_string("{ret_Count}")) & 0){//这里判断检查到的个数
lr_output_message("Rec successful.");
lr_end_transaction("send", LR_PASS);
lr_error_message("Rec failed");
lr_end_transaction("send", LR_FAIL);
2.HTTP POST请求
这个是在我们项目中用到的,发送POST请求,进行自然语言识别的,脚本如下:
lr_start_transaction("send");
web_reg_find("Search=Body",//这里说明在Body的范围内查找
"SaveCount=ret_Count",//这里表示把返回值的个数放在变量ret_Count里
"Text=t",//这里表示查找的内容是“t”
status=web_submit_data("trs",
"Action=http://192.168.77.185:9002/recognizeText",//地址
"Method=POST",//POST请求
"RecContentType=text/html",
"Mode=HTML",
"Name=usercontent","Value=gprs",ENDITEM,//这一行表示传入一个参数usercontent,值为gprs
"Name=Accept","Value=text/plain",ENDITEM,
lr_output_message("Request Status:%d",status);
if (atoi(lr_eval_string("{ret_Count}")) & 0){//这里判断检查到的个数
lr_output_message("Rec successful.");
lr_end_transaction("send", LR_PASS);
lr_error_message("Rec failed");
lr_end_transaction("send", LR_FAIL);
3.WebService请求
webservice请求的脚本建议通过可视化的方式添加
1)引入webservice,注意wsdl后缀
2)给入参填值
3)给返回值指定存储到的变量中
4)结果检查
这个与其它模式一样,不多说了
我这里添加的是网上公用的天气预报webservice,地址是:.cn/WebServices/WeatherWebService.asmx
详细脚本如下:
lr_start_transaction("send");
status=web_service_call( "StepName=getSupportCity_102",
"SOAPMethod=WeatherWebService|WeatherWebServiceSoap|getSupportCity",//这里是我已经引用了webservice的名称及调用方法
"ResponseParam=response",
"Service=WeatherWebService",
"ExpectedResponse=SoapResult",
"Snapshot=t.inf",
BEGIN_ARGUMENTS,
"byProvinceName=安徽",//这里是入参,参数名称:byProvinceName,值:安徽。入参和返回值的名称都可以再引用里看见
END_ARGUMENTS,
BEGIN_RESULT,
"getSupportCityResult=result",//这里是返回值,名称:getSupportCityResult,把它放到变量result中
END_RESULT,
lr_output_message("Request Status:%d",status);
lr_output_message("Result:%s",lr_eval_string("{result}"));//这里把返回值输出,调试webservice的时候用
if(strstr(lr_eval_string("{result}"),"合肥")&0){//这里是判断返回值中是否包含“合肥”
lr_end_transaction("send",LR_PASS);
lr_end_transaction("send",LR_AUTO);
4.Socket请求
我这里指的是简单的Socket请求,端连接,发送接收的都是一个字符串。比较复杂的Socket请求,自己录制脚本。如果不知道,自己去查。
详细脚本如下,另外还包含一个data.ws文件,用来声明发送和接收的字节数组及其长度的,并指定要发送的内容(发送的内容一样可以参数化的)
#include "lrs.h"
int recvlen=0;
lrs_startup(257);
lr_start_transaction("Trans_1");
lr_start_transaction("Conn_1");
rc=lrs_create_socket("socket0", "TCP", "RemoteHost=192.168.1.101:8888",
LrsLastArg);//创建Socket连接
if (rc != 0 ) {
lr_end_transaction("Conn_1", LR_FAIL);
lr_end_transaction ("Trans_1", LR_FAIL);
lr_end_transaction("Conn_1", LR_PASS);
//判断socket是否链接成功的事务,0表示创建成功
lrs_send("socket0", "buf0", LrsLastArg); //发送buf0,buf0为在data.ws中定义的发送变量
lrs_receive("socket0", "buf1", LrsLastArg); //接收消息,存放在buf1中,buf1是在data.ws中定义的接收数组,注意数组长度一定要大于等于实际接收长度
lrs_get_last_received_buffer("socket0",&recvbuf,&recvlen);//把Socket最后接收的字节数组,长度放在recvlen中,内容放在recvbuf中
lr_output_message("Received:%s",lr_eval_string(recvbuf));
if(recvlen&3)
lr_end_transaction("Trans_1", LR_PASS);
lr_end_transaction ("Trans_1", LR_FAIL);
lrs_disable_socket("socket0", DISABLE_SEND_RECV);
lrs_close_socket("socket0");
;WSRData 2 1
"hehehehe"
结束的话:
这里介绍的测试脚本,我觉得开发测试人员都需要会,因为开发弄出来的东西,自己要了解个大概的性能吧。如果测试的专业人员,这些都要熟知,再如果想要了解的更多,请转到51testing上去。
浏览 46808
浏览: 477912 次
推荐聚合数据上一些免费API接口https://www.juh ...
请问楼主,为什么我在测试的时候,会收到2次请求?
之前看到一个,应该也是灵图的,blo ...
不错不错!但现在第三方平台上各种API接口很多,就像聚合数据h ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'& & &涉及到服务的功能在不断的增加,对于我们来说,我们不仅要保证服务端功能的正确性,也要验证服务端程序的性能是否符合要求。那么都要做些什么呢?我们该怎样进行性能测试呢?
  性能测试一般会围绕以下这些问题而进行:
  1. 什么情况下需要做性能测试?
  2. 什么时候做性能测试?
  3. 做性能测试需要准备哪些内容?
  4. 什么样的性能指标是符合要求的?
  5. 性能测试需要收集的数据有哪些?
  6. 怎样收集这些数据?
  7. 如何分析收集到的数据?
  8. 如何给出性能测试报告?
  性能测试的执行过程及要做的事儿主要包含以下内容:
  1. 测试评估阶段
  在这个阶段,我们要评估被测的产品是否要进行性能测试,并且对目前的服务器环境进行粗估,服务的性能是否满足条件。
  首先要明确只要涉及到准备上线的服务端产品,就需要进行性能测试。其次如果产品需求中明确提到了性能指标,那也必须要做性能测试。
  测试人员在进行性能测试前,需要根据当前的收集到的各种信息,预先做性能的评估,收集的内容主要包括带宽、请求包大小、并发用户数和当前web服务的带宽等
  2. 测试准备阶段
  在这个阶段,我们要了解以下内容:
  a. 服务器的架构是什么样的,例如:web服务器是什么?是如何配置的?用的是什么?服务用的是什么语言编写的?;
  b. 服务端功能的内部逻辑实现;
  c. 服务端与数据库是如何交互的,例如:数据库的表结构是什么样的?服务端功能是怎样操作数据库的?
  d. 服务端与客户端之间是如何进行交互的,即接口定义;
  通过收集以上信息,测试人员整理出服务器端各模块之间的交互图,客户端与服务端之间的交互图以及服务端内部功能逻辑实现的流程图。
  e. 该服务上线后的用户量预估是多少,如果无法评估出用户量,那么可以通过设计测试执行的场景得出这个值;
  f. 上线要部署到多少台机器上,每台机器的负载均衡是如何设计的,每台机器的配置什么样的,网络环境是什么样的。
  g. 了解测试环境与线上环境的不同,例如网络环境、硬件配置等
  h. 制定测试执行的策略,是需要验证需求中的指标能否达到,还是评估系统的最大处理能力。
  i. 沟通上线的指标
  通过收集以上信息,确定性能该如何设计,如何设计性能测试用例执行的场景,以及上线指标的评估。
  3. 测试设计阶段
  根据测试人员通过之前整理的交互图和流程图,设计相应的性能测试用例。性能测试用例主要分为预期目标用户测试,用户并发测试,疲劳强度与大数量测试,网络性能测试,服务器性能测试,具体编写的测试用例要更具实际情况进行裁减。
  用例编写的步骤大致分为:
  a. 通过脚本模拟单一用户是如何使用这个web服务的。这里模拟的可以是用户使用web服务的某一个动作或某几个动作,某一个功能或几个功能,也可以是使用web服务的整个过程。
  b. 根据客户端的实际情况和服务器端的策略,通过将脚本中可变的数据进行参数化,来模拟多个用户的操作。
  c. 验证参数化后脚本功能的正确性。
  d. 添加检查点
  e. 设计脚本执行的策略,如每个功能的执行次数,各个功能的执行顺序等
  4. 测试执行阶段
  根据客户端的产品行为设计web服务的测试执行场景及测试执行的过程,即测试执行期间发生的事儿。通过监控程序收集web服务的性能数据和web服务所在系统的性能数据。
  在测试执行过程中,还要不断的关注以下内容:
  a. web服务的连接速度如何?
  b. 每秒的点击数如何?
  c. Web服务能允许多少个用户同时在线?
  d. 如果超过了这个数量,会出现什么现象?
  e. Web服务能否处理大量用户对同一个页面的请求?
  f. 如果web服务崩溃,是否会自动恢复?
  g. 系统能否同一时间响应大量用户的请求?
  h. 打压机的系统负载状态。
  5. 测试分析阶段
  将收集到的数据制成图表,查看各指标的性能变化曲线,结合之前确定的上线指标,对各项数据进行分析,已确定是否继续对web服务进行测试,结果是否达到了期望值。
  6. 测试验证阶段
  在开发针对发现的性能问题进行修复后,要再执行性能测试的用例对问题进行验证。这里需要关注的是开发在解决问题的同时可能无意中修改了某些功能,所以在验证性能的同时,也要关注原有功能是否受到了影响
& & &性能测试&是一项浩大的工程,若你只想随便找台机器装上ld后,造几条数据,弄几个并发用户简单跑一下出来结果就可以万事大吉了,那你就大错特错了!(这样得出的测试结果没有任何价值和意义,当然更无法依此评估出你贵公司系统的性能了。
真正开始执行之前除了编写详细的性能测试计划【所需的资源(软件+硬件+人力)】、设计测试脚本、准备测试数据、搭建测试环境外,还需要注意一下细节:
如何保证性能测试的顺利开展和执行?
首先考虑你性能测试的目标是什么,需要哪些人员协助你才能完成,然后协调相关人员(DBA、网管、开发人员等),保证在真正开展过程中能有效得到他们的协助和支持(性能测试不是一个人就能完成的,除非你“全才”啦);
你计划中需要申请的资源,比如运行contoller的机器,是否符合你的预期要求,Cpu是否有足够的处理能力,安装的是否符合你的要求(loadrunner9.5除load
Generator外都不能安装在64位机操作系统下,若没看清楚安装文件(安装程序下help\install.pdf)中system requirements for installing说明的话,你安装完成会发现自己白忙活了,还得重装OS,然后重来一次);
你要测试的程序是否功能都没问题了,若程序还有变更,请千万不要在录制部分后又变更了,你需要的版本是一个功能稳定的版本,能顺利录制脚本的的版本);
在测试执行前你是否召集开发和相关人员对程序中明显需要优化的地方(你执行时系统有些功能就无法忍受的慢)进行了优化,这样可以大大缩短你的性能测试周期;
在选择工具前,一定要慎重,你的程序设计语言和架构及其所运用的技术,此工具是否都支持,不然后续你需要自行开发的脚本就太多了,可能面临重新选择测试工具的严重问题);
分险分析:技术风险、风险分析、分险应对措施和风险监控方法。
设计测试脚本?
识别可能的系统性能问题,多与相关人员分析讨论。你所测系统的重点业务是什么?都有哪些角色参与?业务逻辑是什么样的?用户频繁使用的功能是否都考虑周全了?参数化数据的来源?都需要哪些检查点?脚本的精简程度?
准备测试数据?
基础数据:要更符合实际需求,人员、角色、初始化数据等;业务数据;要更符合实际业务,数据最好不要相同的数据,无效的数据,要类别丰富、覆盖所有业务逻辑的基础数据;可以通过自动化工具直接生成;脚本生成(单一数据,关联几个表的数据最好不用脚本生成);用ld生成。
搭建测试环境?
网络(带宽、可使用的有效ip地址个数);服务器的配置;当前测试环境的局限性(无法模拟的测试环境都有哪些)。
需求分析和需求转化
客户的性能需求不可测试、没有需求、需求模糊,要通过与客户、开发人员的沟通获得可测试、可衡量和可量化的性能需求
2.经验值
3.平均并发用户数C=nL/T(n:用户数量[login session的数量],L:用户平均使用时长[login session的时长],T:考察的时间段)
4.并发用户峰值:C1=C+3√C
本文已收录于以下专栏:
相关文章推荐
Web服务器性能测试介绍
    随着Internet的快速发展,Web服务器已成为Web系统的重要组成部分,同时也是影响Web系统性能的主要因素,因此Web服务器性能的...
随着浏览器功能的不断完善,用户量不断的攀升,涉及到web服务的功能在不断的增加,对于我们测试来说,我们不仅要保证服务端功能的正确性,也要验证服务端程序的性能是否符合要求。那么性能测试都要做些什么呢?我...
基于WSDL的Web服务的测试工具我见过的有这些工具:XML spy可以进行,但XML spy并不是免费软件。
本文讲解用oracle jdeveloper 进行web服务(Web Serv...
使用JMeter进行Web 性能测试 - 基本操作
系统:自己开发的接口管理系统
系统代码:/yangjing1989/API
两个关键点:模拟大量并发用户&监控系统负载参数分析系统瓶颈
使用工具:top(h帮...
使用JMeter和Badboy进行便捷高效的web性能测试
( 北京理工大学珠海学院   计算机学院软件工程  2015届本科生 缪伟韬 )
摘要: 性能测试是软件测试过程中必不可少的一项关键测试...
摘 要:由于Internet上Web应用的爆炸性增长和电子商务的飞速发展,对Web服务性能提出了越来越高的要求,如何为用户提供满意的服务性能保证成了一个新的研究课题。本文分析了一个影响Web服务性能的...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)使用SOAPUI对WEBSERVICE进行性能测试
性能测试一般使用loadunne,或者自己写的调用客户端进行测试。loadunne是全面的性能测试工具,对一般开发人员来说太重,并且需要license。自己写调用的客户端则测试的统计数据也需要写程序处理,比较麻烦。这里推荐使用soapui,SOAPUI可以直接根据WSDL生成SOAP数据包,手工填入参数后可以直接进行性能测试。1、下载soapui的最新安装包,目前的最新版本是soapui-1.7.5,SOAPUI里的TESTSUITE包含一些列的TESTCASE,TESTCASE由若干的测试步骤组成。每个TESTCASE包含TESTSTEP和LOADTEST。2、解包运行soapui.at3、创建File--newWSDLPoject,输入WSDL的HTTPURL地址4、SOAPUI产生该WSDL的HTTPBinding,里面有WSDL定义的业务方法5、每个业务方法下有自动产生的SOAP数据包的文本,编辑数据后可以直接发送
& 果果文库所有资源均来源于互联网,仅供网友学习交流,若侵犯了您的权益,请联系我们予以删除。
9253&&人浏览
11083&&人浏览
18456&&人浏览
19086&&人浏览
14661&&人浏览
18042&&人浏览
9485&&人浏览
4001&&人浏览
1941&&人浏览
14935&&人浏览
15187&&人浏览
14063&&人浏览
14850&&人浏览
5405&&人浏览
15735&&人浏览
本文标题:使用SOAPUI对WEBSERVICE进行性能测试 链接地址:
copyright@ 2013- Inc. All Rights Reserved 果果文库 版权所有 联系站长: ; 经营许可证编号:浙ICP备号

我要回帖

更多关于 app接口性能测试 的文章

 

随机推荐