1、接口测试必修课
1、接口测试让“ 测试更早介入”
这句话变为现实。
2、接口测试可以测试一些界面无法测试的
范围。
3、发现一些范围更广的bug
,一套服务支持多种终端
。后端,前端web,iOS,安卓。
4、接口测试更容易和自动化系统结合
。开源测试平台。文件上传。
5、搭建接口自动化测试框架
,测试工程师能力的分水岭。
2、什么是接口?
在系统中,所有的数据交互
都是基于接口
来实现的。
接口是系统中提供数据服务的渠道
。
接口是基于网络协议
进行数据的传输。所有的接口均是由服务端来实现
的,与前端UI界面毫无关联
。
接口目前95%以上都是基于HTTP网络协议
来进行数据传输的。
接口模板:网络协议://IP:Port/path?args1=xxx&args2=xxx
所有的接口都会有其指定的URL,一般而言系统的接口都有接口文档进行描述
。包括URL、参数、返回值的格式和内容等。
下发:Request请求
接收:Response响应
通过下发请求——经由网络协议传输至后端特定接口——接口执行运算——生成响应——返回至下发端。
http协议默认端口号为: 80
hhtps协议默认端口号为: 443
3、为什么要执行接口测试?
执行测试是为了尽早和不断地发现系统中存在的缺陷,为了保障软件的质量。
从功能角度而言,通过绕过前端,直接对系统的后端逻辑
进行测试,用于确保后端逻辑的基本的质量。
但凡性能
、安全
的相关测试,都是会基于接口测试来实现的。
在系统中,接口的变更
相对而言非常少
,都是处于基本稳定
的状态。
4、基于Requests+python实现接口自动化
- 搭建环境,安装
Requests库
,通过pip install
进行安装,如果用的是pycharm编译器,需要在工程中额外导入Requests
- 基于Requests库,模拟下发请求,校验接口的正确性。
HTTP网络协议下,请求有制定的方法。主流的有Get、Post、(Input、Delete等)
。
通过对接口文档的阅读,了解Get和Post分别请求于何种接口。一般在数据的查询中,应用Get
,数据的更新和提交中,用Post
。
接口响应状态码:
2** 表示请求成功
3** 表示重定向
4** 表示接口路径错误
5** 表示系统内部异常
5、接口的定义
eg.键盘上的按键:qwer
接口是前后端沟通的桥梁,数据传输通道;
内部接口:服务与服务之间
外部接口:百度地图接口,支付宝接口等
最简单的接口长什么样子:如39.98.138.157:5001/api/demo
Eg. get接口:
Postman接口工具
6、Cookie和session
Cookie:标记为cookie的数据类型,记录网站信息,用户的习惯
Session:服务端用来记录用户的状态
清除cookie
7、curl(请求接口一个方式)复制
例如:
将复制得到的curl粘贴导入到postman里面。
Cookie最重要!
小技巧:
8、接口问题
随着测试脚本臃肿,管理脚本成为难题
团队协作,git管理
公共方法,数据封装
接口前置操作,连接数据库
多接口关联串成场景
协议有限(http,Dubbo)
Postman,jemter,RF已然不能满足现有需求,因有局限性。
——基于python语言、requests库、接口测试思维!
9、接口的请求信息一般从哪里获取
1、开发者工具
2、抓包
3、接口文档(接口地址,接口请求方法,参数,参数类型,请求头,返回值实例等信息)
接口是毫秒级别的?
没有断言的测试用例是没有灵魂的。断言!!!——assert
yaml文件的写法:https://blog.csdn.net/weixin_42353331/article/details/86575418
yaml的安装:pip install pyyaml
问题:代码冗余、不易于维护、复用性差
10、面试过程中遇到的问题
接口测试如何测试,cookie,token鉴权,接口关联——可用变量实现(全局、局部)
接口测试框架搭建无
你在做这些事情过程中遇到过什么问题,怎么解决的——学习反应能力
9、搭建测试框架思路
核心技术:
request,yaml,alluere,数据驱动,unitest,pytest,git,Jenkins持续集成,docker容器等;
收获:
得到一套落地有效的接口自动化方案
接口实操经验
提高思维开发,逻辑处理能力
适用于各种类型的项目,直接上手使用,团队使用,模板,直接写接口自动化用例
代码实例:
import requests
# 指定访问的接口url
url = ‘http://localhost::8080/interfaceTest/login’
# 接口需要传入的参数
para={
‘loginName’:’123456’,
‘pwd’:’123123’
}
# 发送get请求,默认就会返回response
res=requests.get(url,params=para) # res=requests.post(url,data=para)
print(res) # 请求状态码:200等——<Response [200]>
# text和content都是获取响应文本内容的方法
print(res.text)
print(res.content)
print(type(res.text)) #——<class ‘str’>
10、jsonpath
Jsonpath在线解析器:http://www.atoolbox.net/Tool.php?Id=792
Jmeter
Jenkins可做定时任务