requests 请求库
做接口测试的时候,需要将请求发送给服务器,需要网络请求,requests 库是python中主要用来模拟网络请求的库。 使用requests 可以模拟get ,post ,put,delete 等这些网络请求。
requests 不是Python官方自带的,使用的时候需要我们进行安装。它是一个第三方的库。
pip 包管理器
安装第三方包的时候可以通过pip 命令进行在线下载安装(功能类似于平时我们使用手机在应用商店安装的app原理类似)
安装requests
常用的安装包的方式有两种。
- 一种通过命令行使用命令安装
- 在Pycharm中通过搜索下载安装。
命令行安装
打开pycharm 底部 terminal 命令行
命令行中输入
默认使用 pip 命令进行下载的时候,是从国外的服务器下载的。如果网络比较慢,有可能会下载失败。比如提示下面这个。下载失败。pip install requests
使用国内pip 镜像站提高下载速度
从国外服务器下载速度受限,可以使用国内的镜像站进行下载。
只需在命令行配置一下即可。
上面的命令配置下载使用 国内镜像,后面安装其他第三方的包都是从国内的服务器下载。pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
通过pycharm进行安装
打开【File】—【Setting】
找到 项目配置
搜索安装 requests
安装成功
在项目配置中可以看到 有requests 包的信息,表示安装成功。
pycharm 中配置国内下载镜像地址
在项目配置中点击 【+】
安装选项中 选择【manage reposties】
将原来的地址进行修改
更改地址为
https://pypi.tuna.tsinghua.edu.cn/simple
发送get请求
使用requests 库发送get 请求
# 导入 requests 模块
import requests
# 发送一个get 请求
reps = requests.get("http://47.100.175.62:3000/api/v1/topics")
# 打印返回结果的状态码
print(reps.status_code)
# 打印返回结果的json值
print(reps.json())
请求成功可以看到服务器返回结果
get 请求参数 params
get 请求发送的时候 请求的参数 放在 字典中,调用get 请求 需要将请求的数据传递给params
# 导入 requests 模块
import requests
# 默认请求前缀
base_url = "http://47.100.175.62:3000/api/v1"
def test_get_param():
# 请求地址
url = base_url+"/topics"
# 请求参数
query = {
"page":1,
"tab":"ask",
"limit":10,
"mdrender":"false"
}
# 发送get请求 params 固定写法 将参数传递给 params
r = requests.get(url,params=query)
# 状态码
print(r.status_code)
# 返回结果
print(r.json())
if __name__ == '__main__':
test_get_param()
发送post 请求
在做post请求的时候,请求的数据可以是 x-www-form-urlencode 表单格式,也可以是是json格式。
在requests post 请求中函数的定义:
post的的请求参数中:
- url 请求地址
- data 如果请求的数据格式为 x-www-form-urlencoded 表单格式,将数据传递给 data 字段。
- json 如果请求的数据为 json 格式, 那么需要将参数传递给json。
发送json格式数据
将请求数据传递给 json ```python import requests默认请求前缀
base_url = “http://47.100.175.62:3000/api/v1“ def test_post(): url = base_url+”/topics” body_data = {
}"accesstoken":"0c809962-4b8a-431c-b780-9a110264bd80", "title":"helloworld", "tab":"ask", "content":"xxxxxxxxxxxx"
发送json 格式数据
r = requests.post(url,json=body_data)打印请求头信息 r.request.headers 请求头信息 请求数据格式为json
print(r.request.headers)打印返回结果
print(r.json())
if name == ‘main‘: test_post()
执行,可以看到执行的结果。
```python
{'User-Agent': 'python-requests/2.27.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '119', 'Content-Type': 'application/json'}
{'success': True, 'topic_id': '625a64b988e6be03a6f10b02'}
发送表单格式的数据
在post请求中,表单格式数据 传递个data 参数
# 默认请求前缀
base_url = "http://47.100.175.62:3000/api/v1"
def test_post_data():
url = base_url + "/topics"
body_data = {
"accesstoken": "0c809962-4b8a-431c-b780-9a110264bd80",
"title": "helloworld",
"tab": "ask",
"content": "xxxxxxxxxxxx"
}
# 发送数据格式为表单格式。
r = requests.post(url, data=body_data)
# 打印请求头信息 r.request.headers 请求头信息
print(r.request.headers)
# 打印返回结果
print(r.json())
if __name__ == '__main__':
test_post_data()
需要注意:在post请求的时候,需要传递不同格式,如果是 表单格式,这里一定要传值给 data
如果是json 格式,传值给json。
在上面的cnode社区接口中 post 请求两种格式都支持,所以你将数据传递给data 或者传递给 json 都是的可以的。
但是下面这个请求必须传递给json。
练习
用户注册
新风商城 注册用户 接口。
请求方式:Post
请求地址:http://49.233.108.117:28019/api/v1/user/register
请求数据类型: json
请求body:
{
"loginName": "string",
"password": "string"
}
请使用 python 注册一个用户
# 导入生成的手机号
from common.utils import generate_phone
# 生成随机的一个手机号
phone = generate_phone()
def test_register():
url = "http://49.233.108.117:28019/api/v1/user/register"
body_data = {
"loginName": phone, # 传入手机号
"password": "123456"
}
print(f"使用数据进行注册:{body_data}")
r = requests.post(url,json=body_data)
# 打印请求的信息头
print(r.request.headers)
# 打印返回结果
print(r.json())
if __name__ == '__main__':
test_register()
用户登录
登录接口
请求地址: http://49.233.108.117:28019/api/v1/user/login
请求数据类型: json
请求body:
{
"loginName": "string",
"passwordMd5": "string"
}
测试用户登录,需要使用同一个手机号码 ,先注册成功,在进行登录。
需注意:密码需要进行md5 加密。
使用网站:https://tool.chinaz.com/tools/md5.aspx
# 导入生成的手机号
from common.utils import generate_phone
import requests
# 1. 设置手机号 后面函数中使用手机号 都从这里获取
phone = generate_phone()
# 用户注册
def test_register():
url = "http://49.233.108.117:28019/api/v1/user/register"
body_data = {
"loginName": phone,
"password": "123456"
}
print(f"使用数据进行注册:{body_data}")
r = requests.post(url,json=body_data)
# 打印请求的信息头
print("注册的请求头", r.request.headers)
# 打印返回结果
print("注册结果", r.json())
# 用户登录
def test_login():
url = "http://49.233.108.117:28019/api/v1/user/login"
body_data = {
"loginName": phone,
"passwordMd5": "E10ADC3949BA59ABBE56E057F20F883E"
}
print(f'使用数据进行登录 {body_data}')
r = requests.post(url,json=body_data)
# 打印出响应状态码 服务器返回结果
print("登录结果返回结果",r.status_code,r.json())
if __name__ == '__main__':
# 注册和登录的时候需要使用到同一个手机号码
test_register()
test_login()