使用Loadrunner 调用Webservice接口测试优化总结

简介:

1.Webservice协议脚本编写流程

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

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

040313_0256_Loadrunner1.png

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)







性能测试的接口测试方式:

1.         Web Service协议

启动LR选择 Web Service协议,并添加调用服务,设置好传入参数及返回值,LR自带函数web_service_call就封装好了本次传参及返回结果集,举例如下:

 

web_service_call( "StepName=GetValidGiftCardNumForDay_101",              "SOAPMethod=GiftCardQueryService|BasicHttpBinding_GiftCardQueryService|GetValidGiftCardNumForDay",

                   "ResponseParam=response",

                   "Service=GiftCardQueryService",

                   "ExpectedResponse=SoapResult",

                   "Snapshot=t1340760446.inf",

                   BEGIN_ARGUMENTS,

                   "userId={userid}",

                   "userIdSpecified=true",

                   "days=10",

                   "daysSpecified=true",

                   "validateValue={key}",

                   END_ARGUMENTS,

                   BEGIN_RESULT,

                   "GetValidGiftCardNumForDayResult=Param_GetValidGiftCardNumForDayResult",

                   END_RESULT,

                   LAST);

2.         HTTP协议

web_custom_request("back", 

    "Method=POST",                         //请求的方法

    "URL=http://performance.xxxx.cn/taskservice/task/back",       //请求地址

    "RecContentType=text/json",    //指定相应头的Content-Type,这里是JSON

         "EncType=text/json", //指定请求头的Content-Type,这里也是JSON

    "Mode=HTML",

    RAW_BODY_START,                      //请求BODY开始的标识符

         "{\"taskID\":2583313,\"flowID\":2573290}",  //BODY的内容

    35,                                    //上面一行BODY内容的长度

   RAW_BODY_END,                  //请求BODY结束的标识符

LAST);

当然有时候也可以使用web_url和web_submit_data 等函数,但web_custom_request函数更全面,具体区别请自行百度。

3.         除了前面2种方法,还有一个万能绝招:创建虚拟用户(几乎可以适用于各种测试),下面以创建.net虚拟用户为例进行说明:

.net虚拟用户适用于2类性能测试应用:一类是用来测试基于.net开发的应用系统的性能,特别是一些C/S结构的产品,采用此种方式将来会更有效;另一类是借助它开发满足特定应用的测试脚本,例如一些非.net应用。这类脚本往往不容易通过录制来生成,在这类应用中.net平台仅仅是用来快速开发测试脚本的工具。

 下面将以Microsoft visual studio 2008的集成开发环境和LoadRunner.net11插件为例来讲解。

1)         安装Microsoft visual studio 2008(虽然现在Microsoft visual studio 2010是常用的,但LoadRunner.net插件最高版本只有2008)。

2)         安装LoadRunner11

3)         安装LoadRunner.net插件LRVS2008IDEAddInSetup,该插件在LoadRunner官方网站可以下载,安装结束后须重新启动计算机,注意在安装过程中一定要关闭visual studio 2008开发环境。

4)         加载.net插件,打开Microsoft visual studio 2008,依次点击菜单“工具à外接程序管理器”,,进入外接程序管理器界面后,勾选Loadrunner.Net插件进行加载,加载成功后可在Microsoft visual studio 2008的菜单栏看到“Vuser”菜单项。

5)         创建.Net虚拟用户,在Microsoft visual studio 2008中新建项目,选择“Visual C#”,模板类型选择“Loadrunner C#.Net Vuser”,其他操作如常即可。然后在用户工作区的VuserClass类中添加自己的脚本。

6)         .net虚拟用户须要编译后才可以在VuGen里运行,所以脚本编写完毕后在Microsoft visual studio 2008按快捷键F6进行编译。编译完成后就可以运行相应的usr文件。进入项目所在的文件夹,双击usr文件,调用VuGen启动虚拟用户脚本,即在VuGen中运行脚本。脚本调试通过后,就可以在Controller中创建测试场景进行压测。


