大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
接口测试基础学习
(一)http协议基础
协议基础
请求消息
响应消息
(二)接口测试概述
(三)Requests库介绍
(四)抓包工具 fiddler
(五)URL参数
(六)响应消息
(七)Session机制
(八)待更新
问题记录
(一)http协议基础
协议基础
- HTTP 协议最大的特点是 通讯双方 分为 客户端 和 服务端 。由于 目前 HTTP是基于 TCP 协议的, 所以要进行通讯,客户端 必须先 和服务端 创建 TCP 连接。
- 而且 HTTP 双方的信息交互,必须是这样一种方式:客户端 先发送 http请求(request)给 服务端,然后服务端 发送 http响应(response)给 客户端
- 特别注意:HTTP协议中,服务端不能主动先发送信息给 客户端
请求消息报文格式:
请求行 request line
GET /mgr/login.html HTTP/1.1
表示要 获取 资源, 资源的 地址 是 /mgr/login.html , 使用的 协议 是 HTTP/1.1
请求头 request headers
Host: www.baiyueheiyu.com
User-Agent: Mozilla/6.0 (compatible; MSIE5.01; Windows NT)
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
通常请求头 都有好多个,一个请求头 占据一行单个请求头的
格式是: 名字: 值
请求消息体 message body 用于存放数据信息,例如上传和修改信息
如果 HTTP 请求 有 消息体, 协议规定 需要在 消息头和消息体 之间 插入一个空行, 隔开 它们。
请求消息体中保存了要提交给服务端的数据信息。
消息体的格式
WEB API 请求消息体 通常是某种格式的文本,常见的有
Json
Xml
www-form-urlencoded
响应消息报文格式:
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}
状态行
HTTP/1.1 200 OK 里面有5种状态,此处略去
响应头
响应头 是 响应状态行下面的 的内容,里面存放 一些 信息
响应消息体
同请求的消息体
请求消息体一样,WEB API 响应消息体 通常也是某种格式的文本,
常见的有:
Json
Xml
www-form-urlencoded
(二)接口测试概述
接口测试(或者API接口测试),其实就是 对 软件系统 消息交互接口 的测试
消息交互接口 是 软件系统 和 其他软件系统 交互 的那部分。
接口测试就是
- 依据接口规范,写出测试用例
- 使用软件工具(postman,JMeter),直接通过消息接口 对 被测系统 进行消息收发
- 验证被测系统行为是否正确。
(三)Requests库介绍
Requests 库 是用来发送HTTP请求,接收HTTP响应的一个Python库
requests库的中文文档:https://cn.python-requests.org/zh_CN/latest/
Requests可以很方便的发送HTTP请求给服务器。比如
import requests
response = requests.get(‘http://mirrors.sohu.com/’)
print(response.text)
(四)抓包工具 fiddler
待更新
(五)构建http请求
URL参数
https://www.baidu.com/s?wd=iphone&rsv_spt=1
问号后面的部分 wd=iphone&rsv_spt=1 就是 url 参数,每个参数之间是用 & 隔开的。
上面的例子中 有两个参数 wd 和 rsv_spt, 他们的值分别为 iphone 和 1 。
url参数的格式,有个术语叫 urlencoded 格式。
构建请求头
指定参数 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)
构建消息体
当我们进行API 接口测试的时候, 根据接口规范,构建的http请求,通常需要构建消息体。
http 的 消息体就是一串字节,里面包含了一些信息。这些信息可能是文本,比如html网页作为消息体,也可能是视频、音频等信息。
Web API接口中,消息体基本都是文本,
文本的格式主要是这3种: urlencoded ,json , XML。
如下分别举例子进行解释:
第一种:xml的格式的消息体
如果设计者决定用 XML 格式传输一段信息,用Requests库,只需要这样payload = ‘’’
<?xml version=”1.0″ encoding=”UTF-8″?> 良好 30% 暂无 ”’ r = requests.post(“http://httpbin.org/post”, data=payload.encode(‘utf8’)) print(r.text)
第二种:urlencoded 格式消息体
payload = {‘key1’: ‘value1’, ‘key2’: ‘value2’}
r = requests.post(“http://httpbin.org/post”, data=payload) print(r.text)
第三种:JSON格式(两种格式)
r = requests.post(“http://httpbin.org/post”, data=json.dumps(payload)) 或者
r = requests.post(“http://httpbin.org/post”, json=payload) 推荐这种形式
json.dumps() # 进行编码,序列化的操作 Python对象—>字符串 用于在网络中传输
json.loads() # 进行解码,反序列的操作 字符串—>Python对象 用于在代码中操作
(六)响应消息
处理响应消息的2种通用的方法:
第一种:
r = requests.get(“http://www.python3.vip/”)
print(r.content) #获得原始的字节串 print(r.content.decode(“utf-8”)) # 在进行对字符串的解码操作,得到正确的格式
第二种:
r = requests.get(“http://www.python3.vip/”)
r.encoding =“utf-8” # 指定格式,获得文本
print(r.text)
print(r.encoding)
JOSN的响应的消息
使用的前提:知道返回的是JOSN格式的
r = requests.post(
“http://httpbin.org/post”,
data={“A”:1,“B”:2}
)
print(json.loads(r.content.decode(“utf-8”)))
以上得到的结果就是JSON格式的
举例子如下:
r = json.loads(r.content.decode(“utf-8”))
print(r.get(“headers”).get(“Host”)) #得到里面的关键信心
好处:将数据转换成josn方便的快速的处理
以上为原理的分析,以下为推荐使用的方法:
r = r.json()
print(r.get(“headers”).get(“Host”))
(七)Session机制
含义:会话的意识
原理分析:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Em3S8AHw-1643553641478)(en-resource://database/1446:1)]
从上图可以看出, 服务端是通过 HTTP的响应头 Set-Cookie 把产生的 sessionid 告诉客户端的。
客户端的后续请求,是通过 HTTP的请求头 Cookie 告诉服务端它所持有的sessionid的。
cookie 英文就是小甜饼的意思,这里表示一小段数据。
requests处理session-cookie
requests库给我们提供一个 Session 类。
通过这个类,无需我们操心, requests库自动帮我们保存服务端返回的 cookie数据, HTTP请求自动 在消息头中放入 cookie 数据
用法如下:
session = requests.Session()
创建 Session 对象 s = requests.Session() # 通过 Session 对象 发送请求 r
esponse = s.post(“http://127.0.0.1/api/mgr/signin”, data={ ‘username’: ‘byhy’, ‘password’: ‘88888888’ }) printResponse(response)
(八)
问题记录
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168443.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...