软件测试及工具的介绍
软件测试及工具的介绍
一、软件测试基本概念:
软件测试定义:验证软件功能是否满足用户的需求。
目的:验证软件有或没有问题。
原则:顾客就是上帝。以客户为中心,遵循软件测试的规范、流程、标准和要求。
二、软件测试的分类
1.按软件测试阶段:
(1)单元测试:
原则:
1、尽可能保证部没测测试用例相互独立
2、一般由代码的编写人员来实施
(2)集成测试:在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块,子系统或者系统的过程中各部分工作是否达到或者实现相应3技术指标及要求的活动。
(3)系统测试:系统测试是将经过集成测试的软件,作为计算机系统的一个 部分,与系统中其他部分结合起来,在实际运行环境下对计算机系统进行一系列严格有效的测试,以发现软件潜在的问题,保证系统的正常运行。
(4)验收测试:针对用户需求,业务流程的正式测试。确定系统是否满足验收的标准,由用户、客户或者其他授权机构决定是否接受系统。
2.按软件测试手段:
(1)黑盒测试:只检查程序的功能是否能够按照我们需求规格说明的规定能够正常使用,程序能否正常的接受数据,并产生合理的输出黑盒测试主要通过用户的视角,对软件进行测试。
(2) 白盒测试:白盒测试中测试人员要对内部结构是非常了解,白盒测试是对程序的逻辑结构来设计测试用例,用逻辑的覆盖率来衡量测试的完整性。
(3) 静态测试:静态测试是指无需执行被测程序,而是通过评审软件文档或者代码,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写的程序的不足之处,减少错误出现的概率。
(4)动态测试:动态测试是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性。黑盒测试中相关的方法主要是动态测试,而白盒测试中一些测试方法主要是静态测试方法。
(5)手工测试:指由专门的测试人员从用户视角来验证软件是否满足设计要求的行为,更适用针对深度的测试和强调主管判断的测试,如众包测试、探索式测试
(6) 自动化测试:使用单独的测试工具软件控制测试的自动化执行以及对预期和结果进行自动检查。单元测试、接口测试、性能测试更多的是用自动化测试。
三、测试工具(实例来自上海海洋大学软件测试第三小组第二次测试作业)
1.Jmeter:
Apache JMeter是100%的纯java桌面应用程序,被设计为用于测试客户 端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资 源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数 据库和FTP服务器等等。JMeter可用于模拟大量负载来测试一台服务器,网 络或者对象的健壮性或者分析不同负载下的整体性能。同时,JMeter可以帮助你对你的应用程序进行回归测试。通过你创建 的测试脚本和assertions来验证你的程序返回了所期待的值。为了更高的 适应性,JMeter允许你使用正则表达式来创建这些assertions.
例:
添加线程组->添加FTP默认请求->添加FTP请求->添加查看结果树
FTP请求配置:
服务器IP和端口号:
见quick easy ftp服务器配置
登录配置:
见quick easy ftp用户账号管理
测试上传操作:
本地文件内容设置,如图
远程文件内容设置为空:
上传操作执行完成:
最开始选择了get,下载操作,而远程文件为空,无下载资源,故FTP请求 失败。
更改为put操作。
远程文件更新,结果如图:
清空本地文件
远程文件内容如图:
更改操作为get,下载操作
下载成功,本地文件结果如图;
探究下载过程的服务器的实际动作
查看quick easy ftp的服务器日志
为了便于分辨,将线程数改为1
获得一次完整的执行过程
其中开始和结束都为quick easy ftp的欢迎和结束词
修改验证:
发生更改:
解读日志中出现的命令
1.USER命令:(访问命令)
格式:USER<username>
功能:制定登录的用户名,以便服务器进行身份验证
2.PASS命令:(访问命令)
格式:PASS<password>
功能:指定用户口令,该命令必须跟在登录命令之后
3.PASV命令:(模式设置命令)
格式:pasv
功能:该命令告诉FTP服务器,让FTP服务器在指定的数据端口进行监听, 进入被动接收请求的状态
4.RETR命令:(文件传输命令)
格式:RETR<filename>
功能:请求服务器将指定路径内的文件复制到客户端,也即下载指定的文件
5.QUIT命令:(访问命令)
格式:QUIT
功能:关闭与服务器的连接
如果把同时发出5个请求,是执行5次这些指令吗?
线程数设为5
请求成功:
查看日志,5次执行的指令没有变化。
将模式改为上传进行比较
请求成功
查看日志:
可以看到仅更改了一个指令:
6.STOR命令:(文件传输命令)
格式:STOR<filename>
功能:上传一个指定的文件,并将其存储在指定的位置
2.JDBC连接测试
JDBC连接测试用例
测试场景与用例
2.1场景描述
200个用户同时对JDBC发出查询指令
在此情况下数据库管理系统服务器的平均值为122,中值为2,响应时间差异大。响应性能较不稳定。
Sample : 本次测试场景运行200线程;
Average : 平均响应时间 = 122 ms;
Median : 统计意义上的响应时间中值 = 2 ms;
90% line : 所有线程中90%的线程响应时间都小于515 ms ;
95% line : 所有线程中95%的线程响应时间都小于740 ms ;
99% line : 所有线程中99%的线程响应时间都小于926 ms ;
Min : 响应最小时间 = 1 ms;
Max : 响应最大时间 =976 ms ;
Error : 出错率 = 0;
Throughput :吞吐量,每秒42.8个请求。
2.2场景描述
300个用户同时对JDBC发出查询指令
在此场景下,数据库管理系统服务器的平均值为147,中值为2,响应时间还是差异大,响应性能较不稳定。并且响应时间有所增加。
Sample : 本次测试场景运行300线程;
Average : 平均响应时间 = 147 ms;
Median : 统计意义上的响应时间中值 = 2 ms;
90% line : 所有线程中90%的线程响应时间都小于680 ms ;
95% line : 所有线程中95%的线程响应时间都小于872 ms ;
99% line : 所有线程中99%的线程响应时间都小于1167 ms ;
Min : 响应最小时间 = 0 ms;
Max : 响应最大时间 =1243 ms ;
Error : 出错率 = 0;
Throughput :吞吐量,每秒58.1个请求。
2.3场景描述
15444个用户同时对JDBC发出查询指令
在此场景下,数据库管理系统服务器的平均值为2257,中值为1863,响应时间差异有所减小,并且随着用户数的进一步增加,响应时间越来越长。
Sample : 本次测试场景运行15444线程;
Average : 平均响应时间 = 2257ms;
Median : 统计意义上的响应时间中值 = 1863 ms;
90% line : 所有线程中90%的线程响应时间都小于2163 ms ;
Min : 响应最小时间 = 0 ms;
Max : 响应最大时间 =44514ms ;
Error : 出错率 = 43.82%;
Throughput :吞吐量,每秒88.2个请求。
3.http性能测试
3.1建立测试计划
启动JMeter后,JMeter会自动生成一个空的测试计划,用户可以基于该测试计划建立自己的测试计划。
3.2创建线程组
JMeter中 每个测试计划至少需要包含一个线程组,一个性能测试请求负载是基于一个线程组完成的。我们在测试计划右键弹出下拉菜单(添加-->线程(用户)--->线程组)中选择线程组即可。
线程组主要包含三个参数:线程数、准备时长(Ramp-Up时间(秒))、循环次数。
线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数
准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为100 ,准备时长为1 ,那么需要1秒钟启动100个线程。
循环次数:每个线程发送请求的次数。如果线程数为100 ,循环次数为3 ,那么每个线程发送3次请求。总请求数为100*3=300 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本
3.3添加HTTP请求
添加完成线程组后,在线程组上右键菜单(添加--->取样器--->HTTP请求)选择HTTP请求。
一个HTTP请求的配置参数主要包括:
1.名称:本属性用于标识一个取样器,建议使用一个有意义的名称
2.注释:对于测试没有任何作用,仅用户记录用户可读的注释信息
3.服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址
4.端口号:目标服务器的端口号,默认值为80
5.协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http
6.方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等
7.Content encoding :内容的编码方式,默认值为iso8859
8.路径:目标URL路径(不包括服务器地址和端口)
我们要测试的网站是创客贴网站,HTTP协议填https,端口默认是80,请求方法为GET,网址为https://www.chuangkit.com/
然后,设置一个循环控制器来进行对目标页面进行反复压力测试
(可使用Badboy来录制脚本,然后直接导出JMeter的jmx文件,在JMeter运行)
3.4添加监听器
添加察看结果树,右键点击线程组,在弹的菜单(添加--->监听器--->察看结果树)中选择察看结果树。
添加聚合报告,右键点击线程组,在弹的菜单(添加--->监听器--->聚合报告)中选择聚合报告。
添加图形结果,右键点击线程组,在弹的菜单(添加--->监听器--->图形结果)中选择图形结果。
3.5运行
点击绿色三角形按钮就是运行
下图中的415报错为不支持的媒体类型
下图中的429报错为HTTP请求太多
3.6结果对比分析
图形对比
下图为100进程图形结果
下图为200进程图形结果
下图为400进程图形结果
图表底部参数的含义如下:
样本数目:总共发送到服务器的请求数。
最新样本:代表时间的数字,是服务器响应最后一个请求的时间。
吞吐量:服务器每分钟处理的请求数。
平均值:总运行时间除以发送到服务器的请求数。
中间值:代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。
偏离:表示服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布
|
100线程 |
200线程 |
400线程 |
样本数目 |
2141 |
4350 |
11032 |
平均 |
849 |
845 |
818 |
偏离 |
1916 |
1953 |
1830 |
吞吐量 |
2413 |
5693 |
20335 |
中值 |
142 |
137 |
138 |
将图表数据导出制作成条形图可见,随着样本数增加时,平均每线程处理时间和处理时间偏离值并没有多大的变化,可见服务器的稳定性和并发容量良好,而吞吐量在一直上升,在400线程时剧增,可见此时服务器抗压能力不错。
聚合图结果对比
Label |
样本数 |
平均 |
中值 |
90%line |
95%line |
99%line |
最小值 |
最大值 |
异常% |
吞吐量 |
接收KB/sec |
发送KB/sec |
100线程 |
2141 |
849 |
142 |
2552 |
3908 |
9086 |
12 |
21226 |
22.65% |
40.2/sec |
117.35 |
14.72 |
200线程 |
4350 |
845 |
137 |
2669 |
3825 |
9905 |
10 |
22161 |
22.69% |
94.9/sec |
278.02 |
34.73 |
400线程 |
11032 |
818 |
137 |
2540 |
3705 |
9068 |
11 |
23274 |
22.65% |
338.9/sec |
986.14 |
124.06 |
图表含义说明如下:
Label:说明是请求类型,如Http,FTP等请求。
样本数量:也就是图形报表中的样本数目,总共发送到服务器的样本数目。
平均:也就是图形报表中的平均值,是总运行时间除以发送到服务器的请求数。
中值:也就是图形报表中的中间值,是代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。
90%line:是指90%请求的响应时间比。
最小值:是代表时间的数字,是服务器响应的最短时间。
最大值: 是代表时间的数字,是服务器响应的最长时间。
异常%:请求的错误百分比。
吞吐量:也就是图形报表中的吞吐量,这里是服务器每单位时间处理的请求数,注意查看是秒或是分钟。
KB/sec:是每秒钟请求的字节数。
由上图,我们进行对比分析,可见600并发进程的明显处理效果依旧良好,最大、最小响应时间、响应错误率、每秒种请求的字节数相差不远,接受和发送数据增多,说明系统承载力较强,与图形结果所得出的结果基本一致。