基于Jmeter的智能法律问答系统性能测试

2020-01-03 01:35
计算机测量与控制 2019年12期
关键词:采样器测试工具脚本

(中国软件与技术服务股份有限公司,北京 100081)

0 引言

法律智能问答系统[1]由于其专业知识强、涉及领域广、用户群体大、使用便捷、节约人力等优点,近些年被各级法院积极用于满足人民群众对法律知识的咨询需求。此类系统设计[2-3]上对支持的用户访问量,存储的法律知识量,检索速度,数据安全都提出较高要求。采用TLS1.2双向认证并混合使用http协议与WebSocket协议恰好满足Web法律智能问答系统以上几点要求。在信息推送机制[4]上,作为较新的WebSocket协议相比于 Http协议,建立一次消息连接就可以实现多次消息传输的机制很大程度地提高了网络与服务器资源的利用率。采用TLS1.2协议对WebSocket协议进行加密所形成的wss协议(即TLS协议加密的WebSocket协议),又进一步保证了传输数据的保密性和完整性,提高互联网数据传输的安全性。针对这种新协议设计的系统的性能测试,在测试工具选取,测试脚本编制,性能测试场景设计几方面必然会与传统的基于http协议的Web应用系统的性能测试有明显的区别,本文将围绕以上几个方面系统地阐述此类Web法律智能问答系统[5]进行性能测试的方法。

1 工具选择

目前国内主流性能测试工具是Loadrunner与Jmeter[6]。表1从不同角度分析了这两种工具对Web法律智能问答系统进行性能测试的支持情况。

从表1的对比分析来看,两种工具同时满足此类系统性能测试的情况下,从支持的并发用户数量,安装便捷性及测试成本方面比较,Jmeter3.1更适合作为此类系统的性能测试工具。因此,下文将选用Jmeter3.1工具讲述性能测试环境的搭建。

2 测试工具配置

2.1 向Jmeter添加WebSocket协议测试所需插件

Jmeter本身并不支持对Html5新增的WebSocket协议的测试,但它可以通过安装插件的方式达到对WebSocekt性能测试的支持。为了支持wss协议测试,需要安装的插件如下:

JMeterWebSocketSamplers-0.11.1.jar:插件中包含的WebSocket Open Connection、WebSocket Request-Response Sampler、WebSocket Close三个组件。

表1 性能测试工具比较

可以支持wss协议测试,将此jar包放置到Jmeter目录的libext目录下,重新启动jmeter可以在sampler中看到以上几个组件。

2.2 双向认证的客户端证书创建与配置

TLS协议分为单向认证与双向认证。单向认证,TLS握手阶段只验证服务器证书的真实性。双向认证,TLS握手阶段客户端与服务器需要验证对方证书的真实性。基于对Jmeter的TLS1.2协议的支持,从Jmeter的源代码分析HTTPHC4Impl类中创建https调用的是LazySchemeSocketFactory类,此类又是调用HC4TrustAllSSLSocketFactory类,这个类中有明确注释对X509Certificate的证书全部信任,Jmeter对于服务器端证书采用全部信任,因此对于单向认证的情况,无需单独创建证书文件,使用Jmeter自动创建的证书即可。而对于双向认证,Jmeter需要配置客户端证书。从PC端浏览器导出客户端证书默认是cer格式,移动端使用的是p12格式,这两种格式的证书要被Jmeter使用,都需要先转换为jks或keystore格式。

2.2.1 转换证书格式

转换方法如下:

使用java的bin目录下的keytool工具,然后分别使用如下命令:

keytool-importcert-file 原证书路径原证书文件名.cer-alias 新证书别名-keystore 新证书路径新证书文件名.jks

keytool -importkeystore-srckeystore 原证书路径原证书文件名.p12 -srcstoretype PKCS12 -deststoretype JKS-destkeystore 新证书路径新证书文件名.jks

输入上述命令后,会继续要求用户输入证书的访问密码,此密码会在Jmeter调用证书时使用,然后提示添加对证书信任选择y添加证书信任,此时会在指定的目录生成符合Jmeter格式要求的新证书。

查看新证书的详细信息,使用如下命令:

keytool-list-v-keystore 证书路径证书文件名.jks

2.2.2 Jmeter配置客户端证书

对客户端证书有两种配置方法:一种是修改Jmeter的system.properties文件,一种是将证书配置信息写入Beanshell设置中。比较两种配置方法,第一种方法证书的配置信息没有写入脚本文件jmx中,当Jmeter测试不同应用,证书需要更改时,或者脚本发生迁移更换测试环境时都需要重新配置脚本,第2种方法配置信息写入脚本文件,避免上述需要修改system.properties文件的问题,因而方便脚本迁移与Jmeter工具的管理,因此建议采用第2种配置方法。

Beanshell设置客户端证书的具体方法如下:

在Jmeter的【测试计划】的【线程组】中的添加【BeanShell Sampler】采样器,在采样器的script部分添加如下信息:

