当前位置: 首页 > article >正文

API接口自动化学习总结

视频:python 做 API接口测试 和 自动化 - 1周入门_哔哩哔哩_bilibili

资料:HTTP协议 - 白月黑羽

要学习接口自动化,先要知道http协议和requests库,后面则是接口手工测试和接口自动化测试。

HTTP协议:

HTTP协议简介:

HTTP 协议 全称是 超文本传输协议, HTTP 协议最大的特点是 通讯双方 分为 客户端 和 服务端 。

HTTP请求消息:

解读下面两个请求消息,分别是get请求和post请求。

GET /mgr/login.html HTTP/1.1
Host: www.baiyueheiyu.com
User-Agent: Mozilla/6.0 (compatible; MSIE5.01; Windows NT)
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
POST /api/medicine HTTP/1.1
Host: www.baiyueheiyu.com
User-Agent: Mozilla/6.0 (compatible; MSIE5.01; Windows NT)
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate

name=qingmeisu&sn=099877883837&desc=qingmeisuyaopin

请求行 request line:是第一行,里面包含了3部分信息: 请求的方法,操作资源的地址, 协议的版本号。

常见的HTTP 请求方法包括:GET,从服务器 获取 资源信息,这是一种最常见的请求。

POST,添加 资源信息 到 服务器进行处理(例如提交表单或者上传文件)。

PUT,请求服务器 更新 资源信息 。 更新 用户姓名、地址 等等

DELETE,请求服务器 删除 资源信息 。比如 要 删除 某个用户、某个药品 等等

什么是url参数?https://www.baidu.com/s?wd=iphone&rsv_spt=1
问号后面的部分 wd=iphone&rsv_spt=1 就是 url 参数,前面是url,每个参数之间是用 & 隔开的。

请求头 request headers:请求头是http请求行下面的 的内容,里面存放 一些 信息。单个请求头的 格式是: 名字: 值  。就是第二行!

消息体 message body:添加、修改的数据信息 通常都是 存放在 请求消息体 中的。WEB API 请求消息体 通常是某种格式的文本,常见的有

  • Json
  • Xml
  • www-form-urlencoded

HTTP响应消息:

HTTP/1.1 200 OK
Date: Thu, 19 Sep 2019 08:08:27 GMT
Server: WSGIServer/0.2 CPython/3.7.3
Content-Type: application/json
Content-Length: 37
X-Frame-Options: SAMEORIGIN
Vary: Cookie

{"ret": 0, "retlist": [], "total": 0}

状态行 status line:状态行在第一行,包含3个部分:协议版本,就是 HTTP/1.1状态码,就是 200描述状态的短语,就是 OK。

常见的状态码有如下几种:

• 2xx:通常 表示请求消息 没有问题,而且 服务器 也正确处理了

• 3xx:这是重定向响应,常见的值是 301,302, 表示客户端的这个请求的url地址已经改变了, 需要 客户端 重新发起一个 请求 到另外的一个url。

• 4xx:表示客户端请求有错误, 常见的值有:400 Bad Request 表示客户端请求不符合接口要求,比如格式完全错误
401 Unauthorized 表示客户端需要先认证才能发送次请求
403 Forbidden 表示客户端没有权限要求服务器处理这样的请求, 比如普通用户请求删除别人账号等
404 Not Found 表示客户端请求的url 不存在

• 5xx:表示服务端在处理请求中,发生了未知的错误。通常是服务端的代码设计问题,或者是服务端子系统出了故障(比如数据库服务宕机了)

响应头 response headers:响应头 是 响应状态行下面的 的内容,里面存放 一些 信息。 作用 和 格式 与请求头类似,即HOST:www.baidu.com这种类似。是第二行。

消息体 message body:和请求消息体一样,WEB API 响应消息体 通常也是某种格式的文本,常见的有:

  • Json
  • Xml
  • www-form-urlencoded

接口测试概述:

接口测试(或者API接口测试),其实就是 对 软件系统 消息交互接口 的测试。

接口测试就是

  • 依据接口规范,写出测试用例,

  • 使用软件工具,直接通过消息接口 对 被测系统 进行消息收发

  • 验证被测系统行为是否正确。

基于 HTTP 的接口测试工具, 常见的 有 Postman、Jmeter等。熟悉 Python 语言, 也完全可以使用 requests 库,自己写代码发送接收HTTP请求,进行测试。

接口测试工作:

接口测试工作,主要包括

  • 获取接口文档,评审文档,了解接口的实现细节

  • 根据接口文档,写出测试用例,

  • 等产品发布后,根据测试用例,使用软件工具,直接通过消息接口 对 被测系统 进行消息收发,验证被测系统行为是否正确

评审 接口文档:接口文档 通常 是由 开发人员提供, 测试人员 根据接口文档编写接口测试用例。

由于开发人员写的接口文档可能存在模糊,错误甚至自相矛盾的情况,所以在写测试用例之前,必须要先对接口文档进行评审,找出里面的问题,和 文档作者进行沟通 ,确保接口文档 基本正确、完善,然后才能动手写测试用例。

编写测试用例

此处有项目要求,最好自己试一试!

requests库 和 session:

具有Python编程的基础了,只需要花1天时间 学习一个库:requests,就可以轻松的自己开发测试工具 收发 HTTP消息。或者使用市面上存在的工具:postman、jemeter。

Requests库简介:

Requests 库 是用来发送HTTP请求,接收HTTP响应的一个Python库。

安装:

执行命令 pip install requests 。Requests可以很方便的发送HTTP请求给服务器。

抓包工具 fiddler:

