SlideShare a Scribd company logo
如何 Hold 住性能测试 —— 胡凯
纲要
↓  性能  ?  快  :  慢  ; 性能测试攻城师 ↑
性能测试分类 – 按对象
性能测试分类 – 按目的
性能测试  -  常用术语
用户数  /  虚拟用户数  /  并发用户数
事务:每秒事务数  /  事务响应时间
点击率
吞吐量
 
HTTP 通讯 -1
HTTP 通讯 -2
HTTP 连接状态
性能测试的执行过程是怎样呢?
性能测试过程   —— 摘自 LoadRunner 帮助文档
如何制定测试方案  1
如何制定测试方案  2
性能测试方案模板 – 例
选择测试工具
脚本的制作
设计场景
 
性能测试的实施
结果分析、性能调优
结果分析示例
怎样做好性能测试
定位性能问题
资源监控
监控指令 nmon rstatd iptraf  htop dstat iostat iopp
监控工具
发挥你的潜能
交流时间

More Related Content

Viewers also liked

Frank's Learning Summary - Evolution of agile testing
Frank's Learning Summary - Evolution of agile testingFrank's Learning Summary - Evolution of agile testing
Frank's Learning Summary - Evolution of agile testingFrank Lee
 
并发编程交流
并发编程交流并发编程交流
并发编程交流
bluedavy lin
 
高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查
bluedavy lin
 
MySQL数据库设计、优化
MySQL数据库设计、优化MySQL数据库设计、优化
MySQL数据库设计、优化
Jinrong Ye
 
天猫大促性能测试实践 耿电
天猫大促性能测试实践 耿电天猫大促性能测试实践 耿电
天猫大促性能测试实践 耿电drewz lin
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
bluedavy lin
 
1号店数据库架构
1号店数据库架构1号店数据库架构
1号店数据库架构Louis liu
 
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化
Jinrong Ye
 
天猫后端技术架构优化实践
天猫后端技术架构优化实践天猫后端技术架构优化实践
天猫后端技术架构优化实践drewz lin
 
Java应用性能测试与分析
Java应用性能测试与分析Java应用性能测试与分析
Java应用性能测试与分析Frank Lee
 
大型网站架构的发展
大型网站架构的发展大型网站架构的发展
大型网站架构的发展drewz lin
 

Viewers also liked (11)

Frank's Learning Summary - Evolution of agile testing
Frank's Learning Summary - Evolution of agile testingFrank's Learning Summary - Evolution of agile testing
Frank's Learning Summary - Evolution of agile testing
 
并发编程交流
并发编程交流并发编程交流
并发编程交流
 
高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查
 
MySQL数据库设计、优化
MySQL数据库设计、优化MySQL数据库设计、优化
MySQL数据库设计、优化
 
天猫大促性能测试实践 耿电
天猫大促性能测试实践 耿电天猫大促性能测试实践 耿电
天猫大促性能测试实践 耿电
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
 
1号店数据库架构
1号店数据库架构1号店数据库架构
1号店数据库架构
 
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化
 
天猫后端技术架构优化实践
天猫后端技术架构优化实践天猫后端技术架构优化实践
天猫后端技术架构优化实践
 
Java应用性能测试与分析
Java应用性能测试与分析Java应用性能测试与分析
Java应用性能测试与分析
 
大型网站架构的发展
大型网站架构的发展大型网站架构的发展
大型网站架构的发展
 

