热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LoadrunnerWebservice接口性能测试脚本编写优化总结

本文主要介绍使用Loadrunner调用Webservice接口进行性能测试时,相关脚本编写及

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

1.Webservice协议脚本编写流程

下面介绍使用Loadrunner 11调用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 参数化

  • 在脚本中用" 13312345678飞信"(此接口输入参数示例)替换"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接口输入如下参数时"13312345678 飞信",接口正确返回结果包括"飞信是中国移动的业务"。在此我们就需要对返回结果进行判断。示例代码如下:

 技术分享

  • 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函数说明

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

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

  3) 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)

Loadrunner Webservice接口性能测试脚本编写优化总结


推荐阅读
  • Xib九宫格应用管理使用xib封装一个自定义view的步骤1新建一个继承UIView的自定义view,假设类名叫做(AppView)2新建一个AppView.xib文件来描述 ... [详细]
  • 九宫格计算. ... [详细]
  • FroggerTimeLimit:1000MSMemoryLimit:65536KTotalSubmissions:32257Accepted:10396DescriptionFr ... [详细]
  • 22.Container With Most Water(能装最多水的容器)
    thecontainercontainsthemos ... [详细]
  • 1.安装cordovapluginaddcordova-plugin-file-transfercordovapluginaddcordova-plugin-fi ... [详细]
  • HTTP请求响应的步骤第一步:第二步:第三步:第四步:第五步第一步:1.客户端连接到Web服务器⼀个HTTP ... [详细]
  • 3295:[Cqoi2011]动态逆序对Description对于序列A,它的逆序对数定义为满足iAj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除 ... [详细]
  • 本文分析和介绍了GLo ... [详细]
  • 2019.4.14第1001题:SumProblemProblemDescriptionHey,welcometoHDOJ(HangzhouDianziUniversityOnli ... [详细]
  • python基础(二、pycharm安装、卸载)
    3.在Ubuntu中安装PyCharmPyCharm的官方网站地址是:https:www.jetbrains.compycharm注意:安装时不要使用root用户安装,否则后期使用 ... [详细]
  • spotify engineering culture part 1
    原文,因为原视频说的太快太长,又没有字幕,于是借助youtube,把原文听&打出来了。中文版日后有时间再翻译。oneofthebigsucceessfactorshereatSpo ... [详细]
  • python自学教程哪里好,python比较好的教程
    本文目录一览:1、想学python去哪里比较好? ... [详细]
  • 抓取百万知乎用户设计之实体设计
    一.实体的关系实体是根据返回的Json数据来设计的教育经历方面用户可以有很多教育经理,USER和education是一对多的关系,一个education对应一个education一 ... [详细]
  • 软件自动化测试的学习路线
    软件自动化测试的学习步骤软件测试交流群关注软件测试技术公众号获取阅读目录软件自动化测试的学习步骤自动化测试的本质自动化测试学习的误区自动化测试的职位自动化测试分类Web自动化 ... [详细]
  • NickLa制作了另伟大的教程。NickLa向我们展示了如何装饰,而无需编辑源图像的图像和照片画廊。诀窍是很简单。所有你需要的是一个额外的标签和应用背景图像创建的叠加 ... [详细]
author-avatar
caiyingsheng852
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有