Python接口自动化测试 —— Requests库学习

2023-12-16

安装:

pip install requests

例子:

  1. import requests

  2. r = requests.get('http://www.baidu.com')

  3. print r.status_code

  4. print type(r)

  5. print r.cookies运行程序,得到结果:

运行程序,得到结果:

  1. 200

  2. <class 'requests.models.Response'>

  3. <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

常用的HTTP请求类型

>>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})
>>> r = requests.put('http://httpbin.org/put', data = {'key':'value'})
>>> r = requests.delete('http://httpbin.org/delete')
>>> r = requests.head('http://httpbin.org/get')
>>> r = requests.options('http://httpbin.org/get')

GET:

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:822269834

POST:

API:

request库的返回内容

返回响应对象

# r.text  当你访问 r.text 之时,Requests 会使用其推测的文本编码
>>> import requests
>>> r = requests.get('https://api.github.com/events')
>>> r.text
u'[{"repository":{"open_issues":0,"url":"https://github.com/...

你可以找出 Requests 使用了什么编码,并且能够使用 r.encoding 属性来改变它:

# r.encoding
>>> r.encoding
'utf-8'
>>> r.encoding = 'ISO-8859-1'

二进制响应内容

# 以字节的方式访问请求响应体
>>> r.content
b'[{"repository":{"open_issues":0,"url":"https://github.com/...

Json响应内容

# r.json  JSON 解码失败, r.json() 就会抛出一个异常
>>> import requests
 
>>> r = requests.get('https://api.github.com/events')
>>> r.json()
[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...

Raw原始响应内容

# Note:确保在初始请求中设置了 stream=True
>>> r = requests.get('https://api.github.com/events', stream=True)
>>> r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
>>> r.raw.read(10)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'

Header

>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> headers = {'user-agent': 'my-app/0.0.1'}
 
>>> r = requests.get(url, params=payload, headers=headers)

响应状态码:

>>> r = requests.get('http://httpbin.org/get')
>>> r.status_code
200
 
# 内置的状态码查询对象
>>> r.status_code == requests.codes.ok
True
 
# 发送错误的请求时候,Response.raise_for_status() 来抛出异常
>>> bad_r = requests.get('http://httpbin.org/status/404')
>>> bad_r.status_code
404
 
>>> bad_r.raise_for_status()
Traceback (most recent call last):
  File "requests/models.py", line 832, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error
 
# 当status_code为200的时候
>>> r.raise_for_status()
None

Cookie:

>>> url = 'http://example.com/some/cookie/setting/url'
>>> r = requests.get(url)
 
>>> r.cookies['example_cookie_name']
'example_cookie_value'
 
# 发送cookie到服务器
>>> url = 'http://httpbin.org/cookies'
>>> cookies = dict(cookies_are='working')
 
>>> r = requests.get(url, cookies=cookies)
>>> r.text
'{"cookies": {"cookies_are": "working"}}'

POST请求例子

传递参数方法:

import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
print r.text

结果:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "key1": "value1", 
    "key2": "value2"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "23", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.9.1"
  }, 
  "json": null, 
  "url": "http://httpbin.org/post"
}

把Json格式的数据传过去

import json
import requests
 
url = 'http://httpbin.org/post'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload))
print r.text

结果:

{
  "args": {}, 
  "data": "{\"some\": \"data\"}", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "16", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.9.1"
  }, 
  "json": {
    "some": "data"
  },  
  "url": "http://httpbin.org/post"
}

如何上传一个文件呢 ?,新建一个txt文件,内容为:Hello Word!

import requests
 
url = 'http://httpbin.org/post'
files = {'file': open('test.txt', 'rb')}
r = requests.post(url, files=files)
print r.text

运行结果:

{
  "args": {}, 
  "data": "", 
  "files": {
    "file": "Hello World!"
  }, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "156", 
    "Content-Type": "multipart/form-data; boundary=7d8eb5ff99a04c11bb3e862ce78d7000", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.9.1"
  }, 
  "json": null, 
  "url": "http://httpbin.org/post"
}

文件就上传成功

另外一种流上传方式:

with open('massive-body') as f:
    requests.post('http://some.url/streamed', data=f)超时:

超时:

# requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应
>>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request 

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python接口自动化测试 —— Requests库学习 的相关文章

  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 【Windows】MCSM面板搭建Mycraft服务器,实现公网远程联机

    文章目录 前言 1 Mcsmanager安装 2 创建Minecraft服务器 3 本地测试联机 4 内网穿透 4 1 安装cpolar内网穿透 4 2 创建隧道映射内网端口 5 远程联机测试 6 配置固定
  • 网络安全专业期末考试题整理

    一 单选题 二 多选题 三 简答题 四 计算题
  • 【数据结构入门精讲 | 第二篇】一文讲清算法复杂度

    上篇文章中我们引入了算法 数据结构 数据类型等概念 而要想衡量一个算法与数据结构是否为优质的 就需要一个衡量标准 这个衡量标准也是在我们实现一个好的算法时要遵循的原则 目录 基本概念 渐进性态 渐进性态数学表征 算法复杂度的运算 顺序搜索算
  • leetcode每日一题

    https leetcode cn problems subtree of another tree 这道题需要使用我们之前做过的一道题 那道题我们是来判断两颗树是不是相同的树 这里我们就需要用上这个接口函数 然后思路就是遍历左树和右树来看
  • C/C++---------------LeetCode第509. 斐波那契数

    斐波那契数列 题目及要求 暴力递归 备忘录的递归 动态规划 题目及要求 斐波那契数 通常用 F n 表示 形成的序列称为 斐波那契数列 该数列由 0 和 1 开始 后面的每一项数字都是前面两项数字的和 也就是 F 0 0 F 1 1 F n
  • Pytest自动化测试框架:mark用法---测试用例分组执行

    pytest中的mark mark主要用于在测试用例 测试类中给用例打标记 只能使用已注册的标记名 实现测试分组功能 并能和其它插件配合设置 测试方法 执行顺序等 如下图 现在需要只执行红色部分的测试方法 其它方法不执行 设置步骤如下 1
  • 当面试问你接口测试时,不要再说不会了!

    很多人会谈论接口测试 到底什么是接口测试 如何进行接口测试 这篇文章会帮到你 01 前端和后端 在谈论接口测试之前 让我们先明确前端和后端这两个概念 前端是我们在网页或移动应用程序中看到的页面 它由 HTML 和 CSS 编写而成 让我们看
  • 什么是自动化测试,看完你就懂了!

    随着互联网技术的飞速发展 软件本身的规模和复杂度也是逐步增加 为了保证软件项目能够保质保量交付到客户手中 软件测试环节就显得非常重要了 它可以看作是软件项目交付给客户最后一道安全保证 今天给大家聊聊软件测试当中自动化测试相关的知识 希望对大
  • 2023自动化测试框架大对比:哪个更胜一筹?

    所谓工欲善其事 必先利其器 在进行自动化测试时 选择一个合适的框架是至关重要的 因为一个好的测试框架可以大大提高测试效率 减少我们很多工作量 在选择框架之前 我们通常需要对不同的框架进行对比 以便找到最适合我们需求的框架 对框架进行对比的目
  • Python+Appium自动化测试大法,让你的测试效率飞升,绝不等待!封装元素定位方法超详解!

    在 appium自动化测试 脚本运行的过程中 因为网络不稳定 测试机或模拟器卡顿等原因 有时候会出现页面元素加载超时元素定位失败的情况 但实际这又不是bug 只是元素加载较慢 这个时候我们就会使用元素等待的方法来避免这种情况 增加代码的健壮
  • 手动测试 VS 自动化测试:哪一个更适合你的项目?

    什么是手动测试 手动测试是一种不借助任何工具 自动化 来执行测试的测试 在这个测试中 测试人员为代码编写测试用例 对软件进行测试 并给予关于该软件的最终报告 手动测试是耗时的测试 因为它是由人工完成的 并且存在人为错误的可性 进行手动测试以
  • Stm32最小系统板电路设计

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • app性能测试怎么做?内容全在这里了

    1 app性能测试 提到APP的性能测试这个概念比较笼统 因为APP的性能测试分为服务端的性能和手机端的性能测试 1 1 app服务端性能测试 app服务端的性能测试 利用jmeter等工具模拟并发 压测服务器系统 服务端性能测试 一般可以
  • 【计算机网络概述】第一章:概论 1.2什么是网络边缘

    学习目标 网络结构 端系统的客户 服务器模式与对等模式 两种面向网络实施的服务 前言 在第一章 我们学习了什么是 Internet 网络 计算机网络和互联网的知识点 但是由于计算机网络的知识点非常的抽象 内容又多 所以我们要反复的练习 记忆
  • 元素定位,年轻人在 Web UI 自动化成长道路上吃的第一个亏

    元素定位 对于 Web UI 自动化而言 绝对是大家成长道路上的一道绊脚石 很多初学者 都 死 在了元素定位上 从而失去了学习的兴趣 导致职业规划不得不半途而废 那么 今天 我们就使用 Katalon Studio 让工具帮我们进行元素定位
  • 软件测试面试题:如何测试App性能?

    为什么要做App性能测试 如果APP总是出现卡顿或网络延迟的情况 降低了用户的好感 用户可能会抛弃该App 换同类型的其他应用 如果APP的性能较好 用户体验高 使用起来丝滑顺畅 那该应用的用户粘性也必然会提高 那我们该如何做App性能测试
  • STM32用一个定时器执行多任务写法

    文章目录 main c include stm32f4xx h uint32 t Power check times 电量检测周期 uint32 t RFID Init Check times RFID检测周期 int main Timer
  • Python自动化测试之线上流量回放:分析、存储与本地化支持!

    在自动化测试中 线上流量回放是一项关键技术 它可以模拟真实用户请求并重现线上场景 验证系统的性能和稳定性 本文将介绍Python自动化测试中的线上流量回放技术 并提供实战代码 帮助你了解日志分割解析 存储至本地MySQL数据库 以及本地化存
  • 什么是接口与API接口!

    今天有个朋友问我什么接口 你们平时都说在写接口 写的是什么鬼啊 我一开始就想 咦小陈同学怎么突然了解编程接口了 不过听到他后一个提问我知道原来他想的是API接口 不过被我主观意识习惯想成了编程定义上的接口 所以就突发其想 想写篇东西说明一下
  • Python接口自动化测试 —— Requests库学习

    安装 pip install requests 例子 import requests r requests get http www baidu com print r status code print type r print r co