requests库写接口测试框架初学习
https://www.runoob.com/http/http-methods.html
https://blog.csdn.net/lihao21/article/details/51857385
https://blog.csdn.net/u011655220/article/details/80285608
https://2.python-requests.org//zh_CN/lat
正文:
Python中requests的开发哲学:
Requests 是以 PEP 20 的箴言为中心开发的
- Beautiful is better than ugly.(美丽优于丑陋)
- Explicit is better than implicit.(直白优于含蓄)
- Simple is better than complex.(简单优于复杂)
- Complex is better than complicated.(复杂优于繁琐)
- Readability counts.(可读性很重要)
- 对于 Requests 所有的贡献都应牢记这些重要的准则。
Python接口测试框架搭建基本思路流程图:
利用python中的requests库或urllib.request库进行框架中需要用到的功能的调用以及实现。
在python中requests库的便利性以及包容性和可操作性都优于urllib.request库。
1. 发送http(https)请求
发送http(https)请求并构造一个url来获得一个response对象,由此来在以后的步骤中获取http(https)请求的响应结果,发送请求的方式有以下八种:
requests.get(‘url’, params=None, **kwargs)
#请求指定的页面信息,并返回实体主体
requests.post(‘url’, data=None, json=None, **kwargs)
#向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改
requests.put(‘url’, data=None, **kwargs)
#从客户端向服务器传送的数据取代指定的文档的内容
requests.delete(‘url’, **kwargs)
#请求服务器删除指定的页面
requests.head(‘url’, **kwargs)
#类似get,返回的响应中没有具体的内容,用于获取报头
requests.patch(url, data=None, **kwargs)
#回显服务器收到的请求,主要用于测试或诊断
Requests.options(‘url’,**kwargs)
#允许客户端查看服务器的性能
其中url为新request对象的url,params为要在request对象的查询字符串中发送的字典或者字节。Data参数为字典或元组列表、字节或类似文件的对象,此参数在request的响应正文中发送。Json参数为json数据,此数据在request的响应正文中发送。
集成输出用法为变量名.url。
2. 请求HTTP响应正文
一个http响应的格式大多为响应行/响应报头/(空行)响应正文。利用requests 库对此响应进行封装将其封装成一个response对象,在调用时可以从此对象中获取响应正文的内容。
利用response.text方法可以对响应的正文文本内容进行获取,使用方法为:
变量名.text
Requests库会自动对响应正文进行解码,若response.encoding为空,编码是通过chardet.detect方法(根据给定字节来进行猜测来返回它的编码,一般都是很准的)来进行获取的。当可以完全确定响应的编码方式,也可以先对response.encoding中的charset进行设置,然后再通过response.text获取响应正文,这时解码所得的响应正文就是charset的值了。
利用response.content可以获取响应正文中的二进制字节内容,如果响应正文的内容形式确定是一json串,则可以使用response.json()方法对响应正文进行json decode操作并返回一个字典项来对此json串进行解码翻译。
变量名.content
变量名.json
3. 返回并识别响应状态
在requests库中利用status_code()方法来对http请求响应的状态码进行标识,其使用方法为:
变量名.status_code
在对状态码进行标识后,利用raise_for_status方法对状态码进行状态识别,如果响应返回的是404一类,使用此方法会抛出异常,若返回的状态码为200,则使用此方法并不会抛出异常。此方法的使用格式为:
变量名.raise_for_status
4. 获得http响应结果的头部的相关信息或定制http请求的头部。
Requests库中的headers属性是一个字典,可以由此获得http响应结果的头部的相关信息,其使用方法为:
变量名.headers
Requests支持定制http请求的头部。为此,我们只需要构造一个字典,然后传给requests.get()的headers参数即可。
url = 'http://httpbin.org/headers'
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
print r.text
http://httpbin.org/headers 这个链接可以输出请求的头部,由于我们修改了请求头的user-agent字段,所以会访问这个链接会返回:
{
“headers”: {
“Accept”: “/“,
“Accept-Encoding”: “gzip, deflate”,
“Host”: “httpbin.org”,
“User-Agent”: “my-app/0.0.1”
}
}
5. 发送post请求
http请求由请求行,请求报头,消息主体构成,若提交的数据类型为post型,服务端会根据请求头中的Content-Type字段来获取请求中的消息主体是用何种方式进行编码的,之后再对消息主体进行解体。消息主体具体的编码方式有三种:
application/x-www-form-urlencoded
# 最常见post提交数据的方式,以form表单形式提交数据。
application/json
# 以json串提交数据。
multipart/form-data
# 一般使用来上传文件。
同时Reqeusts支持以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可。还可以以json形式(传给data参数)和multipart形式(files参数)发送post请求。
6. 使用requests库可以轻松获取响应的cookies和设置请求的cookies
利用requests.cookies可访问响应带上的cookies,此方法为响应cookies的字典。使用格式为:
变量名.cookies
也可以发送带cookies的请求,直接将发送过去的url参数后加上此参数并赋值即可。
7. 请求超时
Requests允许对一个http请求设置超时的时间,只需要在requests.get()或者requests.post()方法的timeout参数设置一个值(单位为秒)即可,超出此请求响应时限系统就会抛出异常。
url = 'http://httpbin.org/get'
r = requests.get(url, timeout=0.001)
8. 异常处理
在发送http请求时,由于各种原因,requests可能会请求失败而抛出异常。常见的异常包括:
ConnectionError
# 由于网络原因,无法建立连接。
HTTPError
# 如果响应的状态码不为200,Response.raise_for_status()会抛出HTTPError 异常。
Timeout
# 超时异常。
TooManyRedirects
若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。
所有requests抛出的异常都继承自 requests.exceptions.RequestException类。
requests库写接口测试框架初学习的更多相关文章
- 使用python requests库写接口自动化测试--记录学习过程中遇到的坑(1)
一直听说python requests库对于接口自动化测试特别合适,但由于自身代码基础薄弱,一直没有实践: 这次赶上公司项目需要,同事小伙伴们一起学习写接口自动化脚本,听起来特别给力,赶紧实践一把: ...
- 使用Python的requests库进行接口测试——session对象的妙用
from:http://blog.csdn.net/liuchunming033/article/details/48131051 在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有 ...
- 用python requests库写一个人人网相册爬虫
担心人人网会黄掉,写个爬虫,把我的相册照片都下载下来.代码如下: # -*- coding: utf-8 -*- import requests import json import os def m ...
- 利用Requests库写爬虫
基本Get请求: #-*- coding:utf-8 -*- import requests url = 'http://www.baidu.com' r = requests.get(url) pr ...
- vue框架初学习的基本指令
学习地址:<ahref="https: cn.vuejs.="" org="" "="" targe ...
- 使用Python的requests库作接口测试——对HTTP动词的支持
Requests提供了几乎所有HTTP动词的功能:GET,OPTIONS, HEAD,POST,PUT,PATCH和DELETE. 动词GET-查看提交信息 HTTP GET是一个幂等的方法,从给定的 ...
- 用Python的requests库作接口测试——对响应进行迭代
使用 requests.Response.iter_lines() 方法,可以很方便地对流式API(例如 Twitter的流式API )的响应进行迭代. 简单地设置 stream 为 True 便可以 ...
- 用Python的requests库作接口测试——上传文件
POST一个多部分编码(Multipart-Encoded)的文件 Requests使得上传多部分编码文件变得很简单: >>> url = 'http://httpbin.org/p ...
- 使用Python的requests库作接口测试——请求对象与响应对象
任何时候调用requests.*()操作接口时,我们都在做两件事情: 1.构建一个Request对象,该对象被发送到服务器去请求或查询一些资源: 2.一旦requests得到一个从服务器返回的响应,就 ...
随机推荐
- Python3 视频教程,全网最全的视频教程,爬虫,从入门到实战
需要联系我:QQ:1844912514 最新Python基础班+就业班视频教程 链接: python分布式爬虫打造搜索引擎链接: https://pan.baidu.com/s/1N7HL7U0gQX ...
- Linux调整日期时间
Linux日期不准确,要更改 Linux 系统整个系统范围的时区可以使用如下命令: sudo rm -f /etc/localtime sudo ln -s /usr/share/zoneinfo/A ...
- 在Asp.Net Core中集成Kafka
在我们的业务中,我们通常需要在自己的业务子系统之间相互发送消息,一端去发送消息另一端去消费当前消息,这就涉及到使用消息队列MQ的一些内容,消息队列成熟的框架有多种,这里你可以读这篇文章来了解这些MQ的 ...
- 【python 字符串】 字符串的相关方法(二)
查找元素所在的第一个的索引位置 text.find() 可有开始和结束位置查找 find('ex',3,6) # 查找元素的索引位置 text = 'alexalex' ret = text. ...
- element 给table的个别表格框添加样式 ---重构里面的组件
<el-table ref="singleTable" :show-header='false' :data="tableData" align='cen ...
- oracle篇 之 单行函数
一.分类 1.单行函数:需要处理的行数和返回结果的行数相等(单行进单行出) 2.多行函数(组函数):返回结果的行数少于要处理的行数(多行进单行出) 二.字符处理相关函数 1.lower:字符串转换成小 ...
- 图片的HTML
Code <center> <img style="border-radius: 0.3125em; box-shadow: 0 2px 4px 0 rgba(34,36, ...
- c语言利用读取命令行(多行读取)
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { FILE *fh = po ...
- Keras 获取中间某一层输出
1.使用函数模型API,新建一个model,将输入和输出定义为原来的model的输入和想要的那一层的输出,然后重新进行predict. #coding=utf-8 import seaborn as ...
- nsx-edge虚拟机抓包实践
Edge抓包 今天在客户端进行故障排除时,我需要在环境中的一个边缘服务网关上执行包捕获.在诊断一系列不同的问题时,执行包捕获通常非常有用. 要启动包捕获,您可以跳到ESG的控制台,或者像我在本例中所做 ...