Python内置的urllib模块,也可以用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。因此我们使用 requests 模块进行进行接口测试。
requests官方文档资料地址:http://cn.python-requests.org/zh_CN/latest/
cmd(win+R快捷键)输入:
pip install requests -i https://pypi.douban.com/simple
提示以下信息表示安装成功。
# -*- coding:utf-8 -*-
# 导入 requests 模块
import requests
# 定义 url
url = 'http://www.cnblogs.com/wwho'
# 请求博客园
r = requests.get(url=url)
# 打印状态码
print(r.status_code)
# 打印文本
print(r.text)
url地址为:http://apis.juhe.cn/simpleWeather/query?city=深圳&key=xxx
参数:city=深圳&key=xxx
可以以字典的形式传参:{"city": "深圳", "key": "xxx"}
多个参数格式:
{"key1": "value1", "key2": "value2", "key3": "value3"}
(r.url获取当前url地址,可以检查是否传参成功)
代码:
# -*- coding:utf-8 -*-
# 导入 requests 模块
import requests
# 定义 url
url = 'http://apis.juhe.cn/simpleWeather/query'
par = {"city": "深圳",
"key": "4611a7abae4afe573fd7ca751d9d423a"}
result = requests.get(url=url, params=par)
# 打印文本
print(result.text)
一个完整的get请求,应该包括请求行(url) 和请求头(headers)、请求参数(params),
什么时候要加请求头呢,如果你不确定的话最好加上去。
response返回信息
-- r.status_code # 响应状态码
-- r.content # 字节方式的响应体,会自动为你解码 gzip 和deflate 压缩
-- r.headers # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回 None
-- r.json() # Requests 中内置的 JSON 解码器,requests的方便之处还在于,对于特定类型的响应,例如JSON,可以直接获取
-- r.url # 获取 url
-- r.encoding # 编码格式,requests自动检测编码
-- r.cookies # 获取 cookie
-- r.raw # 返回原始响应体-- r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
-- r.raise_for_status() # 失败请求(非 200 响应)抛出异常
以上就是requests模块主要的返回格式。
讲post请求之前 先讲一下 requests.session()
requests.session() 获取 requests的session对象,简单来说就相当于一个微型浏览器,能自动保持登录态。所以一般对于 cookie – session 保持登录态的系统就可以使用
requests.session()
使用方法:后续的请求都使用session即可
Post请求首先要注意的就是body的数据类型
常见的有四种类型,但是不止四种:
examples.getStateName
Body为x-www-form-urlencoded类型
怎么知道body是什么类型?
直接通过抓包就可以看出post请求的数据类型,如下图就是x-www-form-urlencoded类型
传data参数就行(无需转json)
代码:
# -*- coding:utf-8 -*-
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session() # 相当于微型浏览器,保持登录态
url = host + '/api/mgr/signin' # 定义url
body = {
"username": "byhy",
"password": "88888888"
}
resp = session.post(url=url, data=body)
status_code=resp.status_code #获取响应状态码
print('响应状态码:{}'.format(status_code))
text=resp.text # 获取响应内容,结果类型是字符串
print('响应内容:{}'.format(text))
json=resp.json() # 获取响应内容,结果是字典类型
print('响应内容:{}'.format(json))
resp_headers=resp.headers # 获取响应headers
print('响应header:{}'.format(resp_headers))
Body为json类型
json=body: 这个表示自动将python里面的字典,转化为json格式参数了。关于字典和json的种种关系,后面专门写篇文章讲一下。
代码:
# -*- coding:utf-8 -*-
import requests
host = 'http://127.0.0.1:8002'
session = requests.session() # 相当于微型浏览器,保持登录态
url = host + '/api/mgr/signin' # 定义登录的 url
body = {
"username": "byhy",
"password": "88888888"
}
resp = session.post(url=url, data=body) # 发送登录请求
url_add_customer = host + '/api/mgr/customers' # 新建客户的 url
body = {
"action":"add_customer",
"data":{
"name":"tester",
"phonenumber":"13345679934",
"address":"深圳市南山区"
}
}
resp = session.post(url=url_add_customer, json=body)
print(resp.text) # 打印响应文本
put 请求的接口做法跟 post请求的差不多的,只是把post 请求改为 put请求。一样要看请求的格式。如果是 json 格式,也是用json接,Form格式用data接。
代码:
# -*- coding:utf-8 -*-
# @Time:2021/4/16 9:54
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session() # 相当于微型浏览器,保持登录态
url = host + '/api/mgr/signin' # 定义登录的 url
body = {
"username": "byhy",
"password": "88888888"
}
resp = session.post(url=url, data=body)
url_modify_customer = host + '/api/mgr/customers' # 修改客户的 url
body = {
"action":"modify_customer",
"id": 52,
"newdata":{
"name":"深圳市桥北医院",
"phonenumber":"13345678888",
"address":"深圳市中医院"
}
}
resp = session.put(url=url_modify_customer, json=body)
print(resp.text) # 打印修改客户接口响应的文本
delete 请求的接口做法跟 post请求的差不多的,只是把post 请求改为 delete请求。一样要看请求的格式。如果是 json 格式,也是用json接,Form格式用data接。
代码:
# -*- coding:utf-8 -*-
# @Time:2021/4/16 9:54
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session() # 相当于微型浏览器,保持登录态
url = host + '/api/mgr/signin' # 定义登录的 url
body = {
"username": "byhy",
"password": "88888888"
}
resp = session.post(url=url, data=body)
url_delete_customer = host + '/api/mgr/customers' # 删除客户的 url
body = {
"action":"del_customer",
"id": 52
}
resp = session.delete(url=url_delete_customer, json=body)
print(resp.text) # 打印删除客户接口响应的文本
requests库的请求方法里参数众多,所以简单总结一下:
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!