1.HTTP请求
从资源的角度,包括Header和Body两部分:
1.1 HTTP Header
分为:General header 通用报头
Request headr 请求报头
Response Header 响应报头
Entity header 实体报头
Header包含的内容有:
Accept:指定客户端能接收的内容类型,发送端既客户端希望接受的数据类型
Accept-charset:浏览器可接受的字符编码集
Authorization:HTTP授权的授权
Content-type:请求的与实体对应的MIME信息,既客户端实际接收的实体类型。
Referer:先前网页地址,当前网页紧随其后,既来路。
1.2 Content-type
特别说明:Content-type,主要在POST接口中使用,目的:告知服务器端如何处理请求的Data,以决定浏览器将以什么形式,什么编码读取这个文件。
enctype属性:规定在发送到服务器之前应如何对表单数据进行编码,在POST接口中,其值就是Content-type值。
主要有以下类型:
.application/x-www-form-urlencoded:请求默认方式,任何浏览器都支持,数据是以key-value键值对,对数据做序列化处理。
.application/json:好处:前端不需要知道数据格式复杂性,只要标准JSON格式即可,数据可以使复杂的嵌套关系,有多层Data。
.multipart/form-data:向服务器发大量数据,可以使用表单方式,既可以发送文本数据,也支持二进制数据上载。处理:生成一个boundary用于分割不同字段,最后将数据转化为一条信息。
设置建议:
.Restful接口(json格式):一般将Content-type设置为application/JSON;charset=UTF-8
.文件上传:设置为multipart/form-data
.普通表单上传:设置为application/x-www-form-urlencoded
1.3 HTTP协议请求响应模型
采用了三层结构,与《软测之魂》中提到的三层设计法提到的三层结构相同,即分为:用户接口层,内部接口,系统接口。
其中,针对客户端:可以开展功能测试,性能测试,自动化测试
API接口:开展接口测试,功能测试,性能测试,自动化测试
DB层:对开发的sql语句进行性能测试
体会及感悟:客户端发起的请求,其中一部分业务逻辑校验在API层进行实现,比如:名称长度,有哪些字符组成。而数据一致性的校验放在后台进行,比如用户名是否存在.
1.4HTTP与HTTPS区别:
HTTP协议以ASCII码传输,建立在TCP/IP之上,但HTTPS基于SSL/TLS
1.5 cookies
Cookie通常也叫做网站cookie,浏览器cookie或者httpcookie,是保存在用户浏览器端的,并在发出http请求时会默认携带的一段文本片段。它可以用来做用户认证,服务器校验等通过文本数据可以处理的问题。
cookie的用途:
a.会话管理
1.记录用户的登录状态是cookie最常用的用途。通常web服务器会在用户登录成功后下发一个签名来标记session的有效性,这样免去了用户多次认证和登录网站。
2.记录用户的访问状态,例如导航啊,用户的注册流程啊。
b.个性化信息
1.Cookie也经常用来记忆用户相关的信息,以方便用户在使用和自己相关的站点服务。例如:ptlogin会记忆上一次登录的用户的QQ号码,这样在下次登录的时候会默认填写好这个QQ号码。
2.Cookie也被用来记忆用户自定义的一些功能。用户在设置自定义特征的时候,仅仅是保存在用户的浏览器中,在下一次访问的时候服务器会根据用户本地的cookie来表现用户的设置。例如google将搜索设置(使用语言、每页的条数,以及打开搜索结果的方式等等)保存在一个COOKIE里。
c.记录用户的行为
最典型的是公司的TCSS系统。它使用Cookie来记录用户的点击流和某个产品或商业行为的操作率和流失率。当然功能可以通过IP或http header中的referrer实现,但是Cookie更精准一些。
2.PostMan
Chrome浏览器插件,注意:安装POSTMAN前先安装net4.5
2.1PostMan安装包
下载地址:(https://www.postman.com/downloads/?)
2.2PostMan常用测试功能
.Collections:集合,可以管理测试用例
.Enviorment:创建不同测试环境,并依据不同测试环境执行不同测试。
.Tests:对测试请求设计结果检查项,用于验证测试请求(注意是Java Script语言格式)
.Body:构建POST请求,其中有四类数据格式:form-data:key-value格式;
x-www-form-urlencoded
raw:使用JSON格式,使用最多。
binary:导入文件格式。
注意:在PostMan设置URL时,要指定Content-type,默认是x-www-form-urlencoded
3.Jmeter
Jmeter是开源的接口测试工具及性能测试工具,是Apache的工具。
其优点:
1.可以测试数据库的性能,比如:MySQL(关系型),MongoDB(非关系型)
2.测试HTTP协议功能和性能;
3.测试FTP协议功能与性能;
4.支持二次开发,可自定义JAVA组件开发,方便性能代码的统一管理。
3.1Jmeter基本知识
Jmeter3.0需要安装JAVA 7,安装包分源码包src.zip,和绿色编译包*.zip
安装包路径:(https://jmeter.apache.org)
安装完后,配置环境变量:
启动Jmeter:windows下,进入bin目录,执行Jmeter.bin;
Linux下,执行Jmeter.sh
如果启动中闪退,则将系统环境变量中的变量名为JMETER_HOME的系统变量删除,再启动。
3.2 Jmeter中乱码问题解决
1.方法一,修改配置文件Jmeter_properties
Jmeter字符编解码配置:在配置文件Jmeter_properties中,搜索encoding,将其值从ISO-8859-1修改为UTF-8
2.方法二,在Jmeter中,将content_type修改为UTF-8
3.方法三,“线程组-后置处理器-BeanShellPostProcessor”,prev.setDataEncoding("UTF-8")
补充说明:如果浏览器中显示中文出现乱码,则可通过“浏览器”-“设置”-“编码”-“选UTF-8”(IE浏览器设置)
3.3 Jmeter常用功能
3.3.1Jmeter基本功能
1.创建测试计划:使用Jmeter进行测试的开始,也是Jmeter测试元件的容器。
2.创建线程组:其中包含线程数-即并发数,线程启动间隔,循环执行次数,可用于性能测试。
3.取样器(Sampler),即HTTP请求构建,输入web服务器IP,Port,输入HTTP请求的方法,路径及参数数据,完成HTTP请求报文的构造。
注意:数据构造,可以使用参数化方式,具体见下面的参数化描述。
4.监听器:用于测试结果的显示,具体有结果树和聚合报告两种形式。其中,结果树因为消耗资源,仅建议在平时的脚本调试时使用,测试结果主要依赖聚合报告。
以上4步,完成了HTTP请求从创建到完成测试,得到测试报告的整个流程。
3.3.2Jmeter参数化设置
主要目的:避免每一次请求中都使用相同的参数值。通常有两种方式可以实现:
方式1:使用函数助手
在Jmeter中有“选项”-“函数助手对话框”-“_CSV Read”,把要导入的批量数据文件及路径写入,生成字符串,再将该字符串粘贴到URL中即可;或者使用_Random随机函数设置请求中的参数值,后面操作同前。
方式2:"使用线程组右键“添加-配置元件-CSV Data Set Config”,输入要引用的文件,默认路径是Jmeter下的Extras路径,指定变量名(多个变量用,隔开),指定参数文件中变量分割符。
3.3.3如何遍历参数文件中不同数据
通过“线程组”中“线程数”的值来遍历所有数据。
线程数即为并发数,取值与参数文件中的数值个数一致,则可以一次遍历完所有的数据。
3.3.4其他说明
1.使用Jmeter对Post请求测试,要在Body Data中写入Json格式的数据,另在“HTTP信息头管理器”中指定content-type=application/json,否则,当数据包含中文时,会提示415错误,即客户端发送的是错误的媒体类型,直接原因是编码格式不认识。
2.可以使用badboy提前录制脚本,然后导入到Jmeter中,此种方式是快捷得到脚本的一种手段!实际工作中有其使用价值。
3.Jmeter的场景设计,主要通过线程组设置来实现,有些复杂场景与逻辑控制器配置。
场景分为单一业务场景和混合业务场景,缺少任何一种都不能准确评估系统性能,定位系统瓶颈。单业务场景,与实际生产环境差距很大,没有实际指导意义;混合业务场景,结合单业务场景,可以快速定位系统性能快速降低原因,定位性能瓶颈、系统调优。