Importorg.apache.jmeter.util.SSLManager;

System.setProperty("javax.net.ssl.keyStore", "证书路径证书名称.jks");

System.setProperty("javax.net.ssl.keyStorePassword", "证书访问密码");

SSLManager.reset();

SSLManager.getInstance();

后两条SSLManager函数就是完成将证书加载到SSL管理器的操作。

由于Jmeter有缓存机制,Jmeter启动期间只需要运行一次【BeanShell Sampler】采样器即可完成对TLS1.2协议的客户端证书配置,因此将【BeanShell Sampler】采样器可以放置到【仅一次控制器】中。配置完上述信息后重新启动Jmeter,加载测试脚本完成客户端证书的配置。对于同一应用系统https与wss使用一套TLS1.2认证证书,因此不需要为wss协议单独配置证书。将客户端证书安装到录制https脚本的浏览器的证书目录中。

2.3 安装PerfMon插件用于性能测试过程中服务器各项指标监控

PerfMon的使用主要包含两部分:ServerAgent、PerfMon,ServerAgent放在监控服务器上;PerfMon是在Jmeter上运行的插件,用来收集并展示服务器端各项性能指标。在jmeter-plugins-manage中下载安装perfmon插件,此部分有成熟的配置方法,在本文中将不做详细描述。

2.4 配置Jmeter分布式部署环境

Jmeter支持多压力机分布式部署,用于解决性能测试中由于大并发用户数、大数据量传输引起的压力机本身资源及网络带宽的限制。

图1 Jmeter分布式部署

图1是Jmeter分布式部署的网络拓扑图,一台装有Jmeter的物理机作为控制台,其它装有Jmeter的物理机作为压力机受控制台调度。修改每台压力机的Jmeter的安装目录下的bin/jmeter.properties文件的remote_hosts属性,添加本台物理机的ip地址与jmeter端口号;修改控制台的Jmeter的安装目录下的bin/jmeter.properties文件的remote_hosts属性,添加本台物理机与其他压力机的ip地址与jmeter端口号,并用逗号隔开。Windows环境下点击jmeter-server.bat,完成压力机的启动,运行控制台的jmeter脚本时可以选择启动指定压力机或者启动全部压力机。

3 编制https与wss性能测试脚本

3.1 编写wss测试脚本

JMeterWebSocketSamplers-0.11.1.jar是2.1节Jmeter安装的用于WebSocket测试的组件,它支持wss协议的主要采样器如下:

1)WebSocket Open Connection;

2)WebSocket request-response Sampler;

3)WebSocket Close。

WebSocket Open Connection:支持握手阶段,建立WebSocket连接,它只提供消息连接的建立而不负责消息传输。WebSocket Close:客户端主动关闭WebSocket请求。一般在WebSocket request-response Sampler后使用,用于关闭不需要的WebSocket连接,减少服务器连接池的占用。WebSocket request-response Sampler作为wss测试的核心组件,可以完成wss连接的创建与消息传输任务。因此本文重点讲述此采样器的使用方法。

WebSocket request-response Sampler支持wss与ws两种协议。它的配置页面如图2所示,主要由三部分组成,分别是Connnection,Server URL,Data。Connection用于选择创建连接的方式;Server URL配置测试的协议种类,服务器的URL及访问端口;Data用于配置的测试数据,连接的超时时间。

图2 websocket请求响应采样器

使用此采样器进行性能测试需要注意的地方是Connection部分的连接创建的方式的选择,不同的选择适用于不同的性能测试场景,下面将简述两种选择方式的区别。第1种是使用之前创建完成没有关闭的Websocket连接,例如使用WebSocket Open Connection或者WebSocket request-response Sample在之前创建成功的Websocket通信链路,优点是减少连接创建时间请求响应时间更短,节约服务器的连接资源数;第2种创建新的Websocket连接,优点是避免使用已有连接进行请求时出现超时失败的情况。分析以上两种连接方式的优点,选择策略如下:当测试的并发请求数较少,对响应时间要求较短的情况,选择第一种使用已创建的连接的方式;当测试的并发请求较多,对响应的成功率要求较高的情况,选择第2种方式使用新创建连接。

另外,此采样器Data部分配置测试数据时,支持参数变量的引用,可以将测试数据进行参数化,使用不同的测试数据进行性能测试能更好的模拟真实的用户使用场景。

图3是Jmeter测试结果树控件返回的请求数据,图4是Jmeter测试结果树控件返回的响应数据。检查请求数据可以判断请求数据参数化调用的正确性;抽取部分响应数据做响应断言,可以判断请求返回的结果的正确性判断,如何选择响应断言数据,将在4.2节详述。

图3 wss请求体

图4 wss响应体

3.2 使用HTTP代理服务器录制https测试脚本

https脚本可以利用Jmeter的【HTTP代理服务器】,使用浏览器进行录制。此协议的脚本的录制方法较为成熟,此文不予详述。

