转自:http://lovesoo.org/use-loadrunner-call-webservice-interface-testing-optimization-summary.html

本文主要介绍使用Loadrunner调用Webservice接口进行性能测试时的方法及优化总结。

 

1.Webservice协议脚本编写流程

 

下面介绍使用Loadrunner调用Webservice接口通用的流程与方法。

 

1.1 新建脚本,选择"Webservice"协议

 
 

1.2 选择Manage Services->Import,输入URL(注意需要在Webservice地址后面加上?wsdl),最后选择Impoort

 
 

1.3 点击脚本中Action脚本中return 0前,后选择Add Service Call

 
 

1.4 在打开的New Web Service Call窗口中,选择输入参数inputXML,勾选Include argument in,在Value中可以随便填写一些字符(接下来脚本中,我们会做一些参数化设置)

 
 

1.5 同理,选择输出参数中SubmitNLSMSRequestResult,后选择Save returned value in param,最后选择OK

 
 

这样调用一次Webservice接口就保存在Action脚本中

 
 

1.6 参数化

 

在脚本中用" <mobileno>13312345678</mobileno><smscontent>飞信</smscontent>"(此接口输入参数示例)替换"xxx"

 

选中"13312345678"并右键选择Replace with a Parameter,输入参数名称及参数类型(Unique Number)

 
 

1.7 参数设置

 

选择脚本右上角P图标进入参数列表进行

 

选择Unique Number"唯一数",选择格式为%8d (下图②)

 

选择"Block size per vuser"为1000000(每个虚拟用户分配到的参数个数,下图③)

 

同时Update value选择"Each iteration",When Out of values选择"Continue in a cyclic manner"(每次迭代后,参数才会更新,且每个虚拟用户用到的参数超过分配的参数个数1000000时,从头开始取,如此循环。下图④)

 
 

到此,我们已经完成了基本的Loadrunner脚本编写,下面我们开始本文真正的重点:脚本优化及实战演练,包括集合点添加,事务添加,返回结果判断及"保存20000会话"脚本编写。

 

2.Webservice脚本优化

 

2.1集合点添加

 

2.1.1什么是集合点?

 

集合点用以同步虚拟用户以便恰好在同一时刻执行任务。性能测试计划中,可能会要求系统能够承受1000 人同时提交数据,在LoadRunner 中通过在提交数据操作前面加入集合点,当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多少用户运行到集合点,如果不到1000 人,LoadRunner 就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,LoadRunner 命令1000 人同时去提交数据,从而达到测试计划中的需求。

 

2.1.2如何添加集合点?

 

在需要添加集合点之处,如开始调用接口前,右键选择Insert->Rendezvous,输入集合点名称即可。也可以直接在需要添加的脚本前添加"lr_rendezvous("Step1");",其中Step1为集合点名称,可自定义。

 
 

2.2事务添加

 

2.2.1添加开始事务

 

由于需要统计响应时间重要参数指标等,需要在脚本中手工添加事务。添加事务方法与集合点类似。在需要添加事务处,如集合点后,右键选择Insert->Start Transaction,输入事务名称即可。也可在脚本中直接添加"lr_start_transaction("Step1");",其中Step1为事务名称,可自定义。

 
 

在集合点前后添加事务区别?

 

如果在集合点前添加事务,在最后统计事务时间时就包括了在集合点等待的时间,导致统计的响应时间数据不准确(变大)。所以在此,我们选择在集合点后添加事务。

 

2.2.2添加结束事务

 

同理,在需要添加结束事务处,一般在web_service_call后,右键选择Insert->End Transaction,输入需要结束的事务名称即可。也可在脚本中直接添加"lr_end_transaction("Step1", LR_AUTO);",其中Step1为需要结束的事务名称。

 
 

LR_AUTO是什么?

 

