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 固定写法 将参数传递给 paramsr = 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_phoneimport 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()

总结