3.3 在测试脚本中添加监控组件

从监听器中选择【jp@gc - Transactions per Second】、【jp@gc - PerfMon Metrics Collector】与【jp@gc - Response Times Over Time】三个组件作为性能指标监控组件,【jp@gc - Transactions per Second】用于统计每秒的事务数,【jp@gc - PerfMon Metrics Collector】用于监控服务器的CPU,内存,I/O使用情况,【jp@gc - Response Times Over Time】用于监控请求的响应时间,同时添加【聚合报告】,用于统计每个事务与请求的响应时间,错误率,吞吐量等详细信息。在脚本编制阶段可以添加【察看结果树】组件用于查看脚本运行的正确性与辅助优化测试脚本。

由于Jmeter自身的监控插件存在局限性,为了获取更详细的服务器监控数据,Linux操作系统可以使用nmon监控工具,Window操作系统可以使用系统自带的资源监视器,并配合Jave自带的Jconsole工具,与各类数据库监控工具。这些工具的综合使用可以较为全面的监控系统性能测试过程中服务器的各项指标,查找分析系统的性能瓶颈。

4 性能测试设计

前3节主要是针对智能法律问答系统使用的协议wss与https协议的特殊性,讲述性能测试工具的选择,测试工具的配置与脚本的编写。本章节将分析智能法律问答系统的数据与业务特点,重点讲述针对此类系统的性能测试的设计方法。

4.1 测试数据的选取

分析智能法律问答系统的设计特点,主要是由自然语言句型识别,分词处理,关键词检索几个主要步骤组成[7]。因此对测试数据的选取也是围绕以上几个步骤,将作为性能测试输入数据的各类法律问题[8]按以下规则进行分类:

1)问句中包含系统设定的关键词在系统中的使用频率;

2)问句中包含的系统设定的关键词的数量;

3)问句句型的复杂度,分词和关键词提取的难易程度;

4)问句所属的业务领域占系统设定的全部业务领域的比例。

根据系统设计的性能指标[9],按每个规则将测试数据分为高中低三类,根据不同的性能测试场景选取不同类别的数据进行测试可以保证数据覆盖的全面性,真实性。

同时也需要考虑系统已存储的问答对数量对性能测试的影响,百万级数量的问答对的检索速度会明显与万级数量的问答对的检索速度不同。所以也要将系统存储的问答对的数量级进行等级划分。

4.2 响应结果正确性的验证

不同的法律领域的问题答案显然是不同的,但相同领域的法律问题回答必然包含相同的法律词汇,因此可以选取不同法律领域使用较多的法律词汇作为问题答案必须包含的关键词,作为系统返回的答案的正确性的判断[10]。将这些关键词用正则表达式组合在一起,只要系统返回的答案满足正则表达式的设定规则就判断系统返回的结果是正确的。具体操作就是在wss请求体加上正则表达式抽取器,然后再加上此请求体的响应断言控件,响应断言判断正则表达式抽取的内容是否与包含此领域问题设定的关键词,包含则认为系统返回问题答案正确,不包含则认为系统返回问题答案错误。

4.3 性能测试场景的设定

基于wss协议智能法律问答系统的业务特点,性能测试主要选择压力测试与疲劳测试两种类型[11]。可选取系统的主要业务场景包括:

1)不同规则分类的问题响应时间测试:使用4.1节分类后的测试数据进行压力测试,用于测试系统在法律领域的广度与问句的复杂度下的性能表现。

2)不同用户量的测试:不同数量级的用户数使用同类问题进行压力测试,测试系统的响应时间与用户承载量。

3)不同问答对存储数量的压力测试:向系统提前灌入预估出使用半年,2年,5年后问答对数量,分别在系统存储不同数量级的问答对情况下,测试常规用户量使用下系统的性能表现。

4)长时间运行稳定性测试:常规数量用户持续使用问答系统,在12小时,24小时,3*24小时后系统的各项指标的稳定性。

5)长时间待机可靠性测试:保持系统应用启动,在7*24小时,31*24小时期间,利用测试工具间断性的使用问答系统,验证系统的可用性。

5 结束语

本文针对目前法律领域使用越来越广泛的智能问答系统,系统地阐述了对此类系统进行性能测试的完整方案。从性能测试的工具选择,测试工具配置,脚本编写,测试数据准备,测试结果验证及性能场景选取几个方面,抽取各部分的重点与难点,提出有效的解决方案,为进行此类系统性能测试的人员提供必要的参考。

猜你喜欢
采样器测试工具脚本
大气采样器检定注意事项及常见故障排除探析
浅析密闭采样系统在炼化企业生产中的应用
粉尘采样器检定和校准证书中不确定度区别
自动推送与网站匹配的脚本
基于移动平台APP测试
手车式真空断路器回路电阻测试电流线接头研究
浅谈响应时间测试分析方法
烟尘采样器流量示值误差的不确定度评定
举一反三新编
愚公移山