|
知识路径: > 测试技术的分类 > 应用负载压力测试 > 负载压力测试实施 > 测试环境、工具、数据准备 > 自己动手编写测试工具 >
|
考试要求:掌握
相关知识点:2个
|
|
|
|
这个系统不仅能够测试静态HTML页面的响应时间,而且能够模拟真实运行情况测试动态网页(包括ASP、PHP、JSP等)的响应时间,为服务器的性能优化和调整提供数据依据。
|
|
|
为了能够模拟大量用户同时访问Web动态页面的情况,必须要解决下面两个问题:
|
|
|
. 测试工具需要模拟出大量用户同时访问Web的情况;
|
|
|
. 测试工具需要模拟出单个用户访问Web时个性化的请求参数。
|
|
|
本性能测试系统主要由两部分构成:性能测试数据文件和性能测试程序。其中,性能测试数据文件包含着用户访问Web的URL请求格式和大量用户访问系统的请求数据(例如用户名和密码等)。实际测试中,性能测试程序将开设多个进程模拟大量用户对Web的访问,每个进程从性能测试数据文件中随机地读出一组访问数据,然后发起对Web服务器的访问,等待Web服务器应答。测试结束后,性能测试程序将给出对于所有请求的平均系统响应时间。由此,本性能测试工具能够真实地模拟大量用户同时访问Web的情况。
|
|
|
在实际运行的Web应用系统中,用户访问动态页面时传递的query字符串中的参数是互不相同的。为了逼真地模拟实际情况,性能测试系统应该在一段特定的时间内,对待测页面同时发送多个请求,每个请求的query参数互不相同,在发送的同时开始计时,直到收到系统的响应,计时停止,最后对所有请求的响应时间进行分析,就可以得到系统性能的定量估计。系统结构如下图所示。
|
|
|
|
|
|
|
|
|
|
模板文件为纯文本文件,包含单个用户访问Web发送的URL,每行格式如下:
|
|
|
GET(POST)http://host:port/path/filename?xxx=@1@&@2@
|
|
|
其中GET或者POST表示参数传递的方式,query字符串中的@是本系统特设字符,表示@及其后面的数字需要被数据文件中对应的参数数据所取代。两个@之间为参数序号,只能为数字,在整个模板文件中相同的参数序号代表相同的参数。
|
|
|
数据文件是用户访问动态页面时传递的query参数集合,为纯文本文件,参数数据与模板文件中@号及其后面的数字相对应,之间用空格隔开,每组一行。
|
|
|
测试Web应用系统时,性能测试程序将开设c个进程,每个进程可以串行地开设n个会话,每个会话模拟一个真实用户,按照模板文件中提供的访问Web系统的格式,从数据文件中读取一组query参数,然后对Web系统发起请求;与此同时,程序开始计时,直到收到系统的响应,计时停止,系统统计接收的字节数,将结果写入结果文件,本次会话结束,这个进程开始一个新的会话,如此循环n次。测试结束后,结果处理程序对结果文件中每个请求的响应时间进行统计分析,给出系统的综合性能评估。
|
|
|
从上面的分析可以看出,本系统发送请求的并发度是c,即在测试的时间段内,对Web应用系统同时发送的请求有c个;本系统发送请求的串行度为n,一共可以模拟c×n个用户对系统的访问。
|
|
|
|
如下图所示,性能测试程序fork出c个进程,每个进程都开设一个Socket,通过Socket向Web服务器发送请求。为了使测试程序能够快速地向服务器发送请求,程序一开始就将数据文件中的所有数据读入内存,数据使用一个二维数组存放。
|
|
|
|
|
模板文件中的请求格式在程序开始时读入模板数据结构中,模板数据结构定义如下:
|
|
|
|
测试程序运行结束后,生成的结果文件包含着Web服务器对每个请求的响应时间,还包含每个请求返回的字节数。结果文件由结果处理程序处理,计算出Web服务器对所有请求的平均响应时间。
|
|
|