相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
7天前
|
监控 测试技术 持续交付
软件测试中的性能瓶颈分析与优化策略
性能瓶颈,如同潜伏于软件深处的隐形障碍,悄然阻碍着系统的流畅运行。本文旨在揭示这些瓶颈的形成机理,剖析其背后的复杂成因,并汇聚一系列针对性的优化策略,为软件开发者提供一套系统性的解决方案。
|
4月前
|
监控 测试技术 UED
软件测试中的性能瓶颈定位与优化策略
在软件开发的生命周期中,性能测试是确保产品质量的关键步骤之一。本文深入探讨了性能测试的重要性,并提出了一套系统的性能瓶颈定位与优化策略。通过分析现代软件系统中常见的性能问题,结合最新的研究成果和行业最佳实践,文章详细介绍了如何运用科学严谨的方法来识别和解决性能瓶颈。此外,本文还强调了逻辑严密的问题分析框架和数据驱动的决策过程对于提升软件性能的重要性。
|
13天前
|
监控 算法 测试技术
软件测试中的性能瓶颈分析与优化策略
本文旨在深入探讨软件测试过程中性能瓶颈的识别与优化方法。通过对性能瓶颈的概念、分类及其成因进行分析,结合实际案例,提出一套系统的性能瓶颈诊断流程和针对性的优化策略。文章首先概述了性能瓶颈的基本特征,随后详细介绍了内存泄漏、资源竞争、算法效率低下等常见瓶颈类型,并阐述了如何通过代码审查、性能监测工具以及负载测试等手段有效定位问题。最后,结合最佳实践,讨论了代码级优化、系统配置调整、架构改进等多方面的解决措施,旨在为软件开发和测试人员提供实用的性能优化指导。
|
23天前
|
关系型数据库 MySQL 测试技术
《性能测试》读书笔记_数据库优化
《性能测试》读书笔记_数据库优化
24 7
|
6天前
|
缓存 监控 算法
软件测试中的性能瓶颈定位与优化策略
性能瓶颈,如同隐藏在系统深处的“拦路虎”,悄无声息地制约着软件的表现。本文将揭示如何通过一系列科学方法,识别并消除这些障碍,从而显著提升软件性能,确保用户享受到流畅无阻的数字体验。
|
2月前
|
存储 人工智能 自然语言处理
知识库优化增强,支持多种数据类型、多种检索策略、召回测试 | Botnow上新
Botnow近期对其知识库功能进行了全面升级,显著提升了数据处理能力、检索效率及准确性。新版本支持多样化的数据格式,包括PDF、Word、TXT、Excel和CSV等文件,无需额外转换即可直接导入,极大地丰富了知识来源。此外,还新增了细致的文本分片管理和编辑功能,以及表格数据的结构化处理,使知识管理更为精细化。 同时,平台提供了多种检索策略,包括混合检索、语义检索和全文检索等,可根据具体需求灵活选择,有效解决了大模型幻觉问题,增强了专业领域的知识覆盖,从而显著提高了回复的准确性。这些改进广泛适用于客服咨询、知识问答等多种应用场景,极大提升了用户体验和交互质量。
58 4
|
2月前
|
测试技术
软件测试中的心理学:如何优化测试流程
【8月更文挑战第6天】本文深入探讨了软件测试过程中的心理学因素,揭示了测试人员的心理动态对测试效率和质量的影响。通过分析测试人员的压力源、动机以及团队间的沟通问题,提出了一系列改善策略,如建立积极的反馈机制、提供持续的职业培训和优化工作环境等,旨在提升软件测试的整体效能。文章最后提出一个开放性问题,邀请读者思考如何在不断变化的技术环境中维持测试团队的心理健康和动力。
|
2月前
|
Java 测试技术
hyengine microbench测试问题之提升jit优化如何解决
hyengine microbench测试问题之提升jit优化如何解决
|
2月前
|
SQL 缓存 关系型数据库
MySQL配置简单优化与读写测试
MySQL配置简单优化与读写测试
|
3月前
|
机器学习/深度学习 算法 搜索推荐
优化IAA广告策略:通过A/B测试和实时反馈提高广告效果
【7月更文第30天】本文将介绍如何使用数据分析技术,特别是A/B测试和实时反馈机制,来改进移动应用内的广告策略。我们将展示一个实际案例,包括如何设置实验、收集数据、分析结果,并根据这些结果调整广告策略以实现更好的用户参与度和收入增长。
161 0
下一篇
无影云桌面