一、什么是接口测试:
1)接口测试是测试系统组件间接口的一种测试。(接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是检查数据的交换,传递以及系统间的相互依赖关系等)
2)测试接口是指测试接口的功能、性能和稳定性测试,当然还有大佬级别的安全性测试。另外,工作中接口测试基本是针对HTTP或者HTTPS协议的接口测试。
3)接口,是一个抽象的东西,我们需要利用软件测试理论和方法以及接口文档,从而发现接口的功能和安全性的缺陷。
4)接口包括内部接口和外部接口。1.内部接口:开发人员自己开发的接口;2.外部接口:例如网站调用微信支付和支付宝支付接口;一些模块与模块之间的接口
(接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等(通俗来说就是,检查业务逻辑是否满足业务需求,校验字段是否正常你实际结果是否满足预期)
二、为什么要做接口测试?
1.可以存在越过页面直接登录成功的情况,比如登录输入账号和密码,如果前端页面限制密码是字母,数字,特殊符号或者位数的情况,通过接口你输入中文或者空格或超出位数时,可能也可以登录成功,或者输入金额正常只能大于0,如果通过接口输入1000,后端没有校验,可能金额会增加1000。所有接口测好了,前端随便怎么改数据/结果都没有问题
2,有些参数比如必填项,前端不填没有办法提交的,需要用到接口进行验证,因为接口可以不填必填项提交
3. 比如登录如果不要验证后端,通过fiddler/Burpsuite可以直接绕过前端,比如输入前端输入正确的账号,密码,验证码到服务器的过程中有抓包工具,则抓包工具可以将请求的验证码参数去掉,输入其他账号和密码登录从而绕过前台
三、接口的组成
a、接口说明
b、调用url
c、请求方法(get\post)
d、请求参数、参数类型、请求参数说明
e、返回参数说明
四、接口种类
1)webService接口:是走soap协议通过http传输(请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。可以使用的工具有SoapUI、jmeter、loadrunner等)
2)http(api接口):是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串.(有get和post等方法,使用的工具有postman,RESTClient、jmeter等)
注意:返回的格式xml还需要解析麻烦,http协议时超文本传输协议(不安全),https是安全的超文本传输协议,是安全版的http协议
五、接口测试目标
1.可能发现客户端没有发现的bug(那么也叫隐藏bug)
2.及早爆出风险(保证质量正常上线)
3.接口稳定了,前端随便改
4.最重要检查系统安全性,稳定性
五、接口测试基础之网络基础:
1.网络四要素:(1.独立功能的计算机,2.有通讯设备和通讯线路3.有网络软件支持4.实现资源共享)
2.服务模式:ISP(互联网服务供应商(Internet service provider):如移动,电信,联通)ICP(互联网内容供应商(Internet content provider):新浪,抖音等)
六、网络协议(TCP/IP)
TCP/IP协议是一个协议的集合(类似计算机之间遵守计算机语言可以进行交流),分五层:应用层,传输层,网络层,数据连接层,物理层
OSI协议:国际标准化组织提供服务、并未其上一层提供一个访问接口或界面,不同主机的相同层次称为对等层,对等层之间相互通信需要遵守一定的规则,如通信内容或者方式叫协议
七、常见端口号:
HTTP协议端口号---------------80
HTTPS协议端口号-------------443
Tomcat端口号-------------------8080
telnet端口号---------------------23
FTP端口号-----------------------21
SMTP端口号--------------------25
DNS域名解析协议--------------53
pop3邮件服务器----------------110
八、3次握手4次挥手
ACK报文是用来应答的,SYN报文是用来同步的
DNS 域名解析---------------------解析网站,进入网站里面内容
fiddler 抓包软件,用于测试接口
postman 接口测试工具(以前是谷歌浏览器的插件)
jmeter 市面上最流行的接口和性能测试工具
soapui 可以测自动化和性能,也比较常用
九、接口的类型及状态码
http 接口:基于http协议开发
http常见状态码
200-------OK---------------一切正常,对GET和POST请求的应答文档跟在后面
300-------Multiple Choices-------客户请求的文档可以在多个位置找到(如果服务器要提出优先选择,则应该在Location应答头指明)
301-------Moved Permanently—客户请求的文档在其他地方(新的URL在Location头中给出,浏览器应该自动地访问新的URL。)
302-------Found------类似于301,但新的URL应该被视为临时性的替代,而不是永久性的
303-------See Other------类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取
400-------Bad Request-----请求出现语法错误。
403------Forbidden---------资源不可用。
404-------Not Found---------无法找到指定位置的资源
500-------Internal Server Error—服务器遇到了意料不到的情况,不能完成客户的请求
501-------Not Implemented-------服务器不支持实现请求所需要的功能(例如,客户发出了一个服务器不支持的PUT请求)
505-------HTTP Version Not Supported—服务器不支持请求中所指明的HTTP版本
get和post的区别
get是接在URL地址栏的后面,入参信息完全暴露,可以被直观看到,不安全,请求数据量有限制,
post是数据实在被包含体中(request body中或者说表单中),安全性高,请求数据量较大
HTTP请求头和请求体、相应头和响应体
Cookie:设置服务器使用Set-Cookie发送的http cookie
断点:
请求前断点 1.全部断 2.指定断bpu
请求后断点 1.全部断 2.指定断bpafter
十、postman进行自动化操作
接口自动化操作,我们用的是postman进行自动化操作
1)首先打开postman
1.新建一个集合并用save?进行命名,比如登录:点击右上角齿轮创建环境变量–Manage Environments并命名;并选择环境变量
然后在里面可以在登录这个集合里面进行接口用例操作。
一般我们都是通过获取URL请求地址进行自动化操作
进入开发者工具中的Network中找到接口名称
接口主要请求方式主要有get及post两种
(接口类型一般是x-www-form-urlencoded;charset=UTF-8)—一般不需要自己添加—HTTP)
其中get接入接口里面Form DaTe里面的参数,以键值对的方式直接接在URL后面中间用问号连接,而post的Form DaTe是在请求体的body里面(另外接口入参格式是什么,需要在类型中选择与之对应入参格式)
1)工具中设置变量:{{}}------------2个花括号,花括号里面接入参数变量,并在右上角眼睛处设置全局变量并赋予对应变量对应的值并设置用户名、密码及对应的值,get是将变量接在URL后面,post变是body当中运行
2)通过文件设置全局变量:通过前置处理器(Pre-request Script)设置环境变量(set an environment variable)—
3)直接引入登录接口的cookie设置全局变量—请求头的键输入Cookies,对应的值输入JSESSIONID=…(另外如果运行格式是HXML格式的话,则可以用Cookie设置全局变量,将HXML格式转为CSV格式,cookie不是入参是设置变量)
3.断言:主要有三个:
1.tests[“测试接口的名称”]=responseBody.has(“响应体的结果”)-------文本断言
2.tests[“Response time is less than 200ms”]=responseTime<200----------------通过响应时间来断言
3.tests[“Status code is 200”]=responseCode.code===200------------------------------通过状态码断言
4.执行接口-------点击run执行接口自动化操作
入参需要通过文件来引入(根据文件格式选择对应格式,我们一般是csv格式),上传文件引入参数之后可以,可以点击start run发起请求了