软件测试【理论部分】

软件测试

一、mockServer

1、什么是mockServer

Mock:替身
server:服务
即mockServer:测试替身的服务

2、不同角色对mock的使用场景

1)程序员

前端程序员

前端已写好⻚⾯,但是后端的接⼝没写好,那么前端程序员正确的姿势是什么?正确的姿势就是模拟后端。

现在前端程序员来模拟后端返回的产品列表的数据:

启动的命令是:

java -jar moco-runner-0.11.0-standalone.jar  http -p 12306 -c product.json

命令分解:

java -jar 程序名称 http -p 端口  -c 文件名称

程序名称与文件名称,如图所示:

启动成功的标识:

 

以下举例,演示操作过程:

1、下载程序,保持程序在指定文件夹里,如图所示:

 

2、编辑模拟程序,并保存在程序同一文件夹里,如图所示:

 

 3、启动程序,打开命令框,输入java -jar moco-runner-0.11.0-standalone.jar  http -p 12306 -c product.json,并运行,得到运行结果,如图所示:

 4、打开postman,编辑请求信息,并运行,如图所示:

 

 5、如图所示,结果显示,模拟验证成功

 

后端程序员

A给B服务⼀个⻋牌号,那么B返回⻋辆的其他信息,如图所示:

以下是模拟返回的产品列表的数据:

启动的命令是:

java -jar moco-runner-0.11.0-standalone.jar http -p 12306 -c parking.json

模拟过程与前端相似,模拟结果如图所示:

 

 

2)测试

测试过程中,⽆数据,怎么办?
⾃⼰造数据
⾃⼰mock数据
如图所示,建立模拟数据:

 

通过模拟程序的运行(同前端模拟流程),进行断言验证,得到模拟结果,如图所示:

二、性能测试

1、什么是性能测试

性能是⼀种指标,具体可以说就是软件系统或构件对于其及时性要求的符合程度,另外⼀种就是软件产品的⼀种特性,其实就是响应时间

2、不同角色对性能的理解

对⼀个产品⽽⾔,性能的及时性是⽤响应时间或者吞吐量来进⾏衡量

对⽤户⽽⾔,响应时间就是端到端的⽤户基本体验

3、用户视角

在⽤户的⻆度⽽⾔,软件性能就是⽤户操作的响应时间。⼀般⽽⾔关于响应时间业界的说法具体如下:

1-3秒,属于优的表现

3-5秒,可以接受,属于中间的表现

5秒以上,无法接受

所以各位特别注意,如果在实际的⼯作⾥⾯,如果响应时间是⼤于5秒,那么就需要提单搞程序员,让程序员来进⾏具体的优化。

4、运维视角

运维除了关注响应时间外,也会关注更多底层的资源信息,这些资源信息具体可以汇总为如下:

系统资源(CPU和内存)

数据库资源(IOPS资源)

JVM内存是否够⽤

系统的最⼤容量

5、开发视角

开发的关注度会更加的全⾯,毕竟代码都是程序员来编写的,具体可以汇总为如下:

前后交互的响应时间

中间件的参数设置

内存释放泄露

连接数泄露

是否存在不合理的内存使⽤⽅式

是否存在不合理的线程同步⽅式

系统中是否存在不合理的资源竞争

系统架构&代码结构

6、测试视角

⽤户关注的视⻆属于全栈性的,需要考虑⽤户视⻆的产品体验,也要监控以及关注运维视⻆和开发视⻆,所以性能测试中测试的具体⼯作职责可以总结为:

设计合理的场景和测试用例来验证系统的资源数据

验证在高并发的情况下架构是否满足

给架构师以及开发人员提供中间件配置参数的合理值范围

使⽤技术⼿段监控系统,DB,中间件,全链路监控的方式来监控系统资源情况

7、WEB前端

所谓前端的性能⽬前也是性能测试中⽐较热⻔的技术之⼀,关注的点具体汇总为如下:

浏览器的资源加载(HTML解析,图⽚资源加载,CSS⽂件资源加载)

前端缓存技术的优化是否合理性

前端与后端的交互性耗时

8、软件测试常用的术语

1)响应时间(Response Time)

响应时间(Response Time)=⽹络时间+应⽤程序的处理时间

以测试平台为案例:

WebServer:nginx

应用Server:Django服务

DataServer:MySQL

2)并发用户数

性能测试的核心是验证当前系统能否支持现有用户的访问,也就是说系统可以承受在同一时间段多少用户来访问系统,同一时间段,同一发送数

并发用户数:N个用户向服务发送请求

在线用户数:仅仅在线,但是并不代表发送了请求,僵尸用户

并发用户数秒

可以说:不论从业务视角出发,还是服务端承受压力而言,描述的是同一时间同时向客户端发出请求的客户,某些时候也称为“并发测试”。这中间主要体现的是服务端承受的最大并发访问数。