lr_end_transaction中第二个参数为"事务结束状态",有LR_PASS(通过)、LR_FAIL(失败)、LR_AUTO(自动)、LR_STOP(暂停)。如果在lr_end_transaction中没有指定结束事物状态是LR_AUTO,而是明确指定为LR_PASS、LR_FAIL、LR_STOP其中的一种,则事物将以最后指定的状态来结束。

 

2.3返回结果判断

 

2.3.1单个返回结果判断

 

例如,当我们调用Webservice接口输入如下参数时"<mobileno>13312345678</mobileno> <smscontent>飞信</smscontent>",接口正确返回结果包括"飞信是中国移动的业务"。在此我们就需要对返回结果进行判断。示例代码如下:

 
 

lr_eval_string函数说明

 

C的变量都不能被LR的函数直接调用。所以:LR函数调用C变量,得先经过lr_eval_string的解析,相当于桥梁的作用。

 

strstr函数说明

 

函数格式为strstr(str1,str2),其中str1: 被查找目标string expression to search,str2:要查找对象The string expression to find.该函数返回str2第一次在str1中的位置,如果没有找到,返回NULL.

 

lr_error_message和lr_output_message函数说明

 

lr_error_message函数将错误消息发送到输出窗口和Vuser日志文件。

 

lr_error_message在回放日志中显示的是红色的字体,且显示语句所在行号;同时,如果脚本在controllor中运行时,会生成一个error信息。

 

lr_output_message函数将带有脚本部分的行号的消息发送到输出窗口和日志文件。

 

2.3.2多个返回结果判断

 

与单个结果判断类似,其实就是嵌套if语句,在此恕不赘述,示例代码如下,:

 
 

3.实战演练 – 保存20000会话

 

3.1需求说明

 

实际项目中,需要测试组件是否可以保存最大20000个会话,同时在保存20000个会话后,用户可以正常发送上行短信结束该20000会话。 压力测试中,我们共添加了50个虚拟用户,那么一个虚拟用户只需开始保存20000/50=400个会话,后结束这些会话即可。

 

3.3脚本编写

 

我们可以使用一个For循环完成这部分的工作,示例代码如下:

 
 

3.3.1lr_whoami函数说明

 

void lr_whoami (int *vuser_id, char **sgroup, int *scid);

 

返回值:返回当前运行的vuser ID、运行脚本的组名称以及场景ID

 

参数说明:

 

int *vuser_id 需先注册,保存正在运行的vuser的ID,在Virtual User Generator中回放返回-1

 

char **sgroup 需先注册,保存正在运行的vuser的组名(脚本名),在Virtual User Generator中回放返回None

 

int *scid需先注册,保存正在运行的Scenario的ID,在Virtual User Generator中回放返回0

 

3.3.2lr_save_int函数说明

 

lr_save_int函数意思是把一个整数保存为参数

 

abs(id)意思是取id的绝对值(因为在Virtual User Generator中,id返回为-1)

