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得到一个从服务器返回的响应,就 ...
随机推荐
- 龙光集团地产跃居“中国房地产500强TOP28”
3月20日,由中国房地产业协会.上海易居房地产研究院中国房地产测评中心联合主办的2019中国房地产500强测评成果发布会在北京成功举办.本次测评成果显示,龙光集团地产凭借综合实力,不仅成功跻身“中国房 ...
- html中title小图标的实现
<link rel="icon" href="picture.ico" type="image/x-icon"/> 注意:图片的 ...
- Java内存溢出和内存泄露后怎么解决
1.首先这里先说一下内存溢出和内存泄露的区别: 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但 ...
- leanote使用本地账户时,去掉待同步的小红点
切换开发者工具,如下图,点击左上角的箭头图标,选取元素,直接选择小红点. 然后会看到小红点来自于resources/app/public/themes/default.css文件中2092行: .it ...
- awk 计算某一列的和
awk 计算某一列的和 我需要通过nova list 显示所有虚拟机的cpu总和,即用awk计算某一列的综合 [root@control01 ~]# nla | awk -F '|' 'BEGIN{s ...
- JDK源码分析(8) StringBuffer & StringBuilder
简介 StringBuffer与StringBuilder是两个常用的操作字符串的类.大家都知道,StringBuilder是线程不安全的,而StringBuffer是线程安全的.前者是JDK1.5加 ...
- POJ 1848 Tree 树形DP
题目大意: 给出一棵树,现在要往这棵树上加边,使得所有的点都在环中,且每个点只能属于一个环 题解: 考虑DP: \(dp[i][0]\)表示使\(i\)这颗子树的每个点都在环内需要加的最少边数. \( ...
- .NET常用开发框架汇总
分布式缓存框架:Microsoft Velocity:微软自家分布式缓存服务框架.Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度.Redis:是一个高性能的KV数据 ...
- CDN-常用静态资源公共库
js.css 等静态资源可以放在自己的服务器上,或者引用网络上的公共库使用(CDN) CDN 读取失败时从本地加载 <script src="https://code.jquery.c ...
- Maven 学习总结 (五) 之 持续集成、构建web应用
持续集成的作用.过程和优势 简单说,持续集成就是快速且高频率地自动构建项目的所有源码,并为项目成员提供丰富的反馈信息. 快速:集成的速度要尽可能地快,开发人员不希望自己的代码提交半天之后才得到反馈. ...