1、较为完整的性能测试的流程
一个完整的性能测试流程:
2、性能测试的基础理论、常见术语
1)LR LoadRunner HP公司提供的一种自动负载测试工具,能预测系统行为,优化性能,是目前业界市场占有率最高的性能测试工具。
2)Transaction 交易(事务) 在测试脚本中定义的、完成一种业务操作的过程,性能测试主要关注定义事务的处理能力及其响应时间。每个测试脚本中根据需要可定义多个事务。
3)TPS 每秒事务数 Transations per Second,系统每秒能够处理的事务数量,是衡量系统处理能力的重要性能指标。交易有两种理解,一种是业务人员角度的一笔业务过程;另外一种是系统角度的一次交易申请和响应过程。前者称为业务交易过程,后者称为事务交易过程的STEP。两种交易指标都可以评价应用系统的处理能力,一般的建议与系统交易日志保持一致,以便于统计业务量或者交易量。
4)ART 平均响应时间 Average Response Time,各事务响应时间的统计平均值,是用户视角的软件性能的主要体现。计算的是端到端的时间,说的通俗一点,从点击Web页面中的某个控件,到从数据库返回数据到客户端,整个过程都被计算在交易的响应时间内。交易响应时间的指标包括最小响应时间(Min)、平均响应时间(Avg)、最大响应时间(Max)、90%交易的最大响应时间(90%)等。
5)VU 虚拟用户 LoadRunner中特定术语,为模拟现实中的实际用户,测试软件使用虚拟用户代替真实的用户。
6)Scenario 场景 LoadRunner中专门术语。它是所有测试资源包括测试脚本、运行设置、运行用户数等的集合。在这个场景中,可以定义并发用户的数目,定义要运行的脚本,或者说运行的流程类型。在一个场景中,可以是单个流程,也可以是多个流程的混合。
3、性能测试类型
a、单交易基准测试
b、单交易负载测试
c、混合压力测试
d、稳定性测试
e、可靠性测试
f、全链路测试
4、HTTP、TCP协议相关知识
网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层。
5、连接池、线程相关知识
连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。
进程与线程的区别:通俗点讲,打开相当于打开了一个进程、聊天、发文件、接视频属于一个个线程。
二、工具篇1、Jmeter
①、Jmeter的工作原理是什么?
jmeter可以作为web服务器与浏览器直接的代理网关,以便捕获浏览器的请求和web服务器的响应,如此就可以很容易地生成性能测试脚本。有了性能测试脚本,jmeter就可以通过线程来模拟真实用户对web服务器的访问压力。这与LoadRunner的工作原理基本一致
②、常用的元件、各自的作用是什么?
1.测试计划(Test Plan)是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
2.线程组(Thread Group)代表一定数量的并发用户,它可以用来模拟并发用户发送请求。
3.取样器(sampler)定义实际的请求内容,被线程组包含,我们主要用HTTP请求。
4.监听器(Listener)
5.逻辑控制器(Logic Controller)
6.断言(Assertions)
7.配置元件(Config Element)
8.前置处理器(Pre Processors)和后置处理器(Post Processors)
9.定时器(Timer)
2、Loadrunner
3、其他开源/商业性能测试工具
比如:Ngrinder、Locust、Wrk、Artillery等;
4、前端、服务器、数据库性能监测工具
nmon、spotlight、德鲁伊
三、系统架构篇1、服务集群
服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。
2、负载均衡
负载均衡原理、实现方式
1)http重定向协议实现负载均衡
原理:根据用户的http请求计算出一个真实的web服务器地址,并将该web服务器地址写入http重定向响应中返回给浏览器,由浏览器重新进行访问。
2)dns域名解析负载均衡
原理:在DNS服务器上配置多个域名对应IP的记录。例如一个域名www.baidu.com对应一组web服务器IP地址,域名解析时经过DNS服务器的算法将一个域名请求分配到合适的真实服务器上。
3)反向代理负载均衡(Nginx)
原理:反向代理处于web服务器这边,反向代理服务器提供负载均衡的功能,同时管理一组web服务器,它根据负载均衡算法将请求的浏览器访问转发到不同的web服务器处理,处理结果经过反向服务器返回给浏览器。
4)IP负载均衡
原理:在网络层通过修改目标地址进行负载均衡。
5)数据链路层负载均衡
原理:在数据链路层修改Mac地址进行负载均衡。
3、缓存应用
缓存就是在内存中存储的数据备份,当数据没有发生本质变化的时候,我们避免数据的查询操作直接连接数据库,而是去 内容中读取数据,这样就大大降低了数据库的读写次数,而且从内存中读数据的速度要比从数据库查询要快很多。
Redis
1)Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
2)Redis支持master-slave(主-从)模式应用
3)Redis支持数据持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
4)Redis单个value的最大限制是1GB,memcached只能保存1MB的数据。
4、分布式框架
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 pring框架无缝集成。
5、全链路压测
基于实际的生产业务场景、系统环境,模拟海量的用户请求和数据对整个业务链进行压力测试,并持续调优的过程。
四、服务器&中间件篇Tomca
1)、参数说明
-server:一定要作为第一个参数,在多个CPU时性能佳
-Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些
-Xmx:java heap最大值,使用的最大内存
上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。-XX:PermSize:设定内存的永久保存区域
-XX:MaxPermSize:设定最大内存的永久保存区域
-XX:MaxNewSize:
-Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.
+XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
-Xss:每个线程的Stack大小
-verbose:gc 现实垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一
-XX:+UseParNewGC :缩短minor收集的时间
-XX:+UseConcMarkSweepGC :缩短major收集的时间
提示:此选项在Heap Size 比较大而且Major收集时间较长的情况下使用更合适。
2)、Tomcat 自身的启动设置
在%tomcat_home%/bin目录下的” catalina.bat”(Linux环境为”catalina.sh”)
打开编辑此文件,在”echo Using CATALINA_BASE: %CATALINA_BASE%”前加上:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms4096m -Xmx4096m -XX:PermSize=128M -XX:MaxPermSize=256m -XX:NewSize=256m -XX:MaxNewSize=512m完整片断如下:
echo 添加 JAVA_OPTS="-server -Xms4096m -Xmx4096m -XX:PermSize=128M -XX:MaxPerSize=256m -XX:NewSize=256m -XX:MaxNewSize=512m"set JAVA_OPTS=%JAVA_OPTS% -server -Xms4096m -Xmx4096m -XX:PermSize=128M -XX:MaxPermSize=256m -XX:NewSize=256m -XX:MaxNewSize=512mecho Using CATALINA_BASE: %CATALINA_BASE%五、数据库篇1、锁
一般可以分为两类,一个是悲观锁,一个是乐观锁,悲观锁一般就是我们通常说的数据库锁机制,乐观锁一般是指用户自己实现的一种锁机制,比如hibernate实现的乐观锁甚至编程语言也有乐观锁的思想的应用。
2、索引:
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
3、读写分离:
为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作。
4、分库分表:
原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。
六、方案篇1、设计性能测试方案需要考虑哪些问题?
时间成本、人力成本、环境&脚本可复用性、实现难度
2、针对某些情况,你会如何设计、优化方案?
可以回答一些自己项目中解决方案。
链接:
本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除
推荐阅读点击阅读☞真的想和大家安利这个UI自动化测试神器!
点击阅读☞面试测试开发岗,需要准备的100道题型
点击阅读☞面试准备阶段必考知识点和美团测开面试题分享
点击阅读☞2020年应聘华为测试岗三轮面试经历分享
点击阅读☞100道接口测试面试题收好了!
戳“阅读原文”一起来充电吧!