1.requests简介
- requests用来发送http请求以及接收http响应的python第三方库,主要用于接口自动化测试。
- 安装:
pip install requests
2.requests库常用的方法:
requests.get()
# 发送get请求requests.post()
# 发生post请求requests.put()
# 发送put请求requests.delete()
# 发送delete请求requests.request()
# 发送所有类型的请求(get、post、put、delete等)
(1)不管是get、post、put、delete等方法,都是调用requests.request方法。
(2)requests.request方法调用session.request方法
(3)session.request的请求参数
method
请求方法:get、post、put、delete等url
请求路径params=None
get请求方式传参data=None
post请求方式传参json=None
post请求方式传参hearder=None
请求头cookies=None
请求cookiesfiles=None
上传文件
3.requests请求返回的响应response对象
response.json()
# 返回字典格式的数据response.text
# 返回字符串格式的数据response.content
# 返回bytes字节类型的数据response.staus_code
# 返回响应状态码response.reason
# 返回状态信息response.cookies
# 返回cookies信息response.headers
# 返回响应头response.request.xxx
# 返回请求的数据信息,如:请求投、请求路径等
4.request各种请求演示
(1)requests.get(url, params=None, **kwargs)
: requests发送get请求
import pytest
import requests
class TestUser:
def test_get_user(self):
url = "http://IP/api/v1/users/users/"
headers = {
"Authorization": "bearer token信息"
}
res = requests.get(url, headers=headers)
print("获取所有用户数据:", res.json())
if __name__ == "__main__":
pytest.main()
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c3e342a54be4660f5ab3d9c2895adc21.png)
- requests.get()参数:url, params=None, **kwargs
- url 请求路径
- params, get请求参数
- **kwargs 其他参数,包括headers、cookies等
- requests.get() 调用requests.request(“get”, url, params=params, **kwargs)方法
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d89fe2f026e267b63c392b391ce0431c.png)
(2)requests.post(url, data=None, json=None, **kwargs)
: requests发送post请求
import pytest
import requests
class TestUser:
def test_post_user(self):
url = "http://ip/api/v1/users/users/"
headers = {
"Authorization": "bearer token信息",
"Content-Type": "application/json"
}
datas = {
"name": "test_user_system_common_role_user_name",
"username": "test_user_system_common_role_user_username",
"email": "test_user_system_common_role_user_email@qq.com",
"password_strategy": "custom",
"password": "testpassword",
"system_roles": [
"00000000-0000-0000-0000-000000000003"
],
"org_roles": [
"00000000-0000-0000-0000-000000000007"
]
}
res = requests.post(url, headers=headers, json=datas)
print("创建普通用户:", res.json())
if __name__ == "__main__":
pytest.main()
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a0edfc34802d187210b22a840d9c3bfb.png)
- requests.post()参数:url, data=None, json=None, **kwargs
- url 请求路径
- data, post请求参数
- json, post请求参数
- **kwargs 其他参数,包括headers、cookies等
- requests.post() 调用:requests.request(“post”, url, data=data, json=json, **kwargs)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/265be85c94b0f59e262173e8cfdf736d.png)
(3)requests.put(url, data=None, **kwargs)
: requests发送put请求
import pytest
import requests
class TestUser:
def test_put_user(self):
url = "http://IP/api/v1/users/users/9752fbbf-eb87-要更新的用户的ID/"
headers = {
"Authorization": "bearer token信息",
"Content-Type": "application/json"
}
datas = {
"name": "test_put_name",
"username": "test_put_username",
"email": "test_put_email@qq.com",
"password_strategy": "custom",
"password": "test_put_password",
"system_roles": [
"00000000-0000-0000-0000-000000000003"
],
"org_roles": [
"00000000-0000-0000-0000-000000000007"
]
}
res = requests.put(url, headers=headers, json=datas)
print("更新用户:", res.json())
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/08713e0bc3101f33767ddbd948217deb.png)
- requests.put()参数:url, data=None, **kwargs
- url 请求路径
- data, put请求参数
- json, put请求参数
- **kwargs 其他参数,包括headers、cookies等
- requests.post() 调用:requests.request(“put”, url, data=data, **kwargs)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8c439aea4478d2fd0ad434c1faa8c852.png)
(4)requests.delete(url, **kwargs)
: requests发送put请求
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/956b5ed52e1ce1158d5e20726c562b71.png)
- requests.delete()参数:url, **kwargs
- url 请求路径
- **kwargs 其他参数,包括headers、cookies等
- requests.delete() 调用:requests.request(“delete”, url, **kwargs)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/337f832c459958972dc160bd80d391d5.png)
(5)requests.request(method, url, **kwargs)
: requests.request发送任何请求
requests.request
发送get请求
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ab4d5f05145a2cdb823f1167aca33016.png)
requests.request
发送post请求
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/eb1162099e7e1c1b6e8a9c31e305e28d.png)
-
requests.request
发送put请求
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b1745132b62b8251dc142702ef654b9c.png)
-
requests.request
发送delete请求
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fbda3507fea5ce14f09ad4319bdf93c8.png)
-
requests.request
调用的是session.request(method=method, url=url, **kwargs)方法
def request(method, url, **kwargs):
with sessions.Session() as session:
return session.request(method=method, url=url, **kwargs)
# method请求方法:get、post、put、delete等方法
# url 请求路径
# **kwargs 请求参数:
- params=None, #get请求传参
- data=None, #post请求传参
- json=None, #post请求传参
- headers=None, #请求头信息
- cookies=None, # 请求cookies
- files=None, #文件上传
- auth=None,
- timeout=None,
- allow_redirects=True,
- proxies=None,
- hooks=None,
- stream=None,
- verify=None,
- cert=None,
5.pytest之结合requests库实现接口自动化
import pytest
import requests
from yaml_util import clear_yaml, write_yaml, read_yaml
class TestUser:
def test_get_user(self):
method = "get"
url = "http://IP/api/v1/users/users/"
headers = {
"Authorization": "bearer token信息"
}
res = requests.request(method, url, headers=headers)
print("获取所有用户数据:", res.json())
def test_post_user(self):
method = "post"
url = "http://IP/api/v1/users/users/"
headers = {
"Authorization": "bearer token信息",
"Content-Type": "application/json"
}
datas = {
"name": "test_user_system_common_role_user_name",
"username": "test_user_system_common_role_user_username",
"email": "test_user_system_common_role_user_email@qq.com",
"password_strategy": "custom",
"password": "testpassword",
"system_roles": [
"00000000-0000-0000-0000-000000000003"
],
"org_roles": [
"00000000-0000-0000-0000-000000000007"
]
}
res = requests.request(method, url, headers=headers, json=datas)
if "id" in res.json().keys():
data = {
"test_user_system_common_role_user_id": res.json()['id']
}
clear_yaml()
write_yaml(data)
print("创建普通用户:", res.json())
def test_put_user(self):
extract_obj = read_yaml("/extract.yaml")
user_id = extract_obj.get("test_user_system_common_role_user_id")
method = "put"
url = "http://IP/api/v1/users/users/" + user_id + "/"
headers = {
"Authorization": "bearer token信息",
"Content-Type": "application/json"
}
datas = {
"name": "test_put_name",
"username": "test_put_username",
"email": "test_put_email@qq.com",
"password_strategy": "custom",
"password": "test_put_password",
"system_roles": [
"00000000-0000-0000-0000-000000000003"
],
"org_roles": [
"00000000-0000-0000-0000-000000000007"
]
}
res = requests.request(method, url, headers=headers, json=datas)
print("更新用户:", res.json())
def test_delete_user(self):
extract_obj = read_yaml("/extract.yaml")
user_id = extract_obj.get("test_user_system_common_role_user_id")
method = "delete"
url = "http://IP/api/v1/users/users/" + user_id + "/"
headers = {
"Authorization": "bearer token信息",
}
res = requests.request(method, url, headers=headers)
print("删除用户返回的状态码:", res.status_code)
if __name__ == "__main__":
pytest.main()
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e5bec8940c5ae9b923f0f4b9bdb7c6ce.png)