1、同步接口:
2、异步接口:不需要等接口的调用结果也可以继续执行。轮询方式。
3、回调接口:
一、代理类型
1、协议:http、https。代理fiddler
2、协议:TCP协议簇,代理:socks4
3、协议:TCP、UDP协议簇,代理:socks5
二、接口测试范围/类型
1、接口功能测
2、接口性能和安全测试
3、接口兼容性测试
三、接口测试的办法:手动、自动
四、HTTP协议与请求、状态
1、HTTP协议:超文本协议
2、get和post的区别:
(1) get请求一般将参数附加在请求目标之后;
Post请求将参数附加在message-body之后;
(2) 幂等性:get请求(幂等性),post请求(非幂等性)
(3) 可缓存:get请求(可缓存),post请求(一般默认不缓存)
(4) Get请求参数可以保存到书签,post不能;
(5) 请求参数大小限制:get请求 协议没有限制,基于安全考虑,浏览器和操作系统对此有要求(post请求 协议没有限制,应用程序可能有限制)
(6) 表单传输数据(get、post):传送文件必须使用post请求。
五、状态码
1、范围:100-599;
2、100-199:表示请求已被服务器接受,还需要下一步动作,常见:101【协议切换】;
3、200-299:请求成功;常见200【请求成功,请求被服务器正常处理】、201【资源被创建】、204【没有内容,put请求更新资源,但没有内容】、206【服务器将请求的部分内容传回】;
4、300-399:重定向。304【从缓存中读取资源】
5、400-499:语法错误。401【未经授权,基本认证、摘要认证】、403【请求被服务器禁用,如权限问题】、404【请求的资源未找到,原因:网页或资源被删除或移动】、405【请求的办法不支持,服务器必须支持的办法:get,head】
6、500-599:服务器发生内部错误。500【服务器内部错误】、502【网关的错误】、503【不支持服务,如:服务器繁忙、停机维护】、504【网关超时】、505【HTTP版本不对】
六、条件请求【状态码300-399】
1、概念:检测请求资源是否被修改。
2、场景:验证缓存的有效性、验证文件的完整性。
3、验证器类型:最后修改时间(Last-Modified)、实体表情“Etag”。
操作:HTTP信息头管理器:If-None-Match(Etag)、If-Modified-Since(Last-Modified)---返回状态码是304。
七、范围请求:允许服务器返回部分请求内容【在传输大数据文件、媒体文件、大数据时非常有用,服务器先将部分请求结果返回,达到持续传输的效果】
1、前提:服务器支持范围请求。标志:Accept-Ranges:bytes.
2、单范围请求:Range:bytes=0-1023;
3、多范围请求:Ranges:bytes=1000-2000,3000-4000;
4、状态码结果:206【返回部分请求结果,请求成功】
5、操作:HTTP信息头管理器:名称:Range,值:1-1023。
八、条件范围请求:在范围请求时,服务器修改文件,这时请求的可能是范围请求,也可能是新的全新请求。
1、操作:HTTP信息头管理器:①名称:Range,值:1-1023。②名称:If-Range,值:(Etag)
九、重定向:客户端在访问服务器地址时,地址URL被移动,服务器会返回一个新的地址让客户端代理进行访问。临时重定向:;永久重定向:301【其他请求可能变成get请求】、308【】。
十、tcpdump协议分析工具
1、linux系统自带的协议分析工具;
2、Ifconfig:查看物理接口;
3、Tcpdump -i eth0:指定接口;
4、Tcpdump -i eth0 -c 5 :指定抓取eth0接口的5个接口;
5、RPF过滤指定数据包,符合过滤条件则输出,不符合则不输出。
①原语:限定词 限定词 IP或数字
src host 192.168.50.5 && dst host 192.168.30.123
②tcpdump ether host 3e:42:d5:22:1d:63,如果是动态地址的话,可以对mac地址进行限制。
③tcpdump tcp port 80,过滤tcp协议的80端口的数据。
6、Tcpdump抓取HTTP请求数据包
①get请求
Tcpdump -s 0 -A ‘tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x4755420’
②post请求
Tcpdump -s 0 -A ‘tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)’
③查看http请求与响应
Tcpdump -s 0 -A ‘tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) !=0)’
二、jmeter介绍
1、六大组件:配置元件、前置处理器、定时器、(取样器)后置处理器、断言、监听器。
2、设置属性:函数助手中的“setproperty”设置属性。也可以使用“后置处理器-JSR223后置处理程序的props.put(name,value)”设置属性。
3、获取属性:1。通过在后置处理器-JSR223后置处理程序使用def pv = props.get(“name”)--log.info(pv)获取属性;2.
4、jmeter属性是全局的。Jmeter变量是局部的。
5、变量的引用:${name}
6、定义变量:测试计划、用户自定义等。也可以在“后置处理器-JSR223后置处理程序”使用vars.put(name,value)字符串类型变量,定义vars.putobject(name,value)非字符串类型变量。
7、获取变量:在“后置处理器-JSR223后置处理程序”使用vars.get(name)获取变量。
8、调试变量和属性:取样器:debug调试取样器。后置处理器:调试后置处理程序进行debug变量和属性。
三、无名参数请求
1、json、xml、rest、soap请求类型都是带有无名参数进行请求。
2、Post请求必须设置content-type。
3、查询字符串:可以放在path(请求目标后面),也可以放在参数中。
4、在parameter(参数)中,name不全为空时,content-type为:application/x-www-for。当name全为空,content-type为text/plian。
5、在消息体数据中,content-type为text/plian。
6、在文件上传中,但name不全为空,content-type为默认设置的content-type。当name不为空,content-type为multipart/form-data
四、下载文件
1、下发get请求获取文件的URL;
2、在JSR223 sample中输入一下内容:
import java.io.*;
byte[] result = prev.getResponseData(); //这个是获取到请求返回的数据,prev是获取上个请求的返回
String file_name = "D:\\BaiDu.jpg"; //代表存放文件的位置和文件名
file = new File(file_name).withOutputStream { out ->
out << result
out.close()
}
五、参数化实现
1、测试计划中的全局变量;
2、前置处理器-用户参数可以实现参数化;
3、配置元件-CSV数据参数化;
4、JDBC连接数据库进行参数化;
5、内置函数可以参数化,如:Random。
六、不同线程组使用不同CSV数据参数文件:使用函数${__threadGroupName}
操作:
1、假设线程为:tg1、tg2、tg3.....tgn;
2、csv文件名称为:tg1.csv、tg2.csv、tg3.csv.....tgn.csv;
3、CSV数据参数设置路径为:C:/Users/linka/Desktop/${__threadGroupName}.csv。其中__threadGroupName就是CSV数据参数的参数化名称。并且线程共享模式选择:“当前线程组”(不是“当前线程”)。
注:CSV数据参数和线程组是同一级。并且线程组名称和csv文件名称一致。
七、不同线程用不同CSV数据参数文件:使用函数${__threadNum}
操作:
1、线程组1有3个线程数:1、2、3
2、线程组2有2个线程数:1、2
3、csv文件名称分别为:t1、t2、t3、t4、t5
4、CSV数据参数:C:/Users/linka/Desktop/t${__threadNum}.csv。并且线程共享模式选择:“当前线程”
注:CSV数据参数和线程组是同一级。
八、JSON断言
1、先CSV中提取名称如user、pwd;
2、在请求中增加json断言,在请求结果中使用:$.user查询键值;
3、在json断言中的“Assert Json Path Exists:$.user”,在“Expected Value:${user}”
4、需要对多个请求结果进行断言时,则需要添加多个JSON断言。