zoukankan      html  css  js  c++  java
  • requests库写接口测试框架初学习

    学习网址:    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

    # 如果响应的状态码不为200Response.raise_for_status()会抛出HTTPError 异常。

    Timeout

    # 超时异常。

    TooManyRedirects

    若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。

    所有requests抛出的异常都继承自 requests.exceptions.RequestException类。

  • 相关阅读:
    过河卒(Noip2002)
    暑假学习日记2013/7/18
    暑假学习日记2013/7/16
    iOS中利用CoreTelephony获取用户当前网络状态(判断2G,3G,4G) by徐文棋
    隐藏键盘的N种方法
    cell重用
    关于viewControllers之间的传值方式
    iOS开发之工欲善其事,必先利其器
    NSLog输出格式及随机数
    iOS团队代码规范
  • 原文地址:https://www.cnblogs.com/yiyi314/p/10788480.html
Copyright © 2011-2022 走看看