小身材也有大本领 – 开发人员友好的LoadRunner DevWeb
DevWeb能做什么
DevWeb是Micro Focus新推出的免费的轻量级Web应用性能和负载测试工具,面向的用户是开发人员。相比于传统的LoadRunner,DevWeb的灵活度要好很多,比如跨平台(Windows, Linux, macOS)、多IDE支持,脚本是JavaScript而不再是久被诟病的C语言。
DevWeb脚本可以在各种IDE里创建,比如Visual Studio Code,Atom.io,JetBrains WebStorm (IntelliJ) ,熟悉LoadRunner的用户也可以用LoadRunner创建脚本和运行测试。如果懒得手写脚本, DevWeb提供了内置的脚本录制工具,也可使用浏览器或者Fiddler生成HAR格式文件,DevWeb能够从HAR文件自动生成脚本。
有了脚本就可以运行DevWeb来执行测试,或者直接在IDE里运行测试。DevWeb一次测试最多运行50个并发虚拟用户。DevWeb测试运行的原始结果数据存储在数据库(SQLite或者InfluxDB)里用于分析。
使用DevWeb完成一个性能测试
下载
DevWeb的官方下载地址在Micro Focus Marketplace:https://marketplace.microfocus.com/appdelivery/content/LoadRunner-Developer,根据操作系统选择对应的版本。
安装和配置
下载DevWeb后解压到本地文件夹,不需要安装,但要在系统里配置环境变量,例如在Windows里配置DEVWEB_PATH指向解压后的DevWeb目录(如C:\DevWeb)。
创建测试脚本
DevWeb的测试脚本可以通过下面两种方法创建:
1. 从HAR文件生成脚本
DevWeb目录下面有个OfflineGenerator.exe,就是用来从HAR文件生成测试脚本的,但是HAR文件又从哪儿来呢?有三种常用的方法:
a. 用DevWeb自带的Proxy Recorder录制
录制之前需要先在客户端(浏览器或移动设备)上配置代理,指向运行ProxyRecorder的IP和端口(默认端口8156和其它配置可以在配置文件里修改)。运行DevWeb目录下的ProxyRecorder.exe,然后在浏览器或者APP进行操作,Proxy Recorder作为中间代理录制(抓取)客户端和服务器端的交互并生成HAR文件。
为了解决HTTPS录制的问题,DevWeb自带了一个CA证书(在DevWeb\cert\default_devweb_cert目录下),需要先安装到DevWeb所在的系统里,当然你也可以使用自己的证书。
b. 用浏览器生成HAR文件
很多浏览器如Chrome都支持抓取数据包并且导出为HAR文件的功能
c. 用其它工具比如Fiddler录制并导出HAR文件
现在HAR文件有了,接下来运行OfflineGenerator.exe命令生成脚本,参数用法参考文档。如果抓取的数据需要过滤,修改Generator的配置文件generator_config.yml设置过滤后重新运行OfflineGenerator.exe。
2. 在IDE里写脚本
开发人员可以选择自己喜欢的IDE使用DevWeb JavaScript SDK手工编写脚本,DevWeb为每种支持的IDE提供了代码模板,具体的配置步骤参考文档,主要包括两个步骤:
a. 从DevWeb\examples拷贝或者导入样例项目
b. 在IDE里配置DevWeb作为执行工具
DevWeb测试脚本结构里,所有的测试步骤定义在main.js文件,其中包括三个部分:
- initialize
每个虚拟用户在测试运行开始时执行initialize部分,一次测试只运行一次。
- action
在指定的测试持续时间内每个虚拟用户迭代运行action部分。
- finalize
每个虚拟用户在结束测试运行时执行一次finalize部分。
除了main.js,可能还会用到其它的测试脚本文件(如测试场景配置、参数配置、运行时设置等)或者第三方Library,具体参考文档。
脚本常用技术
DevWeb JavaScript SDK提供了不少非常有用的对象和方法,用来对脚本进行进一步加工,解决一些性能测试常见的需求,这些概念与LoadRunner一脉相承。
Transaction(事务)
在脚本中,定义在Transaction中的所有步骤的执行时间会自动计为该Transaction的响应时间,并显示在测试结果中,Transaction Response Time是性能测试最重要的结果指标之一。
Parameters(参数)
通过在脚本中定义Parameters,可以让脚本在测试运行时使用多套测试数据,如登录账号、搜索关键字等。参数及其使用方式在Parameters.yml文件里定义。
Correlation(关联)
性能测试脚本通常要处理服务器端返回的动态数据,如Session ID、token或时间戳,具体方法是根据某种规则从服务器端返回的Response里把动态数据抓取出来存在变量里,之后在脚本里的其它地方使用。LoadRunner和DevWeb把这个过程称为Correlation(关联)。
DevWeb提供了多种类型的Extractor,用于从Response里定位和提取想要的数据。
Extractor可以在脚本中手工定义,也可以在配置文件里定义关联规则,DevWeb在录制或生成脚本时会在自动在脚本里根据规则创建Extractor。
运行测试
和LoadRunner Controller这种有UI的工具不同,DevWeb通过命令行运行测试,这样很容易和pipeline集成。
DevWeb运行测试可以通过两种方式,参数及使用方法参考文档:
1. 运行DevWeb命令行工具
- 单用户模式:
Windows |
DevWeb.exe -mode=single -rts=C:\MyScripts\genericRts.yml -keyLocation=C:\Keys\secret1.txt -iteration=10 -pacing=3 C:\MyScripts\ExceptionalScript |
Linux/MacOS |
DevWeb -mode=single -rts=~/MyScripts/genericRts.yml -keyLocation=~/Keys/secret1.txt -iteration=10 -pacing=3 ~/MyScripts/ExceptionalScript |
- 负载模式(在scenario.yml里定义负载场景设置):
Windows |
DevWeb.exe -mode=load C:\ScriptDirectory |
Linux/MacOS |
DevWeb -mode=load ~/ScriptDirectory |
2. 在IDE里运行DevWeb测试
- Visual Studio Code
选择Terminal > Run Tasks,根据需要选择运行选项:Single/Debug/Load
- JetBrains WebStorm (IntelliJ)
选择Tools > External Tools > Run DevWeb
- Atom.io
选择DevWeb > Run single user或DevWeb > Run scenario(使用scenario.yml设置)
和测试运行相关的配置文件主要有两个:
1. 负载场景配置文件scenario.yml
定义运行的用户数和压力加载模式(如递增加载时间、持续时间、递减退出时间)
样例:
2. 运行时设置配置文件rts.yml
可配置运行日志、网络代理、错误快照、运行逻辑、Dynatrace监控集成等。
测试日志和结果
- DevWeb运行脚本结束后,命令行窗口或IDE里会显示摘要信息:
- 每个虚拟用户产生的日志存储在..\<脚本文件夹>\results\logs。
- 如果测试运行过程中产生了快照,则存储在..\<脚本文件夹>\results\snapshots。
- 测试原始结果默认存储在SQLite数据库..\<Script Directory>\results\devWebDB.db,可使用DB Browser查看。
测试结果还可以选择存储在InfluxDB(需要先安装InfluxDB并在local.config.yml文件里配置),使用Dashboard工具(如Grafana)产生报表,Grafana Dashboard 样例可在Marketplace下载。