zoukankan      html  css  js  c++  java
  • 使用Requests库实现api接口测试(Python)

    1 目的

      构建HTTP请求消息,并且解析收到的HTTP响应消息,根据业务场景来判断是否符合预期。

    2 Requests库

      用来做收发http请求。

      Requests中文官网:https://2.python-requests.org/zh_CN/latest/

    2.1 构建请求

    2.2.1 构建请求头

    headers = { 'user-agent': 'my-app/0.0.1', 'auth-type': 'jwt-token' }
    r = requests.post("http://httpbin.org/post", headers=headers)

    2.2.2 构建请求消息体

    1)指定代理+get请求

    paras={
        'key1':'value1',
        'key2':'value2'
    }    
    proxies={
        'http':'http://127.0.0.1:8888',
        'https':'http://127.0.0.1:8888'
    }
    r=requests.get('url',proxies=proxies,params=paras)

    2)post请求,消息体格式可以是xml、json、urlencoded、自定义

    A. urlencoded格式

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

    B. json格式

    payload = '''{
      "form": {
        "key1": [
          "value1",
          "value2"
        ]
      }
    }'''
    #json格式里一定是双引号
    r = requests.post("http://httpbin.org/post", data=payload.encode('utf8'))  
    import json   #使用python中的数据对象,单、双引号都可以
    payload = {  ...
      "form": {
        "key1": [
          "value1",
          "value2"
        ]
      },
      ...
    }
    r = requests.post("http://httpbin.org/post",json=payload)   #使用json,底层使用jsondump将python对象变成字符串 

    2.2 HTTP响应检查

    1)检查http响应状态码:r.status_code

    2)检查响应消息头:r.headers、r.headers['Content-Type']

    3)检查响应消息体:r.text

    2.3 其他

    1)pprint采用分行打印输出(import pprint)

    2)r=requests.get("https://www.baidu.com")

       r.content  #获取字节串的内容

       r.content.decode('utf8')   #将获取的字节串内容,以utf8编码,解码成字符串

    3)若服务端没有在headers里指定编码格式,需要自己指定编码格式

       r.encoding='utf8'

       r.text

    4)json.dumps()  #将python中的对象序列为json格式的字符串

       json.loads()  #将json格式的字符串反序列化为python中的对象

    5)obi=r.json()   ==   obi=json.loads(r.content.decode('utf8'))

    3. session机制

    3.1 区别用户的机制

      用户使用客户端登录,服务端进行验证;验证通过后,服务端系统生成此时登录的一个seesion;session是一个数据结果,保存客户端用户登录的相关信息;同时创建一个唯一sessionid,标志这个session;服务端通过http响应headers的Set-Cookie下发sessionid;客户端在后续请求headers的Cookie中带上这个seesionid,服务端通过sessionid找到对应的session。

    3.2 requests处理session-cookie

      requests库提供了Session类。会自动存储sessionid,并且在后续的请求中带上sessionid。

    # 创建Session对象
    session = requests.Session()
    # 通过Session对象发送请求
    response = session.post('url',datd={
        'username':'xx',
        'password':'xxxx'
    })
    print(response)
    response = session.get('url',params={
        '':'',
        '':''
    })

    3.3 json任意key的value值获取方法:

    需要安装jsonpath,封装函数如下:
    import jsonpath as jsonpath
    
    def get_json_value(json_data, key_name):
        '''获取到json中任意key的值,结果为list格式'''
        key_value = jsonpath.jsonpath(json_data, '$..{key_name}'.format(key_name=key_name))
        # key的值不为空字符串或者为empty(用例中空固定写为empty)返回对应值,否则返回empty
    
        return key_value  

    调用函数如下:
    def get_iphone():
        url = url_web + '/phone/65ou4oadi7o7fuo'
        headers = {"Content-Type": "application/json", "key": "2dbe655e88c80"}
        tel = RequestHandler()
        response = tel.visit(method='get', url=url, headers=headers)
        assert response.status_code == 200
        logging.info('get iphone接口调用成功成功,status_code == 200 ')
        r = response.json()  # 返回json数据
        mobile = get_json_value(r, "mobile")
        return mobile
    

      

  • 相关阅读:
    Ubuntu 指令汇总
    ROS环境下Pointgrey相机的配置方法
    BUG战斗史 —— 日期格式与字符串之间的转换
    Effective Java —— 使类和成员的可访问性最小化
    JDBC和桥接模式
    Effective Java —— 覆盖equals时总要覆盖hashCode
    AutoValue —— Generated immutable value classes
    Effective Java —— 覆盖equals时遵守通用约定
    Effective Java —— try-with-resources 优先于 try-finally
    Effective Java —— 消除过期的对象引用
  • 原文地址:https://www.cnblogs.com/lucylu/p/13193348.html
Copyright © 2011-2022 走看看