1 kylinPET提供HTTP/HTTPS业务功能
HTTP协议是WEB/REST/WebService主要通信协议, 是一种比较复杂的协议。kylinPET很好地支持HTTP协议:提供易用的HTTP业务流程脚本编辑。
提供四种录制方式创建业务脚本,大大减少手工操作脚本,高效、精确创建业务模拟脚本。
四种录制方式参照帮助文档《kylinPET四种录制方式介绍》
模拟出真实用户的行为,包括HTTP请求数、每用户并发线程与TCP连接数、思考时间、有无缓存。只有模拟浏览器行为的测试才是最有效的测试,测试结果才能真实反映支撑用户场景。
1) 验证脚本是否正常,保证脚本正确
2) 定位脚本出错在哪,提供定位问题效率与准确度
WEB业务使用树形界面可层次化描述HTTP请求的关系,直观表示WEB业务的页面(工具认为第一级为一个页面,即点击一次链接),第二级节点为第一级节点响应消息里的资源;当然也可以使用图形界面描述WEB业务。
每个HTTP用户一个虚拟IP,支持系统虚拟IP(需要在操作系统配置多IP)或工具虚拟IP(不需要在操作系统配置IP)。配置路由方法参照《kylinPET 三种典型组网介绍IP欺骗与路由设置》文档。
支持每个用户发送的DNS报文的源IP不同。
支持TLS/SSL,支持单向与双向认证。
通过调用外部JAVA类,实现私有算法(加密、解密)或工具无法完成的功能。需要用户自己实现处理逻辑的JAVA代码,实现参照《kylinPET 调用外部java类实现扩展》文档。
1) 网页浏览,模拟用户访问网页,支持每个用户下载带宽限制
2) 视频网站与视频观看,支持统计TCP指标质量
3) 文件上传与文件下载,支持每个用户带宽限制
4) REST接口(提交xml、Json数据)
5) 使用HTTP承载的业务,支持内容为文本或二进制
2 HTTP(WEB)业务使用步骤介绍
通过该例子,简单介绍如何使用工具完成WEB业务测试。操作步骤:
点击“文件” -> “新建”或者“工具栏”的“新建” 按钮。
点击“工具” -> “录制”或者“工具栏”的“录制” 按钮,在弹出的窗口,选择对应的录制方式、浏览器、网址URL。
如何选择录制方式,见下面介绍:
当业务场景存在HTTPs或多个网卡(某些资源在网段1,某些在网段2,抓包只能抓一个网卡),使用代理方式。
工具默认修改系统(windows)的IE代理,如果使用的是firefox或chrome浏览器,而这些浏览器没有使用系统代理,需要用户手动设置这些浏览器的代理。
停止录制,工具自动关闭浏览器,并还原系统的IE代理。如果强制关闭工具导致未完成修改代理,需要用户手动修改IE的代理,否则可能造成无法访问互联网。
如果代理方式无法录制业务(代理方式支持自动识别网络,如chrome在PPPoE拨号场景不使用本地代理),请选择实时抓包方式。
实时抓包方式原理是监听网卡(需要用户手动选择)的IP报文,因此不支持HTTPs。
实时抓包方式可能由于系统CPU性能差导致丢包,因此抓包时请确保关闭其他应用程序,让出硬件资源给工具执行抓包。如果出现丢包,可以使用“代理方式”或者“抓包文件方式”
一般应用于无法使用“代理方式”或“实时抓包”方式的场景,如智能手机无法运行工具,则可以在设备上抓包并保存文件(请不要过滤TCP),然后使用工具读取抓包文件生成测试脚本。
在弹出的录制配置窗口选择录制方式为“Proxy”
1) HTTP与HTTPS使用同一代理端口8111
2) 高级设置里的Host头域:过滤HTTP的Host头域包括或不包括的请求,即不符合过滤规则的HTTP将不被录制到脚本。目的是删除与业务无关的HTTP请求。请根据场景设置。
3) 高级设置里的304 Header:是否录制IF-Modified-since和If-None-Match头域。可以模拟部分用户浏览器有缓存,部分用户浏览器没缓存。是否考虑浏览器缓存情况,请根据场景设置。
4) 录制窗口参数介绍参照《kylinPET 帮助指导》的录制介绍。
注意:
1、
WEB业务脚本一般是通过录制方式把业务交互过程的所有HTTP请求录制下来,包括点击的链接、javascript解析的资源、图片资源。
2、
kylinPET不支持解析javascript、vbscript等脚本语言,因此通过录制可以将这些脚本对应的HTTP请求包含进来,实现100%模拟业务交互流程。
3、
通过录制将所有HTTP请求记录下来,可以避免执行代理器对HTTP响应消息的解析,提高处理能力。但如果内嵌资源(如图片)是变化的,如可能增加或删除,则需要勾选“请求内嵌资源或自动跳转”项实现对HTTP消息的解析,只能解析HTML与CSS内容。
如果没有打开浏览器,请手动打开浏览器,并输入录制网址。
如果录制不到请求,请确认浏览器代理是否设置正确。注:可能工具权限不够,无法自动修改浏览器代理,则需要用户收到设置IE代理。
a) 打开“浏览器” --> “工具” --> “Internet选项”
b) 弹出窗口选举“连接” --> “局域网设置”
c) 勾选“代理服务器”,然后输入代理地址(一般为本机,也可以为其他机器)与端口,然后确定,完成代理设置。
录制过程,右边的灯变亮,则表示正在处理请求,即在录制中,右边为处理的请求数。
请求数增加到31
请求数变成33
注意:
如果灯没变暗,就点击链接,将可能无法生成Think Time思考时间。
点击录制控制条的停止按钮
脚本页面如下:
录制脚本中HTTP请求节点为树形结构,且分成多级,如果存在用户执行脚本失败,则将导致部分或剩下的HTTP请求不发送给WEB服务器:
1、 当所有HTTP请求都成功时,总数一定是31个,否则是工具的Bug
2、 当存在某些请求失败(如超时或响应码错误),如:请求/admin/失败
1) 则将导致它的孩子(内嵌资源)无法请求,因为它的孩子是它成功的响应消息解析得到的,它失败则它的孩子将不存在,也就不会存在对应的HTTP请求。
2) 另外由于/admin/是一级节点,因此将导致后面的一级节点无法请求,即POST消息无法请求,因为前面成功才会出现登陆页,才可以执行登陆,因此前面失败将不出现登陆页则浏览器不能执行登陆。同样,POST失败将导致后面的一级节点都失败,整个业务脚本后面的请求都不再执行。
3) 假设/admin/不是一级节点,而是二级节点,如果它失败,只影响它的孩子,而不会影响后面的一级节点。
因此,上面/admin/失败,将导致用户执行失败,用户发起的请求总数只有2个,而不是31个。这完全符合浏览器的行为,如浏览器主页失败,则就不会出现正常页面可以点击,即不会出现后面的HTTP请求,所以,Scripter的业务脚本提供录制解析成多级结构,如果最终生成的脚本跟网站不一样,请用户受到拖拉对应的HTTP请求到对应的位置。
如果请求的响应消息存在Set-Cookie头域,因此需要获取它的Cookie值(工具自动关联Cookie与jsessionID参数),作为会话,以便后面的请求Cookie值可以引用该值。
1) 整个业务过程的http交互流程将被录制下来,然后生成界面。
2) 界面左边为树形,表示业务的模拟流程,包括HTTP的请求,事务与思考。
3) 右边为对应左边树节点的内容界面,“请求页”为如HTTP请求的信息,包括地址URL、HTTP消息的头域与HTTP的消息体;“响应页”为该HTTP请求对应的响应结果。
4) 生成脚本时,将会自动把Cookie自动提取为参数
通过点击“查看消息”按钮,弹出该HTTP消息的结构窗口。
如果需要检查收到的响应消息是否期待接收的正确消息,需要配置。
有些HTTP响应单从响应码无法判断是否是正确的消息,需要检查响应消息的内容。
可通过“录制快照”窗口双击表格查看录制日志,也可以点击“请求消息”或“响应消息”的“录制日志”按钮查看。
其中,响应消息录制日志界面支持右键菜单操作(一般不建议这里操作,而是在比较两次录制或比较录制与回放时操作)。
对选择的HTTP请求节点设置关联参数,即从该节点的响应内容获取参数值。如界面选择JSessionID值的获取方式为左边为“Set-Cookie: ”右边为“;Path”
对选择的HTTP请求节点设置检查点,只有响应内容出现该值才认为执行该节点成功。
即复制选择行的内容
查看录制时的HTTP情况,包括URL、响应码、时间等,目的了解使用真实的浏览器打开网站的情况。
说明:
1、
该功能可以作为您分析页面是否合理,分析如何优化页面请求
2、
页面结构,页面花费时间在什么地方
点击工具栏的“快照”按钮
说明:
3、
双击可以查看HTTP资源录制时的请求日志与响应日志。
4、
点击“并发时间图”可以查看浏览器是如何并发请求资源的,花费时间,并发个数
可以通过录制快照了解到:
1) 录制包括多少也页面(建议在每个页面第一个与最后一个请求添加开始事务与结束事务,即每个页面作为一个事务,方便统计时间、成功与分析)
2) 网页的组合,每种类型有多少个,占用比例是否合理。
通过这个可以了解页面是否合理,会不会请求数太多、资源太大没压缩、重复资源多(没缓存)
3) 了解访问网址包括多少个HTTP请求
4) 了解浏览器完成网站所有HTTP请求的时间(即网页时间),后面使用工具模拟并发时打印的事务时间与该时间比较,即可知道事务时间是否合理。
5) 了解浏览器使用多少个TCP连接、多少个并发同时完成HTTP资源下载。后面使用工具模拟即可知道工具是否能够模拟真实浏览器的行为,因为只有模拟真实客户端(浏览器或其他应用)的测试才是最有意义的。
6) 每个请求使用GET还是POST
7) 每个请求成功(2XX或3XX响应)还是失败(4XX或5XX响应),失败会红色标志
8) 了解是否存在缓存,请求的响应码如果是304,表示浏览器缓存存在该资源,没有下载实践内容。
9) 了解每个请求花费的时间、开始时间、结束时间
目前已知的性能测试工具只有kylinPET支持模拟浏览器,这样测试的时间才是最真实的用户访问页面时间。
只有模拟浏览器行为的测试才是最有效的测试,测试结果才能真实反映支撑用户场景。点击“设置”按钮,弹出设置窗口:
表示每个虚拟用户只使用一个线程发送脚本的所有请求
表示每个虚拟用户多个线程、多个TCP并发HTTP请求,即录制时浏览器的行为,并发个数与TCP数参照录制快照。
注意:
1、
这里每个并发线程执行完一个HTTP请求,立即执行下一个HTTP请求,即两个请求没时间间隔,除非有思考时间(Think Time)
表示每个虚拟用户多个线程、多个TCP并发HTTP请求,而且HTTP请求发送时刻与录制时HTTP的间隔时间一致。即录制时浏览器的行为,并发个数与TCP数、时间间隔参照录制快照。
该设置表示完全按照录制时的浏览器行为,因此录制时浏览器的操作行为需要按正常的用户操作方式,包括思考时间。
注意:
1、
这里每个并发线程执行完一个HTTP请求,需要等待一定时间后才执行下一个HTTP请求,即两个请求之间有时间间隔(间隔时间根据录制时浏览器的间隔时间)
2、
思考时间(Think Time)在该配置下不会执行,因为HTTP间隔已经包括录制时的思考时间,因此要求录制业务时思考时间是正常用户的使用行为。
下面举测试人员经常遇到的问题:
为什么使用浏览器访问页面响应很快,1-2秒就完成;而使用测试工具却需要10几秒,甚至几十秒才完成脚本。
解答:
a)
这是由于浏览器访问页面响应是并发的,同时并发多个线程(多个Socket),而性能测试工具基本是串行发送请求的。如果一个页面有100个资源(CSS、HTML、JS、图片),需要发送100个HTTP请求,如果使用6个线程(浏览器),则每个大概请求14个HTTP;如果使用一个线程(测试工具),则需要请求100个,时间当然大很多。
上图为chrome浏览器访问www.qq.com时,调试工具显示的并发情况。可以看到浏览器是并发多线程多TCP下载网站资源。
b) 另外浏览器具有缓存功能,如果之前访问了www.qq.com,会把一些图片缓存在浏览器临时目录,下次请求时发送的HTTP请求会带上If-Match或Etag等头域,WEB服务器判断资源没改变则会304响应,而不是回200 OK,这样减少资源的传输,所以时间就小。而有些测试工具是不携带这些头域(包括Loadrunner),因此回的响应是200 OK。所以测试人员默认真实测试时,可以考虑部分有缓存,部分没缓存。
性能测试工具运行一定用户数都成功,则表示该服务器能支持这么多用户数?如果不是,哪到底能支持多少用户?
解答:
一次有效的测试结果,不只用户都运行成功,同时需要保证访问一个页面或一次交易的响应时间在合理范围。这里介绍“2-5-8原则”,简单说,就是当用户访问一个页面或一次交易能够在2秒以内得到响应时,会感觉系统的响应很快;当用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以;当用户在5-8秒以内得到响应时,会感觉系统的响应速度很慢,但是还可以接受;而当用户在超过8秒后仍然无法得到响应时,会感觉系统糟透了,或者认为 系统已经失去响应,而选择离开这个Web站点,或者发起第二次请求。
还有,如果测试工具模拟的虚拟用户能代表真实用户的行为,且事务响应时间在合理范围,可以认为该服务器可以支持N个用户。
解答:
这需要性能测试工具可以模拟出真实用户的行为,包括HTTP请求数、每用户并发线程与TCP连接数、思考时间、有无缓存。
为什么需要模拟真实用户的线程数与TCP连接数呢?操作系统的TCP连接数理论值一般很大,操作系统对TCP连接设置有默认值(怎么配置,可以网上搜索,这里不介绍);但实际测试中TCP连接在几百,就出现测试的响应时间很长。抓包分析,原来是三次握手的SYN包服务器不及时响应,导致SYN重传(3秒后,9秒后)。
如果SYN丢了,则会重发,但是第一次是3秒后,第2次是在9秒后,如果重发才收到的SYN_ACK,则导致TCP连接超长,从而导致业务响应时间延长。
WEB服务器的线程数与TCP连接数实践测试往往很低,这不是提高硬件就能轻松解决的,这也是服务器调优比较复杂的配置。
因此,只有尽最大能力模拟真实用户(浏览器或其它WEB客户端,可能不同浏览器的并发线程与TCP数都不一样)的行为的测试场景,测试结果才最真实,测试场景满足规格与客户需求,则服务器调优参数才最有意义。
Scripter在录制业务时,将浏览器的TCP数与线程数,页面请求时间记录下来,启用模拟浏览器配置,将可以模拟浏览器一样的行为,包括每个请求发送的间隔时间(支持ajax定时轮询),启动的线程数与TCP连接数。
模拟真实用户行为,这样的性能测试才是最有用的,最有说服力。
工具提供比较两次录制日志标识出两次录制不一样的内容为红色,让用户一目了然识别出那些内容需要进行关联,很大程度提供脚本编辑效率与准确率,减少用户脚本出错及定位脚本时间。
正常业务场景时,通常存在发送的请求消息需要带上前面服务器回复的动态数据,如验证码、会话ID之类,否则业务将失败。因此需要工具支持从响应消息获取参数值,即关联参数。
新建一个新的业务脚本,然后通过录制创建脚本,并保存。操作方式见上面的“以代理方式举例”。
同第一次录制操作方式,创建一个录制脚本。
注意:
1、
可能需要清空缓存,防止两次录制关键的HTTP请求由于在缓存存在而浏览器不发送HTTP请求。
打开第一次录制,点击工具栏的“比较”按钮,在弹出文件选择框里,选择第二次录制保存的脚本。
注意:
1、
比较时,工具自动过滤cookie与set-cookie头域,即这些头域不比较,用户也无需关联Cookie与JSessionID,因为工具支持自动关联Cookie与JSessionID。
即HTTP请求的资源为图片(ico,jpg,gif,png,jpeg)时,不需要比较,同时不显示到比较窗口,即内容不打印到窗口。目的是过滤无意义的HTTP请求与响应(图片是静态资源,内容不变,比较无意义),减少比较内容,因为图片内容一般不影响业务,比较无意义。
同图片解释,CSS是静态资源,内容不变,比较无意义
如果JS是静态资源,内容不变,比较无意义。如果JS会根据用户动态变化,则可以选择比较
同图片解释,媒体(音视频)是静态资源,内容不变,比较无意义
录制时由于浏览器有缓存功能,服务器回的是304(即没发送内容);但工具删除Last-Modified,Etag头域(默认删除,可以配置不自动删除),因此服务器回的是200,携带内容。
因此304与200比较无意义,因为录制没内容,回放有内容,比较肯定不同,且无意义。虽然不比较,但是会将内容打印到比较界面,这点跟前面的图片不一样。
当请求节点对应的URL(以http前缀的整个URL)包含过滤的URL,则不进行比较。因此,可以过滤一些不需要比较的URL,提高比较效率。
工具默认不比较头域:date, etag, expires, server, last-modified, connection,
if-modified-since, if-none-match, cache-control, proxy-connection;另外,自动关联参数时,工具默认不比较Cookie、Set-Cookie,因为工具支持自动获取Cookie与JSessionID,因此用户不需要关联Cookie与JSessionID。
例如下图:
如果点击“比较”后,弹出如上图的窗口,表示列举属于第二个录制文件的URL在第一个文件里找不到它对应的URL。
注意:
1.
如果是URL的参数不一样,工具是能够识别的,但如果是URL参数前面不一样,工具则认为是不一样。
需要用户确定两次录制步骤是否一样,如果第二次录制多了一些步骤或者步骤不一样则将导致找不到的URL;还有如果业务交互过程的HTTP请求存在动态改变URL(不包括参数值)的情况,例如:
第一次录制的URL是http://www.baidu.com/abc/1/
第一次录制的URL是http://www.baidu.com/abc/2/
解决办法:用户在workspace\url_map目录下创建一个map.txt文件,文件每一行代表一个映射,URL间使用空格分隔;第二个录制文件即窗口提示找不到的URL在前面,如:
注意:
1、
为了补齐,在Header及Body后会添加回车,目的是节点同步,所以,在查看比较时,请忽略回车。
2、
如果出现左边与右边内容不对齐,即出现错乱行号,是因为打印的内容出现乱码。解决方法通过“设置”窗口选择正确的编解码,如“UTF-8”
红色代表两次录制日志内容存在不一致;黑色代表正常;灰色代表HTTP请求没有比较或者该节点不是HTTP节点(如是思考时间)。
²
为上一个差异
²
为下一个差异
²
,左边为录制内容,显示录制内容的长度
²
,右边为回放内容,显示回放内容的长度
²
显示录制与回放内容的不同总数
红色代表不同之处
黑色代表相同
最下面的比较内容
当选择录制或回放某一行内容时,将在这里显示录制与回放对应的行,以便比较。
当关联窗口的记录数太多,或者不同的行长度太长导致无法看到不同内容,可以针对某个HTTP进行比较。
比较页面为全部HTTP请求的比较结果,如果需要单独比较一个HTTP请求与响应,双击即可弹出窗口:
界面与比较全部HTTP界面基本一样。但还包含文本格式转换。
注意:
1、
文本格式转换只针对HTTP响应的body部分,不包括header部分。
保存响应部分body原来的格式
如果响应部分body是XML内容,且XML格式不好,例如没有回车或排版不好看,可以通过转换XML内容将XML格式转换为漂亮格式,方便比较。
如果响应部分body是JSon内容,且JSon格式不好,例如没有回车或排版不好看,可以通过转换JSon内容将JSon格式转换为漂亮格式,方便比较。
如果某行太长,不方便比较,可以把它转换成多行进行比较
如果某行太长,不方便比较,可以把它转换成多行进行比较
如果某行太长,不方便比较,可以把它转换成多行进行比较
如果某行太长,不方便比较,可以把它转换成多行进行比较
如果某行太长,不方便比较,可以把它转换成多行进行比较
工具支持自动获取Cookie与JSessionID,因此用户不需要关联Cookie与JSessionID。
点击界面的按钮,自动关联响应消息的消息体中不同内容,提取关联参数
注意:
1、
默认情况下,界面显示的关联项,是从响应消息的所有不同值里过滤出来的,即默认勾选了去掉重复与只在后面内容出现;过滤条件可以点击界面上的“过滤”按钮设置。
在表格里选择需要关联的项,如果对系统不熟悉,可以勾选过滤条件后,选择全部。
当在关联窗口选择多条时,然后单击“添加”按钮,则为多条记录批量添加关联,提高效率。
如果出现告警:
最下面列出的参数名与参数值表示虽然在脚本里添加成功了,但这些参数值没在后面的发送请求里找到它对应的值,可能不需要关联,需要用户自己判断是否需要。
可以双击表格某条记录或者选择某条记录,然后点击“添加”按钮来添加。
1) 双击或选择需要关联的行然后单击“添加”按钮,编辑并点击“确定”即在脚本对应的HTTP节点添加关联参数,同时把该节点后面所有包含“匹配文本”的值的HTTP请求节点替换成参数名。
2) 点击“还原”按钮将在对应的HTTP节点删除该关联参数。
3) 鼠标选择表格中对应的行时,比较界面将自动定位到该关联参数对应的行
4) 表格字段说明
² URL:该参数归属的HTTP节点
² 匹配文本:两个脚本不一样的内容
² 左边文本:匹配文本左边的值,也是虚拟用户运行时在接收消息查找的字符串
² 右边文本:匹配文本右边的值,也是虚拟用户运行时在接收消息查找的字符串
² 参数名:提取查找后的值作为该参数名的值,后面通过引用该参数名(使用{}符号)时,即可替换为实际值。
² 已处理:该参数是否已经存在对应HTTP节点的关联参数列表里
² 行数:对应在打印消息内容界面的行
如果出现告警:
关联虽然在脚本里添加成功了,但该参数值没在后面的发送请求里找到它对应的值,可能不需要关联,需要用户自己判断是否需要。
关联方式有多种,详细请参照《kylinPET 关联参数》文档。下面简单介绍两种:
找到响应消息里的不同之处,鼠标拖动选择红色(两次录制不一致)内容。
注意:
1、
关联参数只能是从响应消息里查找,因此请选择的内容是属于响应消息内容,而不是属于请求消息内容。
2、
为确保下面发送的内容携带它,建议全文搜索下,如果后面没有包括该不同之处,则可能它不是关联参数(当然可能也需要自动关联,因为后面根据它计算一个新的值)
然后,点击右键弹出菜单
工具提供了几种提取方式。
1) 左右方式
通过查找左边文本和右边文本,然后提取中间部分内容。
2) 自定义方式
支持正则表达式匹配
支持匹配次数
支持查找成功后,再进行查找;类型有:在匹配成功的内容左边进行再次匹配,在匹配成功的内容里进行再次匹配,在匹配成功的内容右边进行再次匹配。
3) 工具自动方式
有些参数是协议常用的,工具内置了提取方法。如Cookie
设置动态参数跟关联参数不同,动态参数是用户输入的内容,关联参数是从服务器响应获取的内容。动态参数如用户登录输入的用户名与密码。
例如,需要模拟多个用户登录,每个用户使用不同的用户名与密码,则需要将用户名与密码参数化。
操作方式跟“自动关联参数”的比较两次录制一样。找到请求消息里的不同之处,然后,鼠标选择不同之处,点击右键弹出菜单
1) 点击“编辑” -> “字符串替换为参数”或者工具栏的“字符串替换成参数”按钮,在弹出窗口输入,替换值与参数名
说明:
“字符串替换为参数”是对整个脚本里所有字符串“kylinPET”进行替换,而不只是POST请求消息。如果只对某个字符串替换,可以手动修改。
2) 找到参数对应的HTTP节点,直接将内容替换成“{参数名}”
参数配置详细参照《kylinPET 参数配置》文档。
脚本里包括了动态参数后,则需要为这些参数变量提供参数实际值,实现每个用户的参数值不一样。
点击“工具” -> “参数列表”或者“工具栏”的按钮。
密码为随机类型,前缀为pass,后面可以为1-50的随机值
用户名为顺序类型,前缀为user,后面按顺序递增,递增部分长度为5,不足补0。
说明:
1.
HTTP发送节点文件名如果出现参数化,存在“{}”符号,则需要在参数列表配置该参数对应的值,以便实现每个用户不同的取值。也可能是需要前面的响应消息里获取参数值,如{Cookie}, {jsessionid}
2.
如果发送的消息里面出现有参数没替换(如{username}),则可能有两种情况:1)该参数需要在前面的响应消息里获取它的值,则检查是否没配置参数关联或者配置但获取失败;2)表示该参数没在参数列表配置,需要添加该参数(如username参数)。
3.
参数列表提供从文件方式导入参数,文件格式如下:
列名1列名2列名3
列值1列值2列值3
如果录制时只有一个页面,则不需要添加自定义事务,因为整个脚本就是一个事务;但如果录制时是多个页面(如访问页面A后,再点击页面B),需要给每个页面添加自定义事务,目的是可以统计每个页面的成功、失败与时间。
每个页面录制时所花费的时间工具已经得出(参照值),业务运行的事务时间数据与参照值对比就可以确定该页面花费时间是否在合理时间范围,建议满足“2-5-8”原则。
当然,如果不需要关注页面时间,可以不添加自定义事务。
选择需要插入“开始事务”的树节点,然后右键
则在选择节点前插入事务。
注意:
1、
当选择模拟浏览器行为时,即虚拟用户并发HTTP请求,则循环次数只能为1。
同“开始事务”的操作方式
如果结束事务aaa是在login.jpg后,需要选择/admin/节点,而不是login.jpg节点。
工具默认根据响应码来判断请求是否成功,但可能请求回复的是200成功,但实际内容是错误。举例如:输入用户名密码成功放回正常页面html,失败返回失败页面html,两个页面都是200响应返回的内容,但失败页面需要提醒我们脚本失败,则可以添加检查点,假设成功页面包括“检查响应内容”,则如上图配置。
配置项包括内容长度:该配置支持检查一个范围,符合该范围才认为请求成功,如果HTTP相应内容是chunked或是压缩内容,工具也是检查该内容的长度,而不是解压后的长度,这点需要注意,另外,检查长度占用资源和内存比检查文本要小,如果测试发现内存CPU比较高,可以使用检查长度替换检查内容。
录制时每个链接点击前将插入思考时间,但默认“忽略思考时间”,即执行用户脚本时不执行思考时间,如果需要执行思考时间,则在“设置”的“思考时间”选择“执行思考时间”。
注意:
1、
当选择模拟浏览器行为的“并发,按照录制时间间隔发送请求”方式时,思考时间无效,因为它已经记录录制时HTTP请求的间隔时间。
选择需要插入“思考时间”的树节点,然后右键
则在选择节点前插入思考时间。
假设网站通过DNS实现负载均衡,而我们业务录制时网址为192.168.1.2,不需要查询DNS。因此,这里把192.168.1.2替换为域名www.kylinPET.com,目的是通过DNS查询域名来得到它的IP地址,这样可以实现负载均衡。
点击“编辑” -> “替换字符串”或者“工具栏”的按钮,弹出窗口输入替换值。
替换了93处,即把脚本里所有数节点,所有内容出现192.168.1.2替换为www.kylinPET.com。
注意:
该步骤只是为了说明工具提供的功能。如果只对某个字符串替换,可以手动修改。
这里只是介绍删除头域功能,并不要求需要删除头域
点击“编辑” -> “删除头域”或者“工具栏”的按钮,弹出窗口输入头域值。
则ThreadID头域将从所有HTTP消息里删除
删除了31处
注意:
该步骤只是为了说明工具提供的功能。如果只对某个HTTP请求的删除,可以手动修改。
这里只是介绍增加头域功能,并不要求需要增加头域,只在有需要是添加。
点击“编辑” -> “头域”或者“工具栏”的按钮,弹出窗口输入头域值。
注意:
该步骤只是为了说明工具提供的功能。如果只对某个HTTP请求的添加,可以手动修改。
点击“工具” -> “设置”或者“工具栏”的按钮。
启用缓存功能,则web资源如图片,js文件等将不会重复请求多次。
默认禁用,严格按照录制时的URL,如果录制存在重复,则执行也重复
录制业务时,域名对应的IP地址保存为映射表。如果勾选“启用DNS映射表”,则域名对应的IP地址已经存在,工具不会去查询DNS,除非对应的HTTP请求消息界面勾选了“通过查询DNS负载均衡”。如果没有勾选“启用DNS映射表”,则运行时需要查DNS得到域名的IP地址。
点击“文件” -> “保存”或者“工具栏”的按钮。如脚本保存为test.spet
点击 “工具栏”的按钮运行脚本,通过日志调试脚本是否正确。虚拟IP的脚本调试可通过Controller的“调试脚本”实现场景调试。
注意:
回放时工具自动选择“串行模式发送请求”,即不启用模拟浏览器并发。浏览器并发只在Controller运行场景时才有效,因为这里需要根据回放日志与录制日志比较。
红色代表存在错误;黑色代表正常;灰色代表HTTP请求没被执行或者该节点不是HTTP节点(如是思考时间)。
²
为运行按钮,点击运行脚本进行调试
²
为停止按钮,点击停止运行脚本
²
为上一个错误
²
为下一个错误
²
为导出日志按钮,如果日志太多,需要查找或过滤(如过滤Error或Excepiton关键字找出错误日志),可导出到文件,然后通过UE或NotePad++等软件分享。
²
弹出窗口,显示回放日志与录制的比较,不一样内容显示红色,方便用户快速定位问题,或验证回放是否表示业务执行成功。
²
显示文本区域的内容长度
a) 红色代表错误或异常
日志内容包含:“Error:”或“Exception:”关键字
b) 黑色为业务消息日志
如发送日志或响应日志
c) 蓝色为分隔信息或统计信息
² runTime:表示整个脚本运行时间
² requests:请求(发送)消息个数
² responses:响应(接收)消息个数
² throughput:吞吐量
² Transaction:脚本中事务统计
² response code:响应码统计
1)
通过浏览器打开回放数据,页面直观判断业务是否正确,保证脚本正确性。
2) 性能测试时,可能出现脚本回放成功,但实际业务没有成功。通过浏览器查看回放页面即可一目了然判断页面错误。再结合回放与录制日志比较,找出哪个地方设置错误。
例1:用户登陆失败,但服务器回复响应200 OK重新定位到登陆界面输入用户名与密码而不是登陆成功后的页面,测试工具认为正常。
例2:当录制的业务比较复杂时,如存在大量的参数需要关联,或者Session不仅在Cookie出现,甚至在URL或Referer头域也存在Session信息。这种情况下,编辑脚本非常容易出现问题,因为测试人员一般不知道哪些参数需要关联,哪些参数与Session相关,所以可能脚本回放成功,但实际业务失败。
脚本执行回放成功后,点击回放窗口的按钮
验证页面采用代理方式实现,与代理方式录制业务一样。不同于录制的是,kylinPET不会将收到的请求发送给真实的WEB服务器,而是代替WEB服务器回复HTTP响应,响应数据来源于回放时的数据。
a)
HTTP与HTTPS使用同一代理端口8111
b)
URL:为该次回放数据里出现HTML页面的URL列表,如果URL里没有出现正常业务对应的页面或URL,则表示回放存在错误。
注意:
1
工具自动设置系统的IE代理,如果设置失败(可能是权限原因),请自己手动设置浏览器的代理地址为localhost,端口为8111;
2
Linux系统需要用户自己手动设置浏览器代理。
3
设置代理方式参照“2.1.3 以代理方式举例”
c)
自动打开浏览器,并访问网站
a)
URL:为该次回放数据里出现HTML页面的URL列表,通过选择对应URL打开它的页面
注意:
1
建议每次选择新的URL前,手动关闭之前打开的浏览器
b)
requests:显示工具处理了多少个HTTP请求
c)
每次打开页面后,重新点击浏览器的刷新按钮,避免由于缓存导致浏览器不发送部分HTTP请求。另外,建议刷新前,打开浏览器的调试功能,键盘F12键(后面介绍调试功能作用)
1) 查看打开页面对应的所有HTTP请求信息,包括URL、请求方法、响应码、时间线(如果,时间轴重叠表示浏览器是并发请求)
2) 应用于kylinPET的验证页面,可以看到那些请求回了404响应码(内容为)。对回响应码404的请求,表示脚本可能出现错误,需要定位是否脚本问题。定位脚本问题方法后面介绍。
3) 测试人员可以通过调试界面学习浏览器与服务器业务交换流程,学习HTTP。
1) IE9
IE9才自带有Network(网络)功能,按F12将打开调试窗口(也叫开发人员工具),选择Network(网络)选项卡
2) Chrome
按F12将打开调试窗口(也叫开发人员工具),选择Network(网络)选项卡
3) Firefox
需要安装firebug组件,按F12将打开firebug的调试窗口,选择Network(网络)选项卡
当验证页面时,工具也记录了浏览器发送的HTTP请求,及这些请求在回放里找到的响应数据映射。通过比较URL映射表,用户即可知道哪些URL出问题,如在回放数据里找不到。
点击录制控制条“快照”按钮
红色表示浏览器发送的HTTP URL在回放里没找到,然后回给浏览器404 “URL not in playback”,这个可以从浏览器的调试窗口看到。
通过浏览器的调试窗口的Network(网络)查看浏览器与服务器交换的“所有”HTTP数据,找出错误的响应,包括404或500-599响应码(浏览器对错误响应会标识红色)
注意:
1
为保证页面显示的不是浏览器的缓存,需要点击浏览器的刷新按钮,实现页面刷新
出现“URL not in playback”表示该URL不在回放数据里,可以将该错误的URL复制到Scripter的搜索框里查找是否存在脚本里。
可能原因:
a) 录制产生的脚本里没有包括该URL,这可能是录制时浏览器由于该资源在缓存里,因此不重新发送该请求。可先清空缓存,再录制脚本解决。
b) WEB服务器回了响应带了会话Session参数,浏览器获取该参数,并在后面的URL里携带上,但脚本没有关联获取参数,这就是脚本配置问题,可通过参数关联解决。
例如:http://192.168.1.2:8080/admin/j_security_check;jsessionid={JSessionID}
这些响应码表示服务器处理问题,需要定位服务器为什么返回该响应码,是否脚本配置问题。可以通过kylinPET的“比较”功能,比较录制与回放改URL数据哪不一样。
回放与录制日志比较也可以作为关联参数的一种方式,方法类似“2.5 两次录制脚本比较实现关联”。关联参数也可以参照《kylinPET 关联参数》文档;
同时,当脚本出问题时,可以用来定位问题。
如果脚本是通过录制创建的,点击回放窗口的按钮,弹出比较窗口
1) 脚本回放成功,但实际没有成功。而导致测试无效,对于性能经验不足的测试人员经常发生这样的事情。
例1:用户登陆失败,但服务器回复响应200
OK(重新定位到登陆界面输入用户名与密码而不是登陆成功后的页面),如果没有设置检查点(由于测试人员一般不知道页面的代码长什么样,因此一般没法考虑这一点),脚本执行成功,但实际脚本执行失败(因为没有达到业务登陆成功的需求)。如果使用kylinPET工具,则通过比较,用户可以一目了然看出相应内容部一样,保证测试有效。
例2:由于获取Cookie失败,导致后面发送的HTTP携带错误的Cookie导致服务器处理失败,但仍然回复正常的响应码,导致测试工具认为成功(没有设置检查点情况)。
2) 脚本回放失败,但是不知道是什么原因导致,而不会配置脚本或花很长时间解决问题
例1:登陆成功正常应该返回302重新定位到正常页面,但失败回复200重新定位到登陆页面(重新输入用户名与密码)。Loadrunner工具对200与302都认为正常,因此将导致业务实际执行失败。不了解HTTP的测试人员,或经验不足的测试人员,不知道实际业务流程(一般了解业务及HTTP的开发人员才知道,因此技能要求很高)无法定位问题,或者花费很长时间解决问题。
例2:测试工具提交JSon数据或参数,但服务器回复400或500等错误响应,需要测试人员定位提交数据是否错误,可能是由于编解码配置错误导致,经验不足的测试人员往往花费很长时间解决问题。
即HTTP请求的资源为图片(ico,jpg,gif,png,jpeg)时,不需要比较,同时不显示到比较窗口,即内容不打印到窗口。目的是过滤无意义的HTTP请求与响应(图片是静态资源,内容不变,比较无意义),减少比较内容,因为图片内容一般不影响业务,比较无意义。
同图片解释,CSS是静态资源,内容不变,比较无意义
如果JS是静态资源,内容不变,比较无意义。如果JS会根据用户动态变化,则可以选择比较
同图片解释,媒体(音视频)是静态资源,内容不变,比较无意义
录制时由于浏览器有缓存功能,服务器回的是304(即没发送内容);但工具删除Last-Modified,Etag头域(默认删除,可以配置不自动删除),因此服务器回的是200,携带内容。
因此304与200比较无意义,因为录制没内容,回放有内容,比较肯定不同,且无意义。虽然不比较,但是会将内容打印到比较界面,这点跟前面的图片不一样。
当请求节点对应的URL(以http前缀的整个URL)包含过滤的URL,则不进行比较。因此,可以过滤一些不需要比较的URL,提高比较效率。
工具默认不比较头域:date, etag, expires, server, last-modified, connection, if-modified-since, if-none-match, cache-control, proxy-connection
有时候验证业务是否成功时,比较内容会显示Cookie为红色,这是因为录制与回放认为是两次不同的会话,Cookie值不同,但实际业务正常。如果不想比较他们(认为它们正常不需要比较),只比较其他可能出现不一样的地方,则可以输入cookie, set-cookie头域。虽然不比较,但是会将内容打印到比较界面,这点跟前面的图片不一样。
注意:
2、
为了补齐,在Header及Body后会添加回车,目的是节点同步,所以,在查看比较时,请忽略回车。
红色代表回放内容与录制内容存在不一致;黑色代表正常;灰色代表HTTP请求没有比较或者该节点不是HTTP节点(如是思考时间)。
²
为上一个差异
²
为下一个差异
²
为导出当前比较窗口的回放日志按钮,可与后面controller调试导出日志进行比较,验证正常执行时业务是否成功。
²
,左边为录制内容,显示录制内容的长度
²
,右边为回放内容,显示回放内容的长度
²
显示录制与回放内容的不同总数
红色代表不同之处
黑色代表相同
粉红色代表录制不存在该资源,但回放有该资源(工具自动识别内嵌资源)
最下面的比较内容
当选择录制或回放某一行内容时,将在这里显示录制与回放对应的行,以便比较。
对选择的HTTP请求节点设置关联参数,即从该节点的响应内容获取参数值。如界面选择JSessionID值的获取方式为左边为“Set-Cookie: ”右边为“;Path”
对选择的HTTP请求节点设置检查点,只有响应内容出现该值才认为执行该节点成功。
即复制选择行的内容
定制测试场景一般根据:
1) 根据客户需求定制测试场景
2) 架构设计师或开发人员或测试人员估算系统支持业务,定制测试场景
3) 对系统支持用户无法估算,则用户数通过低到高方式进行负载测试
测试模型:
1) 负载
2) 长时间稳定性
3) 过载:超过系统能力
4) 突发:测试模型某时刻用户数突然大量增加
将测试场景对应的执行器(Agent)全部启动,如果controller运行在硬件性能高的PC,可以将Agent与Controller运行在同一PC。
可能测试场景需要多个Agent,则全部启动;如果某个PC硬件性能很高,可以在同一PC上启动多个执行器(Agent)进程,但需要为每个Agent配置不同的监听端口,另外,建议每个Agent使用不同的IP地址(可以一个网卡配置多个IP),否则可能出现端口被占用。
然后在Controller添加所有需要用到的执行器(Agent),点击“工具” -> “执行代理器”或者“工具栏”的按钮,添加执行代理器
如果是远端执行代理器,需要添加新的代理器,IP与地址为远端执行代理器。
点击“工具栏”的“新建”按钮,创建一个新的测试场景。默认测试场景的任务名为task,绑定本地执行代理器local
默认新场景已经存在task任务,并绑定本地执行代理器,因此不需要手动创建。如果手动创建,如下操作:
选择Controller的“设计”页面,左边的“任务管理”树,单击右键选择“新建任务”
新建时没有配置,因此显示图标,表示配置有误
默认新场景已经绑定本地执行代理器,因此不需要手动绑定。如果需要绑定远程执行代理器,操作如下:
选择任务节点,单击右键,选择“他的代理器”
将执行代理器“test”添加(右移)到任务“fdaf”,即表示“test”归属于任务“fdaf”
点击按钮,添加任务脚本test.spet;
然后设置任务的并发模型,通过点击“模型设置”按钮,在弹出的窗口设置模型;
业务并发模型,支持多种并发模型,包括稳定速率、递增、递减、波浪、振荡、随机、波浪与振荡。
详细的并发模型配置参照《kylinPET 并发模型介绍》文档
建议使用“系统虚拟IP”,并为系统添加虚拟IP地址,参照安装目录IPConfig下的《kylinPET IPConfig使用指导》文档。
点击“设置” -> “IP欺骗”,然后选择“系统虚拟IP”
Controller界面最下面的状态栏将显示“IP欺骗:系统虚拟IP”
由于选择IP欺骗,因此需要配置源IP列表,如果没有配置,显示图标,表示配置有误。配置路由方法参照《kylinPET 三种典型组网介绍IP欺骗与路由设置》文档。
1) 添加源IP列表
点击“添加”按钮
资源监控可以参照《kylinPET 服务器监控操作指导》文档
业务性能测试时,通常还需要记录业务服务器的资源数据,如CPU、内存、线程数、I/O、吞吐量,将它们与运行日志、或指标数据进行曲线对比,则可展示某段时间的资源指标值、普通指标值,这样可辅助定位性能问题。如,用户失败数量在某时刻很高,是否由于CPU占用太高导致。
1) 在服务器上运行monitor资源监控器
2) 添加监控代理器
点击“工具”的“监控代理器”或者“工具栏”的按钮
点击“添加”按钮
3) 添加资源监控项
选择监控代理器,工具会自动获取服务器的监控项,选择监控资源项,然后单击添加按钮。
图中的CPU,表示有4个线程,是监控其中一个还是所有。
注意:
如果没有监控信息,则需要断开监控代理器,再连接监控代理器。
4) 关闭窗口,资源监控项信息将显示在监控树
通过阈值可以实现目标场景测试,详细参照《kylinPET 并发模型介绍》文档
业务性能测试时,通常还需要记录超过阈值的信息,如CPU超过60%告警通知、事务时间超过某个值时告警通知、失败数超过多少时停止测试。
点击“工具” -> “阈值”或者“工具栏”的按钮
设置监控项的阈值,超过阈值将执行阈值对应的动作行为,如告警或停止。
由于一个曲线图表显示的点数不宜太多,否则无法展示清晰的曲线。Loadrunner的曲线图表只能展示最近一段时间的数据图,而无法实时展示更久的数据图(当然,运行结束后可以用Analysis展示)。而kylinPET有两个曲线视图:300秒的曲线图视图;平均或最大、最小视图。
默认60秒的平均值作为一个点,用户可自己根据测试场景设置。
最近300秒视图只能显示300个点,如果希望展示指标(如CPU)一天的运行情况,可以切换到N秒一个点视图(点击左上角的按钮)。
用户可以根据自己测试场景设置需要多少秒显示为一个点,该点可以表示N个点的平均值、最大值、最小值。如CPU可能希望记录30秒的最大值(拐点,警示作用),而点击数可能希望记录30秒的最小值(拐点,警示作用),在线数可能希望记录20秒的平均值。
点击“设置”——“设置多少个点变一个点”。
用户根据自己测试场景设置。
Ø 1分钟一个点
即每60个数据值保存为一个平均值(或最大、最小),每个点代表当时1分钟的数据。图表只支持显示300个点,即可以显示最后300分钟(5个小时)的指标曲线图。
1. 5分钟一个点
即每300个数据值保存为一个平均值(或最大、最小),每个点代表当时5分钟的数据。图表只支持显示300个点,即可以显示最后1500分钟(25个小时)的指标曲线图。
2. 10分钟一个点
即每600个数据值保存为一个平均值(或最大、最小),每个点代表当时10分钟的数据。图表只支持显示300个点,即可以显示最后3000分钟(50个小时)的指标曲线图。
支持每个统计指标设置不同的类型,默认是平均值。选择监控项里某个指标,然后右键弹出菜单选择“多点变一个点的类型”。
1) windows操作系统上直接双击agent.bat运行,或命令窗口输入agent.bat;
2) 如果是本地执行代理器,可通过右键菜单选择“启动代理器”进行启动
确保执行的代理器处于连接状态,如果代理器处于断开状态,右键弹出菜单选择“连接”进行连接。
在 Controller的“控制”页面点击“调试配置”运行测试场景,则Controller会通知连接的每一个“执行代理器”执行一个用户,并将执行的过程日志返回给Controller。用户可通过日志判断配置是否正确,如果错误,可根据错误信息调整配置。
上图是运行的结果,日志显示流程错误。期待接收302响应却收到200响应。
查看发送的POST消息发现用户名还是参数,没被替换;因此,检查脚本的参数列表,发现没配置或配置错误,并更改。
调试配置保证配置正确后,点击“开始”运行测试场景。
图的1部分为任务运行的统计信息,包括成功数、失败数、每秒并发个数。
图的2部分为业务脚本监控项统计信息,包括每秒请求数、事务统计、服务器资源统计等;
双击树节点查看对应监控项的曲线图表。
图的3部分为显示监控项的运行情况,每秒一个数据值,构成曲线。每次只能显示一个监控项,可通过双击右边监控树节点来查看对应监控项的曲线图表。另外,可通过“切换”按钮,切换到平均曲线图表,每1分钟(或5分钟、10分钟)一个数据值,该值为当前1分钟(或5分钟、10分钟)的数据的平均值。
图的4部分为监控项的统计信息,包括最大值、最小值、平均值、当前时刻统计值。每次只能显示一个监控项,可通过双击右边监控树节点来切监控项。
图的5部分红色灯告警,表示超过阈值。只是由于为每秒请求数设置了阈值,范围为10-100,而运行过程出现接近0的统计值,超过阈值范围。
运行显示有多个用户失败,通过日志可判断失败原因。另外,日志中出现“common threshold value=1”的日志,是由于超过阈值打印告警日志。
分析下面指标,如够都正常,则表示此场景通过,否则分析短木板在哪,来进行服务器调优。
成功数、失败数、每秒在线数、最大在线数,通过这些指标分析此次测试结果支持的用户数、用户最大数
每秒平均HTTP请求数、响应数。分析系统的处理能力
事务成功、失败、时间,事务一般是整个脚本运行时间、或者一个页面或一个交易,通过结果分析,得出每个事物的时间是否合理,符合“2-5-8”原则,如果测试结果显示事物时间非常大,则表示系统支持不了此次测试的用户,因为用户的响应时间太大(像火车订票一样,太多用户导致响应时间长,用户无法忍受,则认为这个系统烂)。
当然,还需要查看事务的百分比,分析90%、80%、70%、60%的事务时间是否在合理范围。
TCP连接成功数、失败数、TCP三次握手时间。因为此次测试结果可能是由于服务器系统或网络的TCP的丢包与重传才导致延时大的。如果是服务器的原因,服务器收到TCP的SYN而不处理,可以通过调试服务器的TCP配置来优化。
怎么才知道是服务器的问题呢,这个需要性能测试工具能给出TCP连接时间(当前了解只有kylinPET可以支持),如果显示超过3秒,这时需要检查是网络还是服务器问题,可以在服务器端抓包(tcpdump或wireshark)然后分析TCP的SYN信息(个数、时间)
服务器的CPU、内存、带宽、I/O是不是已经不足,导致系统上不去是哪个原因,根据原因进行调优或升级。
测试时需要考虑性能测试工具的CPU占用率,如果性能测试工具占用CPU很高,此次测试可能瓶颈是在工具,而导致测试结果是无效的。所以执行时,最好能关注下Agent执行器的CPU,如果CPU占用很高(不要超过70%),则表示瓶颈在工具;因为CPU过高,将导致事务时间延长,而且是工具的问题,即测试结果可能无效。
因此,CPU占用很高,表示Agent执行器需要调低并发数,或者使用更高硬件配置的PC。
该功能默认启用,为执行的每一个虚拟用户统计信息
详细参照后面章节“4 WEB详细信息分析与定位问题”介绍
运行结束后,点击“工具” -> “Analysis”或者“工具栏”的按钮,打开Analysis界面分析测试结果。界面与Controller基本类型,但提供更强大的分析功能。包括放大、缩小(还原)、过滤、对比、合并,产生HTML报告等功能。
进入第一个界面将显示“报告”页面,内容显示运行统计信息、整个脚本事务统计信息、自定义事务统计信息,响应码个数统计,TCP连接信息。
成功数、失败数、最大在线数、请求数、吞吐量可以反映测试测试运行的情况
了解整个脚本运行完成时间,与录制的参照时间比较可以分析时间是否在合理范围,或者有90%,80%,70%,60%,50%用户在合理范围。如果都偏大,且不是Agent执行器CPU太高(70%以下认为正常)导致,则测试测试结果表示该场景下,WEB服务器无法支持。
每个事务最好表示一个页面或一次交易的所有HTTP请求花费时间,,与录制的参照时间比较可以分析时间是否在合理范围,或者有90%,80%,70%,60%,50%用户在合理范围。如果都偏大,且不是Agent执行器CPU太高(70%以下认为正常)导致,则测试测试结果表示该场景下,WEB