在做接口测试的时候, 经常需要用到 抓包工具 ,来查看具体的发送的请求消息,和接收的响应消息。fiddler 是 代理式 抓包。fiddler 启动后,会启动一个代理服务器(同时设置自己作为系统代理),监听在 8888 端口上。

需要安装,自己从网上找资源下载即可。安装好以后,通常我们需要设置一下抓包过滤项,否则抓到的包太多,不方便分析。

要 根据目标主机地址过滤 HTTP消息, 在上图所示 左边的红色箭头处, 选择 show only the following hosts

然后,在下边的方框,里面填写要抓取的HTTP消息的目标地址, 可以使用* 作为通配符

localhost; 127.0.0.1;*.sohu.com

然后再点击右边 标签栏里面的 Inspectors 标签,即可进行查看。右边 上半区 对应的请求消息的内容, 右边下半区对应的是响应消息的内容。

浏览器抓包:浏览器可以通过其代理配置,指定使用fiddler作为代理,从而让fiddler抓到包。但是浏览器本身F12打开的开发者窗口,就可以很方便的看到HTTP消息,所以不需要fiddler抓包。

requests程序抓包:要让requests 发送请求使用代理,只需要如下参数进行设定即可

import requests

proxies = {
  'http': 'http://127.0.0.1:8888',
  'https': 'http://127.0.0.1:8888',
}

response = requests.get('http://mirrors.sohu.com/', proxies=proxies)
print(response.text)

手机抓包:进行 API 接口测试的时候,可能需要抓 手机App 和 web服务之间的 HTTP消息,需要设置手机使用 fiddler作为代理。首先确保 手机使用的 WIFI 和 运行fiddler的电脑 必须使用同一个子网。

然后 需要设置fidder, 允许远程机器连接自己,点击菜单option,点击connections标签,勾选 Allow remote computer to connect, 

构建HTTP请求:

使用Requests发送HTTP请求,url里面的参数,通常可以直接写在url里面,比如

response = requests.get('https://www.baidu.com/s?wd=iphone&rsv_spt=1')

构建请求消息头:(第三行!!)每个消息头也就是一种 键值对的格式存放数据,如下所示

user-agent: my-app/0.0.1
auth-type: jwt-token

Requests发送这样的数据,只需要将这些键值对的数据填入一个字典。然后使用post方法的时候,指定参数 headers 的值为这个字典就可以了。然后使用post方法的时候,指定参数 headers 的值为这个字典就可以了,如下

headers = {
    'user-agent': 'my-app/0.0.1', 
    'auth-type': 'jwt-token'
}

r = requests.post("http://httpbin.org/post", headers=headers)
print(r.text)

构建请求消息体:http 的 消息体就是一串字节,里面包含了一些信息。这些信息可能是文本,比如html网页作为消息体,也可能是视频、音频等信息。消息体基本都是文本,文本的格式主要是这3种: urlencoded ,json , XML。一般都是json格式消息体

Content-Type: application/x-www-form-urlencoded

json 格式消息体:json 是一种表示数据的语法格式。 它和Python 表示数据的语法非常像。

构建一个json 格式的字符串:可以使用json库的dumps方法,如下

import requests,json

payload = {
    "Overall":"良好",
    "Progress":"30%",
    "Problems":[
        {
            "No" : 1,
            "desc": "问题1...."
        },
        {
            "No" : 2,
            "desc": "问题2...."
        },
    ]
}

r = requests.post("http://httpbin.org/post", data=json.dumps(payload))

也可以将 数据对象 直接 传递给post方法的 json参数,如下

r = requests.post("http://httpbin.org/post", json=payload)

检查HTTP响应:

检查响应状态码:要检查 HTTP 响应 的状态码,直接 通过 reponse对象的 status_code 属性获取

检查响应消息头:要检查 HTTP 响应 的消息头,直接 通过 reponse对象的 headers 属性获取

检查响应消息体:要获取响应的消息体的文本内容,直接通过response对象 的 text 属性即可获取

 

session机制:

session就是一个数据结构,保存该客户这次登录操作相关信息。同时创建一个唯一的sessionid(就是一个字符串),标志这个session。服务端是通过 HTTP的响应头 Set-Cookie 把产生的 sessionid 告诉客户端的。

接口手工测试:

接口自动化测试;

暂时跳过,可以尝试做一下这个接口,仍然需要另外学习Fiddler、postman接口测试。


http://www.kler.cn/a/590551.html

相关文章:

  • 共享 IP 与独立 IP:长期邮件营销的优劣比较
  • 解决QT_Debug 调试信息不输出问题
  • 【笔记】SQL进阶教程(第二版)
  • SpringBoot3+SaToken+JWT:轻量化权限认证实战指南
  • Launcher3 Hotseat区域动态插入All Apps按钮实现方案
  • Elasticsearch搜索引擎 3(DSL)
  • 数学建模:模型求解方法
  • Windows Qt动态监测系统分辨率及缩放比变化
  • 大动作!百度发布文心大模型4.5、文心大模型X1
  • Shp文件转坐标并导出到Excel和JSON(arcMap + excel)
  • Linux-数据结构-线性表-单链表
  • 基于深度学习的风格迁移实战:从神经风格迁移到CycleGAN
  • 管家婆实用贴-如何设置打印机共享
  • 【Go语言圣经3.1】
  • Python中的Collections库
  • pyqt 上传文件或者文件夹打包压缩文件并添加密码并将密码和目标文件信息保存在json文件
  • 【从零开始学习计算机科学】数据库系统(十一)云数据库、NoSQL 与 NewSQL
  • 面向机器人领域 | AKM Delta-Sigma数字输出无磁芯电流传感器
  • vue/H5的日历组件可简单定制
  • [网络][tcp协议]:tcp报头