【自用】接口测试

接口测试-http协议

http协议(超文本传输协议),基于TCP/IP模型应用层协议。

HTTP协议之URL组成
在这里插入图片描述
HTTP协议请求模型
HTTP由请求和响应构成,是一个标准的客户端服务其模型(B/S架构)。
在这里插入图片描述
HTTP协议永远都是客户端发起请求,服务其回送响应。

HTTP请求过程

在这里插入图片描述

HTTP协议请求类型

GET:从服务器端获取资源或数据。
POST:向服务器端提交数据。

两者区别:

HTTP抓包:fiddler抓包

HTTP请求组成部分:URL 地址、请求参数、请求头、请求体(仅限POST请求)

HTTP状态码:
1:临时响应需要请求者继续执行操作。
2:请求成功。操作被成功接受并处理。
3:重定向代码,用0于已经移动的文件并且在头信息中指定新的地址信息。
4:客户端错误,请求包含语法错误或无法完成请求。
5:服务器错误,服务器在请求处理的过程中发生错误。

接口设计文档:

接口说明
请求方式
请求URL
请求参数
返回数据
返回示例

接口测试用例设计
在这里插入图片描述
在这里插入图片描述

Python库完成接口测试(requests使用)

安装

pip install requests

方法说明
requsts.requst()构造一个请求,最基本的方法,是下面方法的支撑
requsts.get()获取网页,对应HTTP中的GET方法
requsts.post()向网页提交信息,对应HTTP中的POST方法
requsts.head()获取html网页的头信息,对应HTTP中的HEAD方法
requsts.put()向html提交put方法,对应HTTP中的PUT方法
requsts.delete()向html提交删除请求,对应HTTP中的DELETE方法
requsts.patch()向html网页提交局部请求修改的的请求,对应HTTP中的PATCH方法

1.带参发送get请求

一、直接添加参数
def test1():
	resq = requests.get('http://www.baidu.com/s?wd=python')
	print(resq.text) #获取响应对象的文本信息
	print(resq.status_code) #响应状态码信息
	print(resq.url) #获取响应对象所请求的地址
二、
通过定义一个字典,然后在请求中添加pramas参数来实现
data={
	'wd':'python',
	'name':'fanyun'
} 
resq = requests.get('http://www.baidu.com/s,params=data)
print(resq.url)

常用参数

参数类型作用
params字典url为基准的url地址,不包含查询参数;该方法会自动对params字典编码,然后和url拼接
url字符串requests 发起请求的地址
headers字典请求头,发送请求的过程中请求的附加内容携带着一些必要的参数
cookies字典携带登录状态
proxies字典用来设置代理 ip 服务器
timeout整型用于设定超时时间, 单位为秒

2.POST请求

resq = resquest.post('http://localhost:8080/mms/login/loginUser',data=data)
print(resq.text)

post中以json方式传递参数
当content-type为json时

resq = resquest.post('http://localhost:8080/mms/login/loginUser',json=data)

常用参数

参数作用类型
data字典作为向服务器提供或提交资源时提交,主要用于 post 请求
json字典json格式的数据, json合适在相关的html

3.head请求头

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.69'
}
resq = resquest.post('https://www.qq.com/ninja/visual_focus_20200724.htm',headers=headers)
print(resq.text)

4.请求头中添加cookies

headers = {
	'Cookies':'RK=cwdAEfkxb4; ptcz=b6b05f650ff84c20004a2865c458c4ea4e7f7b946eb62; pgv_pvid=52713; pac_uid=0_38e3475c81; ptui_loginuin=1213616@qq.com; iip=0; pgv_info=ssid=s88648; ts_last=www.qq.com/; ts_refer=cn.bing.com/; ts_uid=38960742; ad_play_index=75'
	}
resq = resquest.post('https://mail.qq.com/cgi-bin/frame_html?sid=2rLQSm8v7r2tUxt-&r=ef68759052b39566a0a2b4076f2e92c5&lang=zh',headers=headers)
print(resq.text)

5.session保持会话状态
需要授权的API都需要session

def test():
	sess = requests.Session()
	data = {
		'username':'admin',
		'password':'admin123'
	}
	sess.post('http://localhost:8080/mms/login/loginUser',data=data) #登录操作
	resq = sess.get('http://localhost:8080/mms/login/GetLoginName')
	print(resq.text)

6.上传下载文件
不带参数

def test():
	files = {
		'file':open('test.txt','rb')
	} #r:读取文件 b:二进制方式读取文件
	resq = resquest.post('http://www.fanyunedu.com:5000/general/api/upload',files=files)
	print(resq.text)
if __name__ == '__main__':
	test()

带参数

def test():
	data = {
	'batchname':'GB20210707'
	}
	files = {
		'batchfile':open('销售出库单-Test.xls','rb')
	} #r:读取文件 b:二进制方式读取文件
	resq = resquest.post('http://www.fanyunedu.com:5000/general/api/upload',data=data,files=files)
	print(resq.text)
if __name__ == '__main__':
	test()

7.加密接口测试
在这里插入图片描述
8.接口参数关联
在这里插入图片描述

接口响应内容

主要有三种形式:JSON格式的字符串、HTML源码、程序员自定义的字符串

主要的处理方式:

处理方式一:正则表达式来进行处理(万能),这种方法适合于以上任意一种格式。

处理方式二:lxml库进行处理,这种方式仅针对于返回内容是HTML格式的字符串

处理方式三:直接使用requests库自带的json方法进行处理,这种方式仅针对于返回内容是json格式的字符串。
正则表达式符号
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值