【Jmeter】资源文件接口请求【用于自察】
【Jmeter】资源文件接口请求
转自(http://blog.csdn.net/lluozh2015/article/details/51223498)
公司有一款产品,类似于视频在线学习的网站或论坛
现在计划使用接口请求模拟视频资源文件的请求
请求抓包
资源文件的url地址:
http://Host/video%2Fgao1shuxue-shuliangji.mp4
注:Host地址用Host代替,下同
因为没有写过这类型的接口请求,首先试着在网页端(清除缓冲)输入该url后,查看网络信息:
发现有3个同样的接口进行请求,一个返回值是200,另外两个的返回值是206
让我们看一下206返回码
206 Partial Content
响应是在客户端表明自己只需要目标URL上的部分资源的时候返回的.这种情况经常发生在客户端继续请求一个未完成的下载的时候(通常是当客户端加载一个体积较大的嵌入文件,比如视屏或PDF文件),或者是客户端尝试实现带宽遏流的时候
使用Fiddler进行抓包,查看3个接口请求和响应情况
返回200的接口
返回206的两个接口
观察可知:
该请求分三个线程去分段并发下载,第一个请求是请求这个文件的大小,响应头有个返回参数是access-range为byte的,然后还有一个响应参数是centent-length的为请求的文件总长度的,后面的线程是去分段下载的,响应码为206。响应头中会有centent-range的参数指定开始和结束的字节范围
Response Headers
在Response Headers中,看看几个主要的参数的意义:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
意思:浏览器支持的 MIME 类型分别是 text/html、application/xhtml+xml、application/xml 和/,优先顺序是它们从左到右的排列顺序。
详解:
Accept表示浏览器支持的 MIME 类型
MIME的英文全称是 Multipurpose Internet Mail Extensions(多功能 Internet 邮件扩充服务),是一种多用途网际邮件扩充协议,后来也应用到浏览器
text/html,application/xhtml+xml,application/xml 都是 MIME 类型,也可以称为媒体类型和内容类型,斜杠前面的是 type(类型),斜杠后面的是 subtype(子类型);type 指定大的范围,subtype 是 type 中范围更明确的类型,即大类中的小类
Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的
text/html表示 html 文档
Application:用于传输应用程序数据或者二进制数据
application/xhtml+xml表示 xhtml 文档
application/xml表示 xml 文档
Accept-Encoding: gzip, deflate
浏览器支持的压缩编码是 gzip 和 deflate。
详解:
Accept-Encoding表示浏览器有能力解码的编码类型
gzip是 GNU zip 的缩写,它是一个 GNU 自由软件的文件压缩程序,也经常用来表示 gzip 这种文件格式
deflate是使用了 LZ77 算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法
Accept-Language: zh-cn,zh;q=0.5
浏览器支持的语言分别是中文和简体中文,优先支持简体中文。
详解:
Accept-Language表示浏览器所支持的语言类型
zh-cn表示简体中文;zh 表示中文
q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容,若没有指定 q 值,则默认为1,若被赋值为0,则用于提醒服务器哪些是浏览器不接受的内容类型
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
浏览器支持的字符编码分别是 GB2312、utf-8 和任意字符,优先顺序是 GB2312、utf-8、*。
详解:
Accept-Charset告诉 Web 服务器,浏览器可以接受哪些字符编码
GB2312是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312 编码通行于中国大陆;新加坡等地也采用此编码
utf-8是 Unicode 的一种变长字符编码又称万国码,由 Ken Thompson 于1992年创建,现在已经标准化为 RFC 3629
表示任意字符编码,虽然 q 都是等于 0.7,但明确指定的 GB2312,utf-8 比具有更高的优先级
User-Agent: Mozilla/5.0 (compatible;域名)
使用的用户代理是 Mozilla/5.0 (compatible; 域名)。
详解:
User-Agent(用户代理),简称 UA,是一个特殊字符串头,使得服务器能够识别客户端使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等
Mozilla/5.0:Mozilla 是浏览器名,版本是 5.0
compatible(兼容的)表示平台是兼容模式
Connection: Keep-Alive
Connection表示客户端与服务连接类型
Keep-Alive表示持久连接
发现在200和206返回的请求中,在于请求的Range这个参数的区别
Range为空或者不设定这个参数时,请求的是整个视频资源,如果Range的值为bytes=0-10时(一个较小的值即可),可获取该资源的头信息
Range的值为空时返回的Content-Length为整个请求资源的字节长度,Content-Type为请求资源的类型
Range的值为如bytes=56721-时,请求的是从56721字节到最后字节的资源
Referer为重定向请求地址,现Referer重定向的地址和原地址一样,故可以为空
因此,Jmeter中的HTTP信息头管理器参数可设置可为如下:
使用Jmeter模拟请求中,请求到的资源并没有保存到本机,因为若保存到本机,多并发的时候本机硬盘扛不住,所以一般是不保存硬盘的,loadrunner同样
实现和业务
在做这个资源请求的并发时,可分为两种:
视频请求并发–不下载资源
只对资源的长度进行请求,然后校验第一个请求的返回的响应头中的总长度一致就行,没必要下载
不需要让所有的线程真正下载,服务端的线程池有个最大的线程数限制的,也就是说不管多少线程进来请求下载,在一个时间点上,真正能下载的线程只有最大线程数,因为线程池里面的线程跟CPU一样是根据时间片来调度的,所以在没超过服务端设置的最大连接数时,看着很多线程同时下载时每个线程都在下载,但是一个时间点上只有最大线程数的线程在下载。
因此在测试的时候,首先确认在服务端的线程池开了最多多少个下载线程限制,再启动对应数据的线程进行下载,然后启动其他线程进行请求下载,然后验证请求后能否得到响应,响应是否正确,响应时间
视频请求并发–下载资源压力负载
对所有资源进行模拟下载
但是如果在局域网内测试时,没必要关注网速,因为真正上线后,服务端的带宽一定是瓶颈,故只关注请求的响应即可