接口测试的必要性
1、行业成熟方案
2、更早份发现问题
3、更快的质量反馈
接口测试不能替代UI测试
1、接口测试有很多优点,但是保证的好似后端的质量,不能解决移动端的额质量
2、大前端工程师的产出质量只能通过UI测试保证
开发团队组成
大前端研发团队:
前端工程师:HTML、JS、CSS、Vue、React
移动端开发工程师:Java、Kotlin
跨端研发工程师:React Native、Flutter、Weex
后端研发团队:Spring boot
网络协议
网络接口层:使用什么网卡,是无线网卡还是虚拟网卡
网络层:使用什么路由来转发数据包 IP
传输层:使用什么协议保障传输质量 tcp / udp
应用层:将用户的操作通过应用程序转换成为服务 http
tcp与udp的区别
TCP:面向连接、错误重传、拥塞控制,适用于可靠性的场景
UDP:不需要提前建立连接,实现简单,适用于实时性高的场景。
Restful软件架构风格
Restful:Representational State Transfer
借助于http协议的基本请求方法代表资源的状态切换
post:新增或者更新
get:获取资源
put:更新资源
delete:删除资源
RPC协议
RPC协议:Remote Procedure Call,以本地代码调用的方式实现远程执行。
Dubbo:
Java上的高性能RPC协议,Apache开源的项目
底层应用层协议支持dubbo缺省tcp协议、http、hessian、thrift、grpc等
gRPC:
高性能通用RPC框架,基于Protocol BUffers
PB是一个语言中立,平台中立的数据序列化框架。Google开源项目
Thrift:与gRPC类似的多语言RPC框架,Apache开源项目
网络监听:TcpDump + WireShark
代理Proxy
推荐工具:手工测试charles[全平台]、安全测试burpsuite[全平台java]
自动化测试:mitmproxy
其他代理:fiddler[仅windoes]、AnyProxy[全平台]
协议客户端工具:curl、Postman
tcpdump
作用:监听网络层的数据包(注意⚠️ :使用这个命令需要是root的权限)
参数:
-x 十六进制展示
-w file 保存文件
表达式:
ip tcp 协议
host 主机名
port 80
src 来源dst目的
and or()逻辑表达式
使用tcpdump + WireShark抓取访问百度的数据包
sudo tcpdump host www.baidu.com -w /Users/xxxxxx/Desktop/tcpdump.log # 开启监听模式
curl http://www.baidu.com # 请求数据
停止tcpdump
使用wireshark打开/Users/xxxxxx/Desktop/tcpdump.log
http协议组成
target:url protocol host port
request:
request: get 、post、put、delete、head
header:host cookie user-agent
get query
post body: json xml form
response:
status line
header
body
使用curl as curl命令
优势:
把浏览器发送到请求真是的还原出来
附带了认证信息,所以可以脱离浏览器执行
可以方便开发者重放请求、修改参数调试、编写脚本
步骤:
1、通过浏览器的开发者工具,获取curl中的URL
2、复制的终端,直接回车,即可以发送请求
客户端模拟请求工具
nc tcp/udp协议发送
curl 最常见使用的http请求工具
postman综合性的http协议测试工具
代理工具、IDE工具、浏览器插件工具
curl常见用法
url=hrrp://www.baidu.com
get请求 curl $url
post请求 curl -d ‘xxx’ $url
proxy使用 curl -x ‘http://127.0.0:8080’ $url
重要参数
–help 帮助命令
-H “Content-Type: application/json” 消息头设置
-u username:password 用户认证
-d 要发送的post数据@file 表示来自于文件
–data-urlencode ‘page_size=50’ 对内容进行URL编码
-G 把data数据当成get请求的参数发送,长与–data-urlencode结合使用
-o 写文件
-x 代理http代理 sock5代理
-v verbose 打印更详细日志
-s 关闭一些提示输出
| jq 使得返回值更加清晰
代理工具:charles、burpusuite、fiddler、mitmproxy、zap、nc
高性能代理服务器:squid、dante
反向代理:nginx
流量转发与复制:em-proxy、gor、iptable、niginx
sock5代理:ssh -D参数
nc演示代理实现
mkfifo /tmp/fifo
nc -lk 8080 < /tmp/fifo | sed -l -e 's/^Host.*/Host:site.baidu.com/' | tee -a /tmp/req.log | nc site.baidu.com 80 | tee -a /tmp/res > /tmp/fifo
代理工具具备的功能
代理功能:http/https、socks5
请求模拟工具:拼装请求、重放请求、重复请求
网络环境模拟:限速、超时、返回异常
mock:请求修改
fake:用测试环境代理真实环境
推荐工具
charles:开发/测试工程师必备
mitmproxy:测试开发工程师必备
zap:测试工程师安全测试工具
burpsuite:黑客必备渗透测试工具
fiddler:跨平台支持不友好,不推荐
postman:代理功能太弱、不推荐
代理配置步骤
1、配置代理
浏览器端口配置
浏览器代理设置
安装Proxy SwitchyOmega:https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif
2、获取证书
方法一、
方法二、在浏览器中输入shls.pro/ssl (这个是代理工具charles提供的功能,必须在代理成功后才可以使用),回车后就会直接下载。
3、安装证书
4、信任证书
进入“钥匙串”,打开证书,并且把证书“信任”改为“始终信任”
确认添加证书成功
代理配置
1、点击设置,到WLAN
2、长按Wi-Fi
3、进入修改网络
4、修改网络
代理:改为“手动”
代理服务器主机:填写本机IP,mac可以通过ifconfig获取
代理服务端口:填写charles代理的端口
安装证书
1、下载证书
浏览器中输入:http://chls.pro/ssl
2、下载完成后,打开证书。输入证书名后 点击“确定”即证书安装成功。
Android证书信任问题
一、Android 6.0默认用户级别的证书 (可以直接使用)
二、Android 7.0以上需要修改apk包属性
证书配置说明:https://developer.android.com/training/articles/security-config.html
domain-config配置文件更改
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
mock - 数据修改
场景一:修改单一数据
查找对应接口中包含的字段command + F
替换条件
替换数据
数据翻倍替换
思想:在终端使用jq命令将其数据进行翻倍
步骤:
1、生成一个文件,用于存放编辑的脚本
vim /Users/username/Desktop/data_demo
2、复制数据到文件,保存退出(esc + :wq)
3、赋值到变量
_data=$(cat /Users/username/Desktop/data_demo)
4、验证,输出
echo "$_data"
5、叠加data.items和data.tems_size值
_data=$(echo "$data" | jq '.data.items+=.data.items' | jq '.data.items_size+=.data.items_size')
6、验证值
vim /Users/username/Desktop/data_demo