学习网址:    https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dscpm/ff75b907-415d-4220-89ec-117a39805a6d

      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 的箴言为中心开发的

  1. Beautiful is better than ugly.(美丽优于丑陋)
  2. Explicit is better than implicit.(直白优于含蓄)
  3. Simple is better than complex.(简单优于复杂)
  4. Complex is better than complicated.(复杂优于繁琐)
  5. Readability counts.(可读性很重要)
  6. 对于 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库写接口测试框架初学习的更多相关文章

  1. 使用python requests库写接口自动化测试--记录学习过程中遇到的坑(1)

    一直听说python requests库对于接口自动化测试特别合适,但由于自身代码基础薄弱,一直没有实践: 这次赶上公司项目需要,同事小伙伴们一起学习写接口自动化脚本,听起来特别给力,赶紧实践一把: ...

  2. 使用Python的requests库进行接口测试——session对象的妙用

    from:http://blog.csdn.net/liuchunming033/article/details/48131051 在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有 ...

  3. 用python requests库写一个人人网相册爬虫

    担心人人网会黄掉,写个爬虫,把我的相册照片都下载下来.代码如下: # -*- coding: utf-8 -*- import requests import json import os def m ...

  4. 利用Requests库写爬虫

    基本Get请求: #-*- coding:utf-8 -*- import requests url = 'http://www.baidu.com' r = requests.get(url) pr ...

  5. vue框架初学习的基本指令

           学习地址:<ahref="https: cn.vuejs.="" org="" "="" targe ...

  6. 使用Python的requests库作接口测试——对HTTP动词的支持

    Requests提供了几乎所有HTTP动词的功能:GET,OPTIONS, HEAD,POST,PUT,PATCH和DELETE. 动词GET-查看提交信息 HTTP GET是一个幂等的方法,从给定的 ...

  7. 用Python的requests库作接口测试——对响应进行迭代

    使用 requests.Response.iter_lines() 方法,可以很方便地对流式API(例如 Twitter的流式API )的响应进行迭代. 简单地设置 stream 为 True 便可以 ...

  8. 用Python的requests库作接口测试——上传文件

    POST一个多部分编码(Multipart-Encoded)的文件 Requests使得上传多部分编码文件变得很简单: >>> url = 'http://httpbin.org/p ...

  9. 使用Python的requests库作接口测试——请求对象与响应对象

    任何时候调用requests.*()操作接口时,我们都在做两件事情: 1.构建一个Request对象,该对象被发送到服务器去请求或查询一些资源: 2.一旦requests得到一个从服务器返回的响应,就 ...

随机推荐

  1. 【zabbix教程系列】五、邮件报警设置(脚本方式)

    本方式是使用外部邮箱账号发送报警邮件到指定邮箱. 好处是:此邮箱账号既能发送邮件,也能接收邮件,而且避免被当做垃圾邮件. 一.zabbix-server端安装mailx服务 [root@ltt01 ~ ...

  2. Jenkins+Git+Maven搭建自动化构建平台

    http://blog.csdn.net/xlgen157387/article/details/50353317

  3. 清北学堂(2019 4 28 ) part 1

    今天主要用来铺路,打基础 枚举 没什么具体算法讲究,但要考虑更优的暴力枚举方法,例如回文质数,有以下几种思路: 1.挨个枚举自然数,再一起判断是否是回文数和质数,然而一看就不是最优 2.先枚举质数再判 ...

  4. whois 查询 API

    项目介绍 免费Whois查询接口,完全开放 API接口,返回JSON格式数据(支持POST,GET方式) 网页查询接口(支持POST,GET方式) 测试接口 页面: http://whois.tt80 ...

  5. 使用jquery移除前面通过onclick绑定的元素的事件,然后重新绑定别的函数来执行onclick事件。

    http://caibaojian.com/css3/experience/bugs.htm 使用jquery移除前面通过onclick绑定的元素的事件,然后重新绑定别的函数来执行onclick事件. ...

  6. 数据分析三剑客之Matplotlib

    Matplotlib绘图和可视化 简介 我的前面两篇文章介绍了 Nimpy ,Pandas .今天来介绍一下Matplotlib. 简单来说,Matplotlib 是 Python 的一个绘图库.它包 ...

  7. MT【330】u,v,w法

    已知$a^2+b^2+c^2=1$求$abc(a+b+c)$的最小值.(2018辽宁预赛解答压轴题) 不妨设$a+b+c=3u,ab+bc+ca=3v^2,abc=w^3$,令$u^2=tv^2$要求 ...

  8. JS学习笔记Day23

    一.什么是Promise (一)Promise是ES6新增的解决异步(非阻塞)中存在的问题而产生的构造函数 二.Promise中的三种状态 pending(进行中) resoved(成功后) reje ...

  9. 把xml数据直接插入到sqlserver数据库

    存储过程: ALTER proc [ali].[ins_冻结金额表] @xmldoc varchar(max), ) as declare @idoc int exec sp_xml_prepared ...

  10. head里两个重要标签base和meta

    base标签 <base href="../"> 我们并不常用的一个标签,但是一旦用得不当会带来灾难性的影响. 它会影响到所有页面上的href和src属性相对路劲的定位 ...