所有服务依赖于7层(5层、4层)网络协议/TCP/IP协议
1)协议分析工具:
网络探嗅:(tcpdump需要root权限)
TcpDump+WireShark(tcpdump的图像化分析工具)
Poxy
fiddler(windows)\AnyProxy(全平台)\mitmproxy
charles\burpsuite
分析工具与协议客服端工具:
curl\postman\ chrome devtool
tupdump(mac和linux默认有,windows需要额外安装)
tcpdump port 443 -v -w /tmp/tcp.log #将网络通讯包的内容王如tc.log中,使用wireshask打开看
三次握手
数据传输http
四次挥手
2)代理工具:charles
get与post区别:
1、协议头不同
2、get请求的参数通过追加到url后面(或者头);post请求的参数可以通过body发送
3、get每次请求参数状态每次都不变,post请求参数状态每次都有变化
cookie与session的区别:
session是cookie的表现之一
cookie存放在浏览器端,session存放在服务器端
因为http是无状态的,所有需要cookie\session\token等标记一些状态
打开一个网站会发生什么:
应用层:
browser:cookie\、js、css、界面渲染与交互
网络层:browser发起网络请求、服务器返回响应
HAR自动生成接口测试用例
客户端模拟请求工具
nc
cur
postman调试工具
burpsuite http操纵的黑客级别工具
接口测试常用库和框架:requests(python) , restful(java),httprunner与robotframwork差不多,是配置类的接口测试工具
charles抓包,charles设置:
1、端口设置:Proxy->proxy settings
2、https抓包设置: proxy->ssl proxying setting->add:*
3、抓app包:使用android 6.0,高版本可能不会信任证书
4、小程序本质上是webview的
charles验证:curl www.baidu.com -x 127.0.0.1:7778,可以在charles上看到baidu被抓到
mumu手机模拟器配置:
1)找到模拟器命令:$(which emulator) -list-avds
2)启动指定模拟器:$(which emulator) @nenux5_andrion6_api23_navy
1、代理设置:设置--WiFi--进入链接的wifi中--鼠标左键长按--修改网络--代理--手动--设置服务器主机名和端口号保存即可
2、安装charles的安全证书
fake stub mock相关:
fake stub mock proxy spy
fake:替代real环境,有简化的逻辑
stub:纯预定义数据,不能动态变更 (只能响应指定行为)
mock:可自定义返回()
proxy:挡板,可在原结果上进行修改
spy:监听特定方法的调用
charles中的功能:
清空模拟器浏览器缓存:
adb shell dumpsys package |grep browser
adb shell pm clear com.android.browser
获取接口数据的方法:
接口测试工具:
http://www.httpbin.org/(练习网站)
几个简单的接口测试练习:
curl -k -H 'Cookie: xq_a_token=5806a70c6bc5d5fb2b00978aeb1895532fffe502;u=3446260779' -H 'User-Agent: Xueqiu Android 11.19' -H 'Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4' -H 'Host: stock.xueqiu.com' --compressed 'https://101.201.175.228/v5/stock/portfolio/stock/list.json?_t=1UNKNOWNc60715cb4a61425b311034a49f4aa024.3446260779.1563002521424.1563005246620&_s=8c6b2d&category=1&pid=-1&size=10000&x=1.3&page=1'
import requests
import logging
import json
class TestRequests(object):
logging.basicConfig(level=logging.INFO)
url='https://testerhome.com/api/v3/topics.json?limit=2'
def test_get(self):
r=requests.get(self.url)
logging.info(r)
logging.info(r.text)
#logging.info(r.json())
logging.info(json.dumps(r.json(),indent=2))
def test_post(self):
r=requests.post(self.url,
data={'a':1,'b':'string conten'}, #post使用data,get使用params
headers={"a":'1' , "b":'b2'},
proxies={'http':'http://127.0.0.1:7778','https':'http://127.0.0.1:7778'},verify=False) #使用代理
logging.info(r.url)
logging.info(r.text)
logging.info(json.dumps(r.json(),indent=2))
def test_cookies(self):
r=requests.get("http://www.httpbin.org/cookies",cookies={'a':'1','b':'string conten'})
logging.info(r.text)
def test_xueqiu_kuoter(self):
url="https://stock.xueqiu.com/v5/stock/portfolio/stock/list.json?"
params={'category':'1'}
cookie={'xq_a_token':'5806a70c6bc5d5fb2b00978aeb1895532fffe502','u':'3446260779'}
headers={'User-Agent':'Xueqiu Android 11.19'}
r=requests.get(url=url,params=params,cookies=cookie,headers=headers)
logging.info(r.text)
logging.info(json.dumps(r.json(), indent=2))
assert r.json()['data']['category']==2