使用LoadRunner实现Agileone的接口测试
LoadRunner作为一个企业级标准性能测试工具,在软件测试的发展过程中扮演着重要的地位,几乎已经成为性能测试领域的行业标准,影响了很多人。任何一个性能测试工具,必然可以用于完成接口测试,这几乎已经成为行业共识。无论是SoapUI,还是JMeter,或者是本章实验将要为大家介绍的LoadRunner。
实验简介
LoadRunner作为一个企业级标准性能测试工具,在软件测试的发展过程中扮演着重要的地位,几乎已经成为性能测试领域的行业标准,影响了很多人。笔者在刚入行时,也经常使用LoadRunner,很多性能测试方面的思路,也受到了LoadRunner这款工具的影响,虽然目前看起来LoadRunner依然有很多不尽人意的地方,但是从一款工具的角度来看,LoadRunner的强悍之处目前JMeter仍然无法超越。任何一个性能测试工具,必然可以用于完成接口测试,这几乎已经成为行业共识。无论是SoapUI,还是JMeter,或者是本章实验将要为大家介绍的LoadRunner。
实验目的
(1) 掌握LoadRunner处理GET和POST请求的用法。
(2) 熟练运用LoadRunner完成针对HTTP协议的接口测试。
(3) 掌握LoadRunner中的参数化,检查点,关联的用法。
实验流程
1. LoadRunner功能介绍
目前LoadRunner的最新版本是12.5,并且提供了50个并发用户的社区版免费授权,为企业和个人使用LoadRunner降低了门槛。LoadRunner的功能非常多,非常全,在此无法一一列出,笔者就常用的一些功能作简单介绍:
(1) 提供了对最新版Windows操作系统及64位操作系统的支持。
(2) 提供了对最新版IE浏览器的脚本录制支持。
(3) 提供了对移动APP端进行协议监控分析和脚本录制的支持。
(4) 在各种Java协议和C Vuser协议中支持64位回放。
(5) HTTP流媒体视频(HLS,HTML5)支持。
(6) 支持目前主流的各种网络协议。
(7) 支持C,Java,.NET,JavaScript等编程语言。
(8) 可视化的场景设计和指标监控。
(9) 可视化的性能指标分析器,在分析性能指标时非常有用。
2. LoadRunner的四大核心组件
(1) 虚拟用户脚本生成器(Virtual User Generator):主要用于开发和调试性能测试脚本。可支持主流的编程语言。
(2) 测试控制器(Controller):执行性能测试管理和监控的中央控制器,负责场景的设计,性能测试执行,指标的监控,并且也用于管理负载生成器。
(3) 结果分析器(Analysis):在测试完成后,对测试过程中收集到的各种性能数据进行计算、汇总和处理,生成各种图表和报告,为系统性能测试结果分析提供支持。
(4) 负载生成器(Load Generator):接受Controller组件的控制,可以多台电脑同时生成负载,用于模拟大量并发用户。
3. 发送GET请求
(1) 打开Virtual User Generator,并新建一个“Web - HTTP/HTML协议”的测试项目。
(2) 点击菜单“Design”下的“Insert in Script”下的“New Step”,在右侧的步骤生成器中,输入“web_url”并进行搜索,为当前脚本插入一个GET请求。并输入URL地址即可。
此时,会在当前脚本中生成一个GET请求。代码如下:
Action() |
我们可以直接点击工具栏上的“Replay”按钮运行当前脚本,一个GET请求便发送成功。
4. 为响应添加检查点
上述脚本可以向Agileone的首页发送一个GET请求,那么如何来创建一个检查点来确认响应的正确性呢?在LoadRunner中我们主要使用函数“web_reg_find”来创建响应,步骤如下:
(1) 将光标定位到web_url这个请求的前面。
(2) 插入一个新的步骤,并选择“web_reg_find”,生成一段检查点的脚本。
(3) 最关键的两步设置:在“Search for specific Text”中输入我们要检查的内容,支持中英文。在“Save count”中输入一个参数名,用于后续的检查点判断。在LoadRunner中,检查点的使用是根据搜索指定文本在响应中出现的次数来进行的。比如上述的设置中,如果“保存登录信息”这段文本在响应的Body中只要出现一次,那么我们就可以断定,该GET请求是正常的。
(4) 我们还需要使用LoadRunner的函数“lr_eval_string”来读取刚才在“Save count”中保存的参数“checkHome”的值,并将其转换为整数,进而判断是否是大于或等于1次。最终的检查点的代码如下:
Action() |
回放上述代码,结果输出为“打开首页失败”,原因是因为我们并没有针对响应的编码格式做转码处理。由于Agileone使用的是UTF-8编码,所以我们需要设置LoadRunner支持UTF-8编码。在菜单“Replay”中的“Runtime Settings”中,选择“Preference”标签页,定位到“General”选项卡下面,勾选“Covert to/from UTF-8”,并保存即可。如下图所示:
这样就可以正常处理UTF-8编码格式的文本内容了。在我们首次执行脚本的时候,还有一个问题比较烦人,就是每一次运行后,都会弹出一个“Reply Summary”的测试报告窗口,比较耽误时间,我们可以直接将其去掉。打开菜单“Tools”下的“Options”选项设置窗口,在“Scripting”标签页中的“Replay”选项卡下面,设置“After Replay Show”为“Script”而不是“Replay Summary”即可。
5. 实现登录的接口测试
插入一个新的步骤,并选择“web_submit_data”,打开POST请求生成器,并输入登录Agileone所需要的关键信息。
(1) 输入POST请求对应的URL地址。
(2) 输入POST请求的正文内容:
并为登录设置检查点,最终生成的代码如下:
Action() |
6. 新增需求提案
按照登录相同的操作步骤,生成的脚本如下:
web_reg_find("Search=Body", |
此处需要注意的是,我们在检查点函数中使用了“Text/DIG=#”这样的匹配模式,因为新增需求提案的响应就是一个新增成功后的ID号,所以我们利用“#”来匹配任意一个数字。这叫通配符,与正则表达式有类似之处,但是没有正则表达式那么强大的功能而已。
7. 实现登录用户名的参数化
用户名的参数化,除了使用随机数以外,我们也可以使用外部数据源来作为参数化的依据。在LoadRunner中,很好地提供了这种功能。比如用户名和密码,在Agileone中存在多个,我们可以分别将这些不同的用户名和密码输入到参数文件(其实质就是一个CSV文件)中,再读取出来即可。操作步骤如下:
(1) 打开“Design”菜单下的“Parameters”下的“Parameters List”子菜单。
(2) 在“Parameters List”窗口的左下角点击“New”按钮新建一个参数,并输入参数名为“username”。
(3) 在右侧点击“Create Table”,输入四行用户名。并点击“Add Column”增加一列,设置列名为“password”,用于输入与这四个用户对应的密码。
(4) 设置该参数指向“username”这一列,并且取值方式为“Random”。最终输入后如下图所示:
简单说明一下“Update value on”中的 “Each iteration”是指每一次运行更新一次参数值,即使在脚本中多次使用,值也不会更新,只有运行下一轮时才会更新。“Each occurrence”是指在脚本中的每一次调用该参数,都会更新参数的值。
(5) 新建第二个参数,命名为“password”,并设置其参数文件指向“username.dat”文件,设定为“password”那一列,在下面的参数取值方式中设置为“Same line as username”。
在脚本中使用{username}和{password}引用参数值即可:
web_submit_data("web_submit_data", |
8. 生成标题和内容的随机参数
在LoadRunner中,参数类型有很多种,除了文件型参数外,我们也可以使用其自带的随机数生成器。打开“Parameters List”参数列表窗口,新建一个参数并命名为“sequence”,选项“Parameter Type”为“Random Number”,并输入随机数的范围和位数(位数的意思是如果数据位数不够,则前面补0)。最终的效果如下图所示:
最终将新增需求提案的代码修改为:
web_submit_data("web_submit_data", |
思考练习
(1) 请自学使用LoadRunner的脚本录制功能。
(2) 请利用LoadRunner完成需求提案模块的其它功能测试。
(3) 利用LoadRunner测试一个WebService协议接口。
(4) 利用LoadRunner调用Java代码测试JDBC数据库接口。