首页 > 编程语言 >Python 接口自动化 —— requests框架

Python 接口自动化 —— requests框架

时间:2023-10-27 19:44:52浏览次数:47  
标签:body 请求 Python 接口 url json session 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 返回文本信
# -*- 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)

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

代码:

# -*- 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)

3.3定制请求头

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

3.4 response返回信息

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模块主要的返回格式。

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)

代码:

# -*- 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)  # 打印响应文本

3.6 put请求

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)  # 打印修改客户接口响应的文本

3.7 delete请求

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库的请求方法里参数众多,所以简单总结一下:

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

最后如果你想学习自动化测试和需要软件测试资料,欢迎加入笔者的交流群:320231853,里面会有很多测试资源和大佬答疑解惑,我们一起交流一起学习!

搜索

复制

标签:body,请求,Python,接口,url,json,session,requests
From: https://www.cnblogs.com/nhb1234/p/17793032.html

相关文章

  • Python中的equals用法介绍
      一、使用场景在Python中,equals(等于)经常用于比较两个对象是否相等。在Python中,使用==可以判断两个对象的值是否相等,使用is可以判断两个变量是否引用同一个对象。但是对于不同类型的对象,使用==方法可能会出现意想不到的结果。因此,在使用==判断两个对象是否相等时,需要注意以......
  • API商品数据接口调用爬虫实战
    随着互联网的发展,越来越多的商家开始将自己的商品数据通过API接口对外开放,以供其他开发者使用。这些API接口可以提供丰富的商品数据,包括商品名称、价格、库存、图片等信息。对于爬虫开发者来说,通过调用这些API接口,可以更加便捷地获取商品数据,避免了爬取网页数据的繁琐过程。本文将......
  • Python:爬取某软件站数据报错requests.exceptions.SSLError: HTTPSConnectionPool(hos
    使用Python爬取某网站数据时候,之前一直是好好的。突然就报错:requests.exceptions.SSLError:HTTPSConnectionPool(host='api.***.cn',port=443):Maxretriesexceededwithurl:/accounty1/login?analysis............检查发现,可能是IP地址存在代理导致网络环境一场。可以检......
  • python 某音文件下载
    importtime#frompyqueryimportPyQueryaspqimportcommonMethodimportdatetimeimportrequestsimportreimportosimportjsonpattern_1='<sourceclass=""src="//v3-web.douyinvod.com/(.{486,488})type="">'......
  • Django和Vue.js是两种不同的框架,它们各自有自己的特点和用途¹。 **Django**¹: - Dja
    Django和Vue.js是两种不同的框架,它们各自有自己的特点和用途¹。**Django**¹:-Django是一个开放源代码的PythonWeb应用框架¹。-它采用了MTV(模型,视图,模板)的软件设计模式¹。-Django可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序¹。-Django还包含许多功能......
  • API - 几种API接口模式 - RESTful、WebSocket、GraphQL、gRPC、Webhook
    总结TODO.....当思考使用哪种API接口时,你将会面临一个重要的决策。RESTful、GraphQL、gRPC、WebSocket和Webhook是当前流行的几种API接口模式。在本文中,我们将介绍这些接口的特点、用途和比较,帮助你选择最适合你应用程序需求的接口。引言随着现代应用程序的复杂性和用户期望的......
  • Java继承 多线程的实现方式——利用 Callable 接口 和 Future 接口方式实现
    利用Callable接口和Future接口方式实现:这种实现方式可以获取到多线程运行的结果 步骤:1.创建一个类,类名比如叫MyCallable,并实现 Callable接口  注:Callable接口有一个泛型,因为这种方式可以获取到多线程运行的结果,泛型就表示结果的类型2.重写 Callable接口里面......
  • Python打不开问题解决方案大全
    在使用Python进行编程开发的过程中,我们不可避免会遇到Python打不开的问题。这些问题可能是由于环境配置、包管理和依赖文件等问题所导致的,但不管是何种原因,我们都需要解决它们才能顺利地进行工作。本文将从多个方面为大家详细介绍Python打不开问题的解决方法。一、Python环境配......
  • Java基础 多线程的实现方式——实现 Runnable 接口的方式进行实现
    实现Runnable接口的方式进行实现:1.定义一个类实现 Runnable接口,并实现run方法2.在run方法里面书写该线程要执行的代码3.然后创建这个实现 Runnable接口的类的实例化对象,这个对象其实就表示多线程要执行的任务4.再去创建一个Thread类的对象,然后把 实现 R......
  • python3.8 debug记录
    AttributeError:module'numpy'hasnoattribute'typeDict'pip3installnumpy==1.18.5ModuleNotFoundError:Nomodulenamed'sklearn'pipinstallscikit-learn(注:安装这个库可能与已有的numpy版本冲突,需要多卸载安装几次)......