主要包括requests库的安装,接口用例编写,requests库的使用,requests库的返回值介绍,requests库的用例编写以及Requests的封装等等。
接口用例编写
实际情况下,每个模块的测试用例写的越详细越好,要根据接口文档进行编写。
安装项目依赖
下载requirements.txt中所需的package:
pip install -r requirements.txt
列出已经安装的包裹
pip list
pip install临时添加镜像源:
pip install pytest -i https://pypi.tuna.tsinghua.edu.cn/simple
国内镜像源包括:
镜像源 | 地址 |
---|---|
清华 | https://pypi.tuna.tsinghua.edu.cn/simple |
阿里 | http://mirrors.aliyun.com/pypi/simple/ |
豆瓣 | http://pypi.douban.com/simple/ |
百度 | https://mirror.baidu.com/pypi/simple |
Requests
Requests是一个Python HTTP库,用于发送HTTP请求。它比urllib更加方便,但是它不支持验证、cookies或者其它复杂的HTTP客户端功能。Requests是一个Apache2 Licensed开源项目,由Kenneth Reitz创建和维护。
安装
pip install requests
使用
import requests
r = requests.get('https://api.github.com/events')
print(r.text)
请求返回介绍
r.status_code #响应状态
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.headers #以字典对象存储服务器响应头,若键不存在则返回None
r.json() #Requests中内置的JSON
r.url # 获取url
r.encoding # 编码格式
r.cookies # 获取cookie
r.raw #返回原始响应体
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行
r.raise_for_status() #失败请求(非200响应)抛出异常
Requests用例编写
编写登录脚本
import requests
def login():
url = "http://172.17.0.139:5004/authorizations/"
data = {"username":"python",
"password":"12345678"}
r= requests.post(url,json=data)
print(r.text)
编写个人信息获取脚本
import requests
def info():
url = "http://172.17.0.139:5004/user/"
token = "***"
headers = {
"Authorization": "JWT"+token
}
r = requests.get(url,headers=headers)
print(r.text)
编写商品列表脚本
import requests
def goods_list():
url = "http://172.17.0.139:5004/categories/115/skus"
data = {
# "categroy_id":"115",
"page":"1",
"page_size": "10",
"ordering": "create_time",#'create_time', 'price', 'sales'
}
r = requests.get(url, json=data)
print(r.text)
print(r.json)
添加到购物车
import requests
def cart():
url = "http://172.17.0.139:5004/cart/"
data = {
"sku_id": "3",
"count": "1",
"selected": "true",
}
token = "***"
headers = {
"Authorization": "JWT"+token
}
r = requests.post(url, json=data,headers=headers)
print(r.text)
保存订单
import requests
def order():
url = "http://172.17.0.139:5004/cart/"
token = "***"
headers = {
"Authorization": "JWT"+token
}
r = requests.get(url,headers=headers)
print(r.text)
Requests的封装
封装requests_get方法
#1、创建封装get方法
def requests_get(url,headers):
#2、发送requests get请求
r = requests.get(url,headers = headers)
#3、获取结果相应内容
code = r.status_code
try:
body = r.json()
except Exception as e:
body = r.text
#4、内容存到字典
res = dict()
res["code"] = code
res["body"] = body
#5、字典返回
return res
requests_post方法封装
#1、创建post方法
def requests_post(url,json=None,headers=None):
#2、发送post请求
r= requests.post(url,json=json,headers=headers)
#3、获取结果内容
code = r.status_code
try:
body = r.json()
except Exception as e:
body = r.text
#4、内容存到字典
res = dict()
res["code"] = code
res["body"] = body
#5、字典返回
return res
可以发现,requests_get和requests_post方法的区别就是请求方式不同,其他都是一样的,所以我们可以把这两个方法合并成一个方法,这样就可以减少代码量,提高代码的复用性.
# 重构
# 1、创建类
class Requests:
# 2、定义公共方法
# 2.1 增加方法的参数,根据参数来验证请求方式是get还是post
# 2.2 重复的内容,复制进来即可
# 后续参数还可以加入data、cookies等
def requests_api(self,url,json=None,headers=None,method="get"):
# 3、判断请求方式
if method == "get":
r = requests.get(url,headers=headers)
elif method == "post":
r = requests.post(url,json=json,headers=headers)
# 4、获取结果内容
code = r.status_code
try:
body = r.json()
except Exception as e:
body = r.text
# 5、内容存到字典
res = dict()
res["code"] = code
res["body"] = body
# 6、字典返回
return res
### 重构get/post方法
def get(self,**kwargs):
# 调用公共方法
return self.requests_api(url,method="get",**kwargs)
def post(self,**kwargs):
# 调用公共方法
return self.requests_api(url,method="post",**kwargs)