3.1 HTTP协议简介
超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。从2007开始到2014为止,经过多年的努力,RFC2616和RFC2617已经被废弃,被新的RFC7230-RFC7239共10个文档所代替。
下面对HTTP协议的介绍都是基于最新的RFC7230-RFC7239。
HTTP报文格式(免费领取Python自动化学习资料 工具,面试宝典面试技巧,加QQ群,1140267353,群内还会大佬技术交流)
1.请求方法
传统HTTP请求方法:
RESTful HTTP请求方法:
状态码
首部
3.2 HTTP Request(GET)
配置项
Web Server:
1.Protocol [http]:
若为HTTP协议可以不填写(默认为HTTP);若为HTTPS协议可以填写“https”;还可以为FILE协议(本地文件传输协议);
2.Server Name or IP:
HTTP/Web服务器的域名或IP地址,本机可以使用localhost或127.0.0.1表示;
3.Port Number:
HTTP/Web服务器的监听端口,若为HTTP协议,默认端口为80;若为HTTPs协议,默认端口为443。使用默认端口可以不填,非默认端口必填。
HTTP Request:
1.Method:
请求方法,测试GET请求,请选择“GET”。
2.Path:
HTTP请求行中的request-target,可以使用绝对地址或相对地址。
比如: http://www.test.com/ecshop/index.php (绝对地址)
/ecshop/index.php(相对地址)
注意: 若使用绝对地址,则会覆盖“Web Server”中的配置。
3.Content-encoding:
通常用于在发送POST、PUT、PATCH请求时对message-body进行内容编码,以防止请求出现乱码或服务器无法正确处理请求。
注意其与请求的首部字段“Content-encoding”无关。
4.Redirect Automatically:
自动重定向。在JMeter中不记录重定向的过程,只能看到最终的重定向请求。
5.Follow Redirects:
跟随重定向。在JMeter会详细记录重定向的过程,可以看到多个重定向请求。
其中4与5是互斥的。
比如,使用http://www.sina.com/访问新浪,会有两次重定向:
第一次请求: GET http://www.sina.com/ 重定向返回: Location: http://www.sina.com.cn/
第二次请求: GET http://www.sina.com.cn/ 重定向返回: Location: https://www.sina.com.cn/
第三次请求: GET https://www.sina.com.cn/
若设置自动重定向,在查看结果树中只能看到最终的请求:GET https://www.sina.com.cn/
若设置跟随重定向,可以看到全部的三次请求。
6.Use KeepAlive:
勾选在请求中加入首部字段“Connection: Keep-Alive”,否则设置为“Connection: Close”,默认为勾选。
7.Use multipart/form-data:
是否以multipart/form-data传输message-body。
8.Browser-compatible headers:
勾选此项,在使用multipart/form-data时,会抑止Content-Type与Content-Transfer-Encoding首部字段,仅发送Content-Disposition首部字段。
请求参数放置的位置
1.可带查询字符串的请求方法
GET请求带查询字符串是最常见的,除此之外,DELETE、POST、PUT、PATCH也可以携带查询字符串,不过处理的方式不同:
a.GET、DELETE会将查询字符串附加在请求request-target之后;
b.POST、PUT、PATCH将查询字符串作为message-body单独发送。
2.查询字符串生成
a.直接放在Path配置项中(?后的一串字符,但不包括片段信息,各name=value通过&连接,name=可选)
比如,Path设置为:/ecshop/upload/goods.php?act=price&id=9&attr=227&number=1&1551081863462462
则查询字符串为:act=price&id=9&attr=227&number=1&1551081863462462
b.由“Parameters”选项卡中参数列表的“name/value”名值对生成(以name=value形式通过&连接)
比如:
Name Value
username zhangsan
password 123456
则生成的查询字符串为:username=zhangsan&password=123456
c.根据“Parameters”选项卡中参数列表的“name/value”名值对生成字符串并追加到Path中的查询字符串末尾(两者以&连接),
此规则仅对于GET请求有效。
比如,Path设置为: /index.php?cc=3
参数列表中的“name/vaue”名值对为:
Name Value
a 1
b 2
则生成的查询字符串为:cc=3&a=1&b=2
3.无名参数处理
对于POST、PUT与PATCH方法,若没有上传文件,并且参数没有对应的参数名,则将参数值之间连接起来作为message-body。
这些值的末尾不会加入行结束符,可以调用KaTeX parse error: Expected group after '_' at position 2: {_̲_char(13,10)}来插…{__char(13,10)}
line2
则message-body为:
line1
line2
对于其他请求方法比如GET,若参数没有参数名,则JMeter会忽略该参数。
4.当请求只有未命名的参数(或根本没有参数)
可以将请求参数放入“Body Data”选项卡中(也可以放在Parameters选项卡中)。一般用于发送如下类型的请求:
a.GWT RPC HTTP
b.JSON REST HTTP
c.XML REST HTTP
d.SOAP HTTP
在“Body Data”模式下,除了最后一行之外,每行末自动附加CRLF。要在最后一行数据之后发送CRLF,只需确保其后面有空行即可。
5.POST、PUT与PATCH方法的请求,message-body可以是如下之一:
a.在“File Upload”选项卡中,不设置“Parameter Name”,设置“MIME Type”为Content-Type;
b.在“Parameters"选项卡中,不设置“Name”;
c.将请求参数放在“Body Data”选项卡中。
6.参数的Content-Type设置
a.参数仅放在“Parameters”选项卡中,默认为“application/x-www-form-urlencoded”;
b.参数放在“Body Data"选项卡中,默认为“text/plain”;
c.参数仅放在"Files Upload”选项卡中,默认为“multipart/form-data”;
d.参数放在“Parameters”与“Files Upload”两个选项卡中,默认为“multipart/form-data”。
若要指定Content-Type,可以在取样器请求下添加一个HTTP首部管理器,并在其中设置Content-Type首部字段与值域。
3.3 应用案例
测试案例说明
1.接口说明:
查询被购买商品的总金额接口。
2.请求方式:
HTTP GET请求。
3.接口地址:
/ecshop/upload/goods.php
4.请求参数:
4.1输入参数:
4.2请求示例:
GET /ecshop/upload/goods.php?act=price&id=9&attr=227&number=1&1551081863462462 HTTP/1.1
Accept: /
X-HttpWatch-RID: 22945-10042
Referer: http://localhost/ecshop/upload/goods.php?id=9
Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: localhost
Connection: Keep-Alive
Cookie: ECS[history]=9; ECS[visit_times]=2; ECS_ID=2a50bfdc24b5443814e73a5783912e21a55af811
5. 返回参数:
5.1响应参数:
5.2响应实例:
HTTP/1.1 200 OK
Date: Mon, 25 Feb 2019 08:16:27 GMT
Server: Apache/2.2.4 (Win32) PHP/5.2.4
X-Powered-By: PHP/5.2.4
Cache-control: private
Content-Length: 50
Keep-Alive: timeout=5, max=86
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
{“err_msg”:"",“result”:"\uffe52298\u5143",“qty”:1}
测试步骤
1.在“Test Plan”节点上右键,选择Add–>Threads(users)–>Thread Group;
2.在“Thread Group”节点上右键,选择Add–>Sampler–>HTTP Request;
3.在“HTTP Request”节点上右键,选择Add–>Listener–>View Results Tree;
4.选中“HTTP Request”对HTTP请求进行配置;
5.点击“Save”,保存测试计划;
6.点击“Start”,运行JMeter测试。
HTTP GET请求的参数有两种配置方法:
1.放在Path配置项中:
2.放在Parameters选项卡中:
最后
俺叫小枫,一个成天想着一夜暴富的测试员
(1140267353)一起成长一起加油的伙伴群!软件测试,与你同行!
群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!
点赞评论关注不迷路!!!【三连ღ】,有问题也可私聊哟~(*╹▽╹*)