python接口自动化-01简单的接口方法

所有服务依赖于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需要额外安装)

  • https://www.wireshark.org/
  • https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_71/com.ibm.aix.cmds5/tcpdump.htm

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中的功能:

 

  • map remote:切换线上环境与备份环境,或者内部测试环境 Fake方式 不同的请求 -> 不同的结果
  • map local + mirror:把线上的请求变成本地文件请求 Stub 不同的请求->相同的结果
  • reverse proxy:反向代理,把线上的请求 Proxy模式,
  • rewrite:修改行为 mock

清空模拟器浏览器缓存:

adb shell dumpsys package |grep browser

adb shell pm clear com.android.browser

获取接口数据的方法:

  • 抓包:研发没有完善的文档,产品已经上线,或者有了可运行的环境。也可以用来自动生成用例。
  • 接口文档:研发有完善的文档,可以完成基础用例。但是仍然需要抓包了解业务逻辑。
  • 代码级别的自动生成文档方案:Swagger

接口测试工具:

  • curl:http请求描述和模拟的工具标准,所有的工具都会提供curl命令转换的功能
  • postman:交互很强,但是不适合自动化,距离真正的框架还有很大差距。
  • soapui:设计不合理,但是理念很先进。
  • jmeter:但是他的用例管理是针对性能场景的,并不符合标准的用例管理规范,管理case不方便的。jmeter+junit这个组合完善好才可以。
  • requests:推荐
  • httprunner:社区开源框架

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

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(api接口自动化)