Python 接口自动化 —— requests框架

1.前言

Python内置的urllib模块,也可以用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。因此我们使用 requests 模块进行进行接口测试。

requests官方文档资料地址:http://cn.python-requests.org/zh_CN/latest/

2.环境安装

cmd(win+R快捷键)输入:

 pip install requests -i https://pypi.douban.com/simple

提示以下信息表示安装成功。

3.requests发送请求

3.1 get请求无参数param
  1. 将安装好的requests模块导入后,通过GET访问一个URL地址的网页页面
  2. 这里的 r 也就是 response,请求后的返回值,可以调用 response 里的 status_code 方法查看状态码
  3. 状态码 200 只能说明接口请求发送成功了,并不能说明功能一定是 OK 的,一般要查看响应的内容,r.text 返回文本信
 
  1. # -*- coding:utf-8 -*-

  2. # 导入 requests 模块

  3. import requests

  4. # 定义 url

  5. url = 'http://www.cnblogs.com/wwho'

  6. # 请求博客园

  7. r = requests.get(url=url)

  8. # 打印状态码

  9. print(r.status_code)

  10. # 打印文本

  11. print(r.text)

3.2 get请求有参数param

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地址,可以检查是否传参成功)

代码:

 
  1. # -*- coding:utf-8 -*-

  2. # 导入 requests 模块

  3. import requests

  4. # 定义 url

  5. url = 'http://apis.juhe.cn/simpleWeather/query'

  6. par = {"city": "深圳",

  7. "key": "4611a7abae4afe573fd7ca751d9d423a"}

  8. result = requests.get(url=url, params=par)

  9. # 打印文本

  10. print(result.text)

3.3定制请求头

一个完整的get请求,应该包括请求行(url) 和请求头(headers)、请求参数(params),
什么时候要加请求头呢,如果你不确定的话最好加上去。

3.4 response返回信息

response返回信息

 
  1. -- r.status_code # 响应状态码

  2. -- r.content # 字节方式的响应体,会自动为你解码 gzip 和deflate 压缩

  3. -- r.headers # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回 None

  4. -- r.json() # Requests 中内置的 JSON 解码器,requests的方便之处还在于,对于特定类型的响应,例如JSON,可以直接获取

  5. -- r.url # 获取 url

  6. -- r.encoding # 编码格式,requests自动检测编码

  7. -- r.cookies # 获取 cookie

  8. -- r.raw # 返回原始响应体-- r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码

  9. -- r.raise_for_status() # 失败请求(非 200 响应)抛出异常

以上就是requests模块主要的返回格式。

3.5 post请求

讲post请求之前 先讲一下 requests.session()
requests.session() 获取 requests的session对象,简单来说就相当于一个微型浏览器,能自动保持登录态。所以一般对于 cookie – session 保持登录态的系统就可以使用
requests.session()

使用方法:后续的请求都使用session即可

Post请求首先要注意的就是body的数据类型

常见的有四种类型,但是不止四种:

  1. 第一种:application/json: {“key1“:”value1”,“keyt2":“value2"}
  2. 第二种:application/x-www-form-urlencoded:name1= value1&name2=value2
  3. 第三种:multipart/form-data:这一种是表单格式的
    (文件上传,图片上传等混合式)
  4. 第四种:text/xml

examples.getStateName

Body为x-www-form-urlencoded类型

怎么知道body是什么类型?

  1. 接口文档有说明
  2. 自己抓包看

直接通过抓包就可以看出post请求的数据类型,如下图就是x-www-form-urlencoded类型

传data参数就行(无需转json)

