如何看Analysis分析图
第一步,从分析Summary的事务执行情况入手。
Summary主要是判定事务的响应时间与执行情况是否合理。如果发现问题,则需要作进一步分析。通常情况下,如果事务执行情况失败或者响应时间过长等,都需要做深入分析。
下面是查看分析概要时的一些原则:
1用户是否全部运行,最大运行并发用户数是否与场景设计的最大运行并发数一致。如果没有,则需要打开与虚拟用户相关的分析图,进一步分析虚拟用户不能正常运行的详细原因。
2事务的平均响应时间、90%事务最大响应时间用户是否可以接受。如果事务响应时间过长,则要打开与事务相关的各类分析图,深入分析事务的执行情况。
3查看事务是否全部通过。如果有事务失败,则需要深入分析原因。很多时候,事务不能正常执行意味着系统出现了瓶颈。
4如果一些正常,则本次测试没有必要进行深入分析,可以进行加大压力测试。
5如果事务失败过多,则应该降低压力继续进行测试,使结果分析更加容易进行。
6。。。。
(要在工作中不断总结与完善,尤其要和实际情况结合,不能墨守成规。)
第二步,查看负载发生器和服务器的系统资源情况。
。。。查看CPU的利用率和内存使用情况,尤其要注意查看是否存在内存泄漏问题。这样做是由于很多时候系统出现瓶颈的直接表现是CPU利用率过高或内存不足。
应该保证负载发生器在整个测试过程中其CPU、内存、带宽没有出现瓶颈,否则测试结果无效。而待测试服务器,则重点分析测试过程中CPU和内存是否出现了瓶颈:CPU需要查看其利用率是否经常达到100%或平均利用率一直高居95%以上;内存需要查看是否够用以及测试过程是否存在溢出现象。
第三步,查看虚拟用户与事务的详细执行情况。
在前两步确定了测试场景的执行情况基本正常后,接下来就要查看虚拟用户与事务的执行情况。对于虚拟用户,主要查看在整个测试过程中是否运行正常,如果有较多用户不能正常运行,则需要重新设计场景或者调整用户加载与退出方式再次进行测试。对于事务,重点关注整个过程的事务响应时间是否逐渐变长以及是否存在不能正常执行的事务。
下面是虚拟用户与事务分析的常用准则:
1虚拟用户如有失败,则要查明原因。
2在整个测试过程中,所有虚拟用户是否一致稳定运行并成功执行全部事务。如果仅有一个用户或部分用户能够正常执行,则说明测试脚本可能存在问题。
3对于失败的事务首先要分析其失败原因,接着要查看事务的失败是否导致了用户失败。
4判断用户是否可以接受事务平均响应时间值以及90%用户的最大响应时间值。
5查看整个测试过程的事务平均响应时间是否逐渐变大,正常情况下,事务平均响应时间的变化应该是接近于平行X轴的一条直线。
6事务响应时间是否在整个测试过程中随着用户的增加而线形变短。正常情况应该是,当一定范围内的用户并发时,事务响应时间应不会有太大变化。
7服务器每秒通过的事务总数、某一事务每秒通过数是否稳定,如果整个测试过程基本不变,则要分析是服务器达到了处理上限,还是Generator产生的压力达到了上限。
8按照迭代次数来运行的场景,要分析通过的事务总数是否与设定的一致。如果不一致,则可能是测试脚本存在错误,也可能是待测试程序存在功能错误,应该在调整后再次进行测试。
。。。。。。
第四步,查看错误发生情况。
整个测试过程的错误发生情况是分析的重点。下面是查看错误发生情况的常用准则:
1查看错误发生曲线在整个测试过程中是否有规律变化,如果是,则意味着程序在并发处理方面存在一定的缺陷。
2查看错误分类统计,作为优化系统的参考。例如web性能测试,当出现瓶颈时往往需要查看服务器的错误统计信息结果:如果“超时错误”达到90%以上,可能需要提高硬件配置;如果有较多的“内部服务器错误”,则可能是程序方面存在问题。
第五步,查看web资源与细分网页。
本步骤仅适用于web性能测试。查看web资源图时,往往需要结合前面对虚拟用户以及事务响应时间的分析结果,重点分析服务器的稳定性。对于网页细分功能则应遵循如下原则:首先分析从用户发出请求到收到第一个缓冲为止,哪些环节比较耗时;其次找出页面中哪些组成部分对用户响应时间影响最大;在页面的性能问题定位后,就可以采取相关的解决方案。
文章链接:http://www.51testing.com/html/05/45405-67024.html
如何看Analysis分析图的更多相关文章
- java基础学习总结——this关键字
一.this关键字
- (十二)this关键字
---摘自孤傲苍狼博客 一.this关键字 this是一个引用,它指向自身的这个对象. 看内存分析图:
- USACO 1.5 Prime Palindromes
Prime Palindromes The number 151 is a prime palindrome because it is both a prime number and a palin ...
- ZED-Board从入门到精通系列(八)——Vivado HLS实现FIR滤波器
http://www.tuicool.com/articles/eQ7nEn 最终到了HLS部分.HLS是High Level Synthesis的缩写,是一种能够将高级程序设计语言C,C++.Sys ...
- Android自定义View(CustomCalendar-定制日历控件)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/54020386 本文出自:[openXu的博客] 目录: 1分析 2自定义属性 3onMeas ...
- python django基础一web框架的本质
web框架的本质就是一个socket服务端,而浏览器就是一个socker客户端,基于请求做出相应,客户端先请求,服务器做出对应响应 按照http协议的请求发送,服务器按照http协议来相应,这样的通信 ...
- LoadRunner 压测场景制定以及报告分析
这里,我们利用 LoadRunner 来制定场景,且以测试 tps 值为导向,主要介绍手工场景 单服务器的业务请求处理能力 tps 值在 10~200 是合理的:如果是访问单接口不走关系型数据库的,访 ...
- USACO 6.1 Postal Vans(一道神奇的dp)
Postal Vans ACM South Pacific Region -- 2003 Tiring of their idyllic fields, the cows have moved to ...
- DevStore教你如何玩转饥饿营销?
首先我们必需知道: 所谓“饥饿营销”,是指商品提供者有意调低产量,以期达到调控供求关系.制造供不应求“假象”.维持商品较高售价和利润率的目的. 饥饿营销”营销方式,其通常的步骤: 1.引起关注.首先是 ...
随机推荐
- From scratch 资源
neural-network-from-scratch:https://github.com/pangolulu/neural-network-from-scratch rnn-from-scratc ...
- windows之杀死端口
提示: 查询端口 查询pid 杀死任务 通过 cmd 进入控制台: 查询端口: netstat -aon|findstr 1111 查询pid下的任务: tasklist|findstr 6616 杀 ...
- python 中的生成器(generator)
生成器不会吧结果保存在一个系列里,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopTteration异常结束 1.生成器语法: 生成器表达式:通列表解析语法,只不过把列表解析的[] ...
- DOMContentLoaded 事件
DOMContentLoaded 事件 字面上看,它会在dom加载完成后触发. 与window.onload事件非常相似,但有一定区别: DOMContentLoaded 事件是在文档完全加载和解析之 ...
- ipmitool命令
1.remote access control powerIpmitool -I lanplus -H 192.168.0.10 -U username -P Password chassis pow ...
- PPT页面动画制作
因为武汉新型冠状肺炎的影响,今年自从2月3号开工以来,就在家办公.我的任务刚好是安排做PPT,虽说之前做过PPT,但大家都知道,作为一个IT测试工程师,更多的是测试工作,只有在培训,还有年终汇报的时候 ...
- Caffe2 创建你的专属数据集(Create Your Own Dataset)[9]
这一节尝试把你的数据转换成caffe2能够使用的形式.这个教程使用Iris的数据集.你可以点击这里查看Ipython Notebook教程. DB数据格式 Caffe2使用二进制的DB格式来保存数据. ...
- Linux:vi & vim(待学)
VI编辑器_终端编辑器 目标 vi简介 打开和新建文件 三种工作模式 常用命令查询 1 简介 1.1 学习vi的目的 在工作中, 要对 服务器上的 文件进行 简单 的修改, 可以使用 ssh 登录到远 ...
- [CMake笔记] CMake向解决方案添加源文件兼头文件
回顾 在上一篇笔记里总结的时候说到,aux_source_directory这个函数在添加源码文件时,是不会把头文件添加进去的,这里就介经一下另外一个方法,也是我一直使用的. 添加文件*.cpp与*. ...
- vector的clear和swap
vector的clear()操作只是清空vector的元素,而不会将内存释放掉 vector<int> vec1{ 1,2,3,4,5 }; vec1.clear(); cout<& ...