3)吞吐量

主要⽤于数据传输⽅⾯,也就是被测试系统的执⾏效率。该术语⽤于描述数据传输速度(字节/秒或者⽐特/秒),在 某些情况下(如DB层⾯),吞吐量指的是操作的速度,也就是每秒操作数或者每秒业务数。或者也可以说单位时 间内客户端请求的数量,直接体现系统的性能承载能力。

4)性能计数器

WebServer:HTTP连接数

应用Server:服务被部署的系统的CPU和内存资源

DataServe:IOPS

5)IOPS

该术语主要是针对数据库的,也就是每秒发生的输入/输出操作的次数,是数据传输的一个度量⽅法。⽤于磁盘的读写,IOPS值的是每秒读和写的次数

6)使用率

对于服务所请求的资源,使⽤率描述的是所给定的时间区间内资源的繁忙程度

性能测试的过程中,任何的指标不能超过75%,一旦超过75%,说明可能存在瓶颈,超出可以会存在OOM的错误信息。

Out Of Memory(OOM):内存泄露

如⼀个业务中,会使⽤⼤量的内存资源,总的内存资源是4G,在⼀定数据量的情况下执⾏该 业务形态,内存使⽤率从100M⼀直占⽤到3G,然后随着业务形态内存资源得到释放呈下降的趋势,那么可以说内 存使⽤率最⾼为75%。

7)思考时间

思考时间英文名称是Think Time,也称为休眠时间,在业务视角,思考时间指的是用户在进行操作时,每个请求之间的间隔时间。

8)TPS/QPS

事务指的是某个操作或者是⼀组操作的组合,

如登录的事务那么就是输⼊账户和密码,点击登录按钮跳转到登录成 功的⻚⾯并且信息都加载出来。

TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。

QPS指的是每秒查询率

如DB服务器在规定时间内处理流量多少的衡量标准。

9、软件测试理论

1)资源调度

CPU密集型:应⽤程序执⾏繁重的计算,通常运⾏时间⽐较⻓,会占⽤⼤量的CPU

IO密集型:应⽤程序执⾏I/O,计算不多,会占⽤⼤量的内存资源

系统的最小粒度是线程,也就是说系统调度中粒度最细的就是对线程的调度。

线程优先级:先进先出

优先级高的优先处理

默认的优先级是5

执行的速度快的优先级越高

2)等待调度

 

3)性能测试模型

性能测试模型也可以理解为性能测试步骤,具体汇总为如下:

测试前期准备

包括场景(登录、产品列表、AP2执行)、目标(由测试主导,再由开发、架构、产品、CTO、其他测试等达成一致)、

测试工具技术引入

——up——CR、QTP、QC

Jmeter——二次开发——形成平台(阿里)

locust——线程——蝗虫(网易)

自己开发工具

性能测试计划

人力、做什么、什么时候开始与结束、使用什么技术

测试设计与开发

设计:工具/代码如何写

开发:具体的脚码

测试执行与管理,数据收集

根据配置的场景执行,收集相关数据(数据库资源——IOPS,limux——CPU、memory,nginx——连接数,工具或代码响应时间、吞吐量等的数据)

测试分析

4)性能测试的方法

验收负载测试

在QA的环境模拟⽣产运⾏的业务压⼒和使⽤场景组合,测试系统的性能是否满⾜⽣产环境的性能诉求。

负载测试

在被测系统上持续不断的增加压⼒,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使⽤已达到饱和状态。

核心是找到系统的处理极限,为系统调优提供数据,从⽽达到了解系统性能的容量

压力测试

该⽅法是指系统在一定饱和状态下,具体如CPU,内存等饱和使⽤的情况下,系统能够处理的会话能⼒,以及系统是否会出现错误,⽐如TimeOut,OOM,OverStackExpection(堆栈异常)。

压力测试的特点:

检查系统在处于压⼒情况下时应⽤的性能表现

等价于负载测试,使系统的资源处于⼀个瓶颈的状态(建议CPU和内存在75%以上)

这种⽅式⼀般⽤于测试系统的稳定性

配置测试

被测环境软硬件环境参数的调整,达到最优的分配原则。

并发测试

模拟⽤户的并发访问,测试多⽤户并发访问同⼀个应⽤时是否存在死锁或者其他的问题

并发测试的特点是:

发现系统中可能隐藏的并发访问的问题

关注系统可能存在的并发问题,如内存泄露,线程锁,资源争⽤情况

使⽤的测试⼯具如profiler等

并发问题,如图所示:

可靠性测试

给系统加载⼀定的业务压⼒,让应⽤持续运⾏⼀段时间,测试系统在这种条件下是否能稳定运⾏。

5、故障演练

6、容灾恢复测试

posted @ 2022-02-14 16:43  无耿  阅读(59)  评论(0编辑  收藏  举报