LR编写webservice协议接口的更多相关文章

  1. 使用LR编写HTTP协议Json报文格式接口脚本实战

    最近在做HTTP协议接口压测时,遇到一些编写脚本方面的问题,在这里总结记录下,以便以后温习,也希望能帮助到和我有同样困惑的朋友吧. //实战代码如下所示:Action() { lr_start_tra ...

  2. SoapUI SoapUI测试WebService协议接口简介

    SoapUI测试WebService协议接口简介 by:授客 QQ:1033553122 1. 创建项目,入口:File -> New SOAP Project,或者右键默认项目Project- ...

  3. 基于LR的HTTP协议接口性能测试脚本实例

    背景介绍 XXX项目性能测试中新增业务场景:XX设备的在线激活,因为存在多用户同时在线激活,故需进行性能测试以确认后台服务器系统在多用并发时功能是否正常,性能指标是否满足规格要求.用户使用场景为用户通 ...

  4. 【LoadRunner】LR编写Dubbo协议脚本

    一.Dubbo服务简介 Dubbo是一个分布式服务架构,把核心业务抽取出来作为独立的服务,使前端应用能更快速和稳定的响应. Dubbo服务工作原理:服务提供方提供接口,并提供接口的实现,提供方注册服务 ...

  5. LR编写get请求

    LR编写简单Get接口 接口必备信息:接口功能.URL.支持格式.http请求方式.请求参数.返回参数 请求地址 http://api.k780.com:88/?app=life.time 请求方式 ...

  6. 性能测试总结工作总结-基于WebService协议脚本 内置函数手动编写

    LoadRunner基于WebService协议脚本 WebService协议脚本有三种生成方式,一种是直接通过LoadRunner导入URL自动解析生成:一种是使用LoadRunner内置函数手动编 ...

  7. java之接口开发-初级篇-webservice协议

    webservice协议 客户端: 客户端生成使用soapUI生成 外部提供webservice地址,地址后加?wsdl.选择好目录然后生成,放到项目中实现 服务端: web.xml平级目录下创建se ...

  8. Loadrunner测试webservice协议总结

    Loadrunner测试webservice协议总结 一.协议选择 1.打开Virtual user generator,新建脚本,选择webservice协议

  9. Loadrunner11中webservice协议脚本总结

    Loadrunner11中webservice协议脚本总结 简介     webservices协议是建立可交互操作的分布式应用程序的新平台,它通过一系列的标准和协议来保证程序之间的动态连接,其中最基 ...

随机推荐

  1. BFC(块级格式化上下文)笔记

    BFC特性: 1.BFC是一个独立的布局容器,内部元素不会影响BFC外面的元素,反之亦然. 2.计算BFC高度时,会计算内部的浮动元素. 3.BFC会阻止外边距的合并. 4.BFC的区域不会与外部浮动 ...

  2. Java TreeSet集合 比较器排序Comparator的使用

    比较器排序Comparator的使用 存储学生对象,并遍历,创建TreeSet集合使用带参构造方法 要求,按照学生年龄从小到大排序,如果年龄相同,则按照姓名的字母循序排序 结论 用TreeSet集合存 ...

  3. 解决 genymotion 安装apk报错 app contains ARM native code and your Genymotion device cannot run ARM instructions

    1.某些APP安装在模拟器时提示“ this probably means that the app contains ARM native code and your Genymotion devi ...

  4. codeforces 1283F. DIY Garland(树+优先队列)

    题目连接:https://codeforces.com/contest/1283/problem/F 题意:一根电线连接着两个点,这两个点分别代表着两个灯,灯有自己的编号i,其亮度是2 ^ i,每根电 ...

  5. Java对象构成所有Java应用程序的基础

    通过在优锐课的ange交流下,掌握了很多编程思想方法 特来分享 对象具有状态和行为 Java中的对象以及其他任何``面向对象''语言都是所有Java应用程序的基本组成部分,代表了你可能在你周围找到的任 ...

  6. 关于pip命令的几点提醒

    pip install xxxxx 总会遇到安装失败,或者下载速度很慢的情况.这是因为从国外安装资源包,造成速度慢,那有咩有国内的源呢,有的. 国内源: 清华:https://pypi.tuna.ts ...

  7. Python 分发包中添加额外文件【新手必学】

      在制作一个 Python 分发包时经常需要把一些文件添加到包中.最常见的例子是你希望通过 pip install命令安装 Python 包时会在 /etc/ 等目录下自动添加默认配置文件,由此可以 ...

  8. Linux线程间同步的几种方式

    信号量 信号量强调的是线程(或进程)间的同步:"信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在sem_wait的时候,就阻塞 ...

  9. codeforces Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid

    #include<bits/stdc++.h> using namespace std ; int n; struct City { int id; long long x,y; //坐标 ...

  10. apache http server 和tomcat的区别 以及nginx

    Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器. 要明白他们之间的区别,我们首先需要明白HTTP协议.HTML页面.JSP.Servlet之 ...