Editor's Notes

  1. 性能测试成长经历分享
  2. 高性能和品质是尊贵的象征,而性能测试则好比派兵攻城一样。 我们先简单区别一个功能和性能 左边一辆二手奥拓,右边一辆敞篷奔驰。 我们来分别列举一下他们的功能和性能的相同点和不同点。 首先,从功能来讲,它们都是小轿车,都具有汽车应有的功能。譬如: 都有四个轮子,有驾驶仓,有照明灯,有方向盘、驾驶系统,有乘坐能力。 可以说,功能上讲,两者差异不多。奔驰除多了敞篷功能之外,还有着优美的曲线和怡人的外观。 但从性能上来讲,两者差异就大了: 1 、奔驰最大时速远超过奥拓,启动时间远快过奥拓 2 、从乘坐的舒适度来讲,奔驰更稳定更舒适 平常生活中很多事情都可以用功能和性能来形容,譬如去食堂打饭: 打饭的人数可以看作事务数,每个人的打饭动作看作一次事务。 每个打饭的队伍看成是服务器的一个处理进程或是 CPU 的一个核。 每位师傅打饭的快慢比作服务器的处理性能。 窗口越多,可以排除的数量越多。好比内存越大,可以容纳的进程数越多一样。 食堂越大,容纳的人越多。好比硬盘越大,能存储的数量越多一样。 这样,凡事都和性能联想在一起,工作起来你会觉得非常有趣。兴趣是激发潜能的一个重要因素。 什么是性能测试: * 验证 * 测量 * 评估 * 调优
  3. 性能测试按被测试的对象可分为 “服务端性能测试”和“客户端性能测试” 续幻灯内容 而这里,我们专注服务端性能测试。 服务端性能测试包括,譬如:站点的访问速度,站点能承受的用户量,站点的业务处理能力和处理速度,等等。 而客户端性能测试包括,譬如:开机启动的快慢,程序启动的耗时,程序处理数据的快慢, 3D 游戏画面的流畅度,等等。 服务端相对客户端的,服务端性能指的是服务端的性能表现。 而客户端则指的是客户端本地的性能表现。
  4. 而按目的可将性能测试分为 压力测试、负载测试、并发测试、稳定性测试、大数据量测试。 我们不必死咬这几个概念,网上或一次资料和会提到“负载测试”和“压力测试”这两个概念。 我认为负载测试偏向于测量系统的处理能力,譬如,性能达标即可。 而压力测试更偏向于加压,模拟足够的压力,测试系统在大压力下的表现,看系统是否会宕机或出现异常。 而并发测试和稳定性测试是目的非常明显的,目的是为了测试系统在处理并发时是否存在性能问题。因为很多情况下系统会在并发访问时出现性能故障,这个涉及到对开发语言的掌握程度和对数据库的熟悉程度。 譬如, Java Servlet 的线程安全性,如果代码写得不好,可能导致代码中的变量被乱用而出现一些非常奇怪的问题。而这种问题只有在大压力或并发情况下才容易被发现。(以前测试可信认证一代时遇到过,前不久测试卫士评分系统时又遇到了) 另外,数据库在写数据时会加锁,如果处理不当会导致出现死锁,进而应用程序无响应。这个在毒霸信息推送发大量单用户泡泡时遇到过。 而大数据量测试,主要目的是为了预知系统未来的运行情况。譬如生成一年的数据,然后测试系统一年后的性能体现。这类测试往往都是在考验一个数据库设计的合理性或一个存储方案的合理性。
  5. 这里给大家介绍性能测试的常用术语。 朗读幻灯
  6. 用户数,一般是指使用系统的真实用户数量。是从业务角度出来引入的概念,譬如: 某系统有注册用户 100 万,在线用户为 2000 。 虚拟用户,一般是指测试工程师在执行性能测试过程中,为了模拟真实用户的压力,使用测试工具模拟出来的用户叫作虚拟用户。 虚拟用户的数量是根据真实用户数计算 或是由统计数据推算出来的。我们常常在做性能测试之前,先去了解真实用户的动作,然后在使用虚拟用户来模仿真实用户去使用系统,以保证测试的真实性和可靠性。 但由于性能测试过程是模拟大量用户进行操作,而用户的行为很难准确的定位并量化,通常虚拟用户和真实用户有一定的换算关系。譬如,统计到系统最高有 2000 用户同时在线,我们在模拟虚拟用户数量时,通过会模拟大于真实用户 10%~50% 的量。详细会有后面“如何制定测试计划”中讲解。 而并发用户 广义是指:时同一时刻或同一时段同时在线的人数, 狭义是指:同一秒或同一瞬间同时处理某事件的人数。
  7. 说起点击率,这个概念被广泛应用到各个领域,含义也各有不同。 广义上点击率为点击频率,譬如某站点单位时间内的点击次数。 也被称为被点击的比率,譬如某网站上刊登了一则广告,点击广告的次数占浏览此网页次数的比值为此广告的点击率。 狭义的点击率是指单位时间内与服务器的交互次数,要与之区别的是每秒事务数和每秒页面浏览数。 事务数是由业务或用户来定义的,而页面浏览数则是根据每秒展示的网页页面数。 比较容易混淆的是每秒页面数和每秒点击数。 注意:打开一个页面,将至少同服务器交互一次。有朋友可能感觉只点击了一下,所以只有一个点击。这种理解是错误的,注意点击并不是我们点击鼠标的点击,而是客户端与服务端的一次交互。 打个简单的比方,有一个测试页面嵌了三个框架,每个框架各嵌一个页面,那个你打开这个测试页面时,至少同服务器进行了三次交互。 实际上有做过性能测试的朋友可能会知道,打开页面只是下载了一个 HTML 文件,然后页面上还有一些其它资源需要从服务器下载,譬如 CSS 、 JavaScript 等,都需要同服务器交互。
  8. 吞吐量,过去多用于形容码头的月装箱量,即码头单位时间内的吞吐能力。 在测试性能领域里,吞吐量用于形容单位时间内的网络流量。 备注一下:在性能测试工具 LoadRunner 中吞吐量表示从服务器返回到客户端的网络流量。 前不久就有位朋友在问我,为什么我测试一个上传了 2M 的文件的场景,而在 LoadRunner 的吞吐量非常低。同防火墙里监控到的数据相差甚远。 这就是因为 LoadRunner 的统计方法与我们理解不一致导致。上传大文件,会导致上行流量大,而上传成功后,可能服务器就返回一个 OK ,下行流量自然很低。也是 LoadRunner 的吞吐量低的原因。
  9. 介绍这张图。 好,介绍完什么是性能测试和性能测试术语后,我们来看下怎样来执行性能测试
  10. 稍稍深入一下,简单介绍一下 HTTP 通讯
  11. 连接状态的监控对性能分析非常有用
  12. 那,我该怎样进行性能测试呢? 这个问题问得好!这是一个初学者常问到的问题。 可以说,无论是功能测试还是性能测试,第一步都需要熟悉系统的业务,了解用户的需求。 只有熟悉了用户需求,才能正确地树立测试目标,制定合理的测试计划。
  13. 我们引用 LoadRunner 帮助文档上的一张图片
  14. 20% 的人成功 ------------------80% 的人不成功 20% 的人用脖子以上赚钱 --------80% 的人脖子以下赚钱 20% 的人正面思考 --------------80% 的人负面思考 20% 的人买时间 ----------------80% 的人卖时间 20% 的人找一个好员工 ----------80% 的人找一份好工作 20% 的人支配别人 --------------80% 的人受人支配 20% 的人做事业 ----------------80% 的人做事情 20% 的人重视经验 --------------80% 的人重视学历 20% 的人认为行动才有结果 ------80% 的人认为知识就是力量 20% 的人我要怎么做才有钱 ------80% 的人我要有钱我就怎么做
  15. 工欲善其事,必先利其器
  16. 以 LoadRunner 为例, Jmeter 、 OpenSTA 也是类似
  17. 动作块代表一次请求,长度代表请求花费的时间。颜色越浅代表响应越快,反之则响应更慢。
  18. 展示一个结果分析过程
  19. 我的心得
  20. 对一位性能测试新人来说,面对系统故障,可能出一时手足无措,不知如何是好 面对外网服务器的异常或故障,我的反应就是 幻灯上介绍的步骤。 首先我会去看下系统监控的数据,查看服务器事项资源是否使用正常,在异常的时段各资源有何波动。从系统资源的使用上往往可见一斑,譬如当时网络不通,系统宕机,磁盘空间耗尽,内存耗尽,带宽占用突然升高,交换机流量满载等等 在监控图表里可以了解到一个大概了,然后让开发帮忙看下系统和程序日志,其它可以初步定位问题了。再结合用户的反馈得以确认。 翻页
  21. nmon rstatd iptraf htop dstat iostat iopp
  22. 综上所述,对各个方位了解渗透之后,接下来就是发挥你潜能的时候了!