代码:

 
  1. # -*- coding:utf-8 -*-

  2. # @File:sms.py

  3. import requests

  4. host = 'http://127.0.0.1:8002'

  5. session = requests.session() # 相当于微型浏览器,保持登录态

  6. url = host + '/api/mgr/signin' # 定义url

  7. body = {

  8. "username": "byhy",

  9. "password": "88888888"

  10. }

  11. resp = session.post(url=url, data=body)

  12. status_code=resp.status_code #获取响应状态码

  13. print('响应状态码:{}'.format(status_code))

  14. text=resp.text # 获取响应内容,结果类型是字符串

  15. print('响应内容:{}'.format(text))

  16. json=resp.json() # 获取响应内容,结果是字典类型

  17. print('响应内容:{}'.format(json))

  18. resp_headers=resp.headers # 获取响应headers

  19. print('响应header:{}'.format(resp_headers))

Body为json类型

​json=body: 这个表示自动将python里面的字典,转化为json格式参数了。关于字典和json的种种关系,后面专门写篇文章讲一下。

代码:

 
  1. # -*- coding:utf-8 -*-

  2. import requests

  3. host = 'http://127.0.0.1:8002'

  4. session = requests.session() # 相当于微型浏览器,保持登录态

  5. url = host + '/api/mgr/signin' # 定义登录的 url

  6. body = {

  7. "username": "byhy",

  8. "password": "88888888"

  9. }

  10. resp = session.post(url=url, data=body) # 发送登录请求

  11. url_add_customer = host + '/api/mgr/customers' # 新建客户的 url

  12. body = {

  13. "action":"add_customer",

  14. "data":{

  15. "name":"tester",

  16. "phonenumber":"13345679934",

  17. "address":"深圳市南山区"

  18. }

  19. }

  20. resp = session.post(url=url_add_customer, json=body)

  21. print(resp.text) # 打印响应文本

3.6 put请求

put 请求的接口做法跟 post请求的差不多的,只是把post 请求改为 put请求。一样要看请求的格式。如果是 json 格式,也是用json接,Form格式用data接。

代码:

 
  1. # -*- coding:utf-8 -*-

  2. # @Time:2021/4/16 9:54

  3. # @File:sms.py

  4. import requests

  5. host = 'http://127.0.0.1:8002'

  6. session = requests.session() # 相当于微型浏览器,保持登录态

  7. url = host + '/api/mgr/signin' # 定义登录的 url

  8. body = {

  9. "username": "byhy",

  10. "password": "88888888"

  11. }

  12. resp = session.post(url=url, data=body)

  13. url_modify_customer = host + '/api/mgr/customers' # 修改客户的 url

  14. body = {

  15. "action":"modify_customer",

  16. "id": 52,

  17. "newdata":{

  18. "name":"深圳市桥北医院",

  19. "phonenumber":"13345678888",

  20. "address":"深圳市中医院"

  21. }

  22. }

  23. resp = session.put(url=url_modify_customer, json=body)

  24. print(resp.text) # 打印修改客户接口响应的文本

3.7 delete请求

delete 请求的接口做法跟 post请求的差不多的,只是把post 请求改为 delete请求。一样要看请求的格式。如果是 json 格式,也是用json接,Form格式用data接。

代码:

 
  1. # -*- coding:utf-8 -*-

  2. # @Time:2021/4/16 9:54

  3. # @File:sms.py

  4. import requests

  5. host = 'http://127.0.0.1:8002'

  6. session = requests.session() # 相当于微型浏览器,保持登录态

  7. url = host + '/api/mgr/signin' # 定义登录的 url

  8. body = {

  9. "username": "byhy",

  10. "password": "88888888"

  11. }

  12. resp = session.post(url=url, data=body)

  13. url_delete_customer = host + '/api/mgr/customers' # 删除客户的 url

  14. body = {

  15. "action":"del_customer",

  16. "id": 52

  17. }

  18. resp = session.delete(url=url_delete_customer, json=body)

  19. print(resp.text) # 打印删除客户接口响应的文本

总结:

requests库的请求方法里参数众多,所以简单总结一下:

  1. get请求带参数就用params=params
  2. post请求是form格式就用data=data
  3. post请求是json类型参数就用json=json
  4. 请求头信息header就用headers=headers

 

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值