【Pytest requests模块&】


一、requests模块

是一个第三方库,主要用于发送http请求,主要做接口自动化

1、安装pip install requests

2、requests模块的全局

请求:

  • requests.get() 发送get请求
    • get(url, params=None, **kwargs): url请求路径,params传递参数,**kwargs可变长度字典用于传递其他参数
  • requests.post() 发送post请求
    • post(url, data=None, json=None, **kwargs): url请求路径,data传递参数,json传递参数,**kwargs可变长度字典用于传递其他参数
    • data和json两者都是传参,区别是什么?主要区别是传递的参数所依赖的头类型
    1. 请求的参数是:form-data 代表这是表单传参或者文件上传,type=file; Content-Type:multipart/form-data;
    2. 请求的参数是:x-www-form-urlencoded 代表表单传参(k1=v1,k2=v2) Content-Type:application/x-www-form-urlencoded(data传参)
    3. 请求的参数是:raw,代表原始格式传参 text:Content-Type:text/plain(data传参) javascript: Content-Type:application/javascript json: Content-Type:application/json(json传参) html: Content-Type:text/html xml: Content-Type:application/xml
    4. 请求的参数是:binary,代表原始格式传参 Content-Type:application/octent-stream

      data传参为表单传参:默认的请求头是COntent-Type:application/x-www-form-urlencoded,请求参数是纯键值对的dict,如:{k1:v1,k2:v2}

      data传参为文本传参:默认的请求头:text/plan,参数:string类型

      json传参为json传参:默认的请求头:application/json,参数:dict类型

      json是包括有键值对和列表的dict类型

  • requests.delete() 发送delete请求
  • requests.put() 发送put请求
  • requests.request()   发送所有请求
    • request(method, url **kwargs) --->从源码看get,post这些方法调用的是request方法,而request最终会调用session.request() [重点看此方法]
    • method, 请求方式
      url, 请求路径
      params=None,get请求传参
      data=None, post请求和put请求传参
      json=None post请求传参 
      headers=None,请求头 
      cookies=None, cookie信息 
      files=None,文件上传 
      -----------下面只了解即可------------------- 
      auth=None, 鉴权 
      timeout=None, 超时 
      allow_redirects=True, 是否允许重定向 
      proxies=None,设置代理 
      hooks=None, 
      stream=None,文件下载 
      verify=None, ssh认证 
      cert=None,CA证书 
  • requests.session() 发送回话对象 

响应

import requests
rep = requests.request()
rep.text  # 返回字符串的数据 --适用:文本
rep.content # 返回字节格式的数据 --适用:图片或文件
rep.json()# 返回字典格式的数据 --适用:json
rep.status_code # 状态码
rep.reason  # 状态信息
rep.cookies  # 返回cookie信息
rep.encoding  # 返回编码格式
rep.headers # 返回响应头信息

二、接口实战

json.dumps()  字典转换成字符串

json.loads()  字符串转换成字典

1、接口常见请求方式:get post put delete

2、请求参数类型:键值对,JSON格式,文件格式

#案例:get接口请求、设计字段的用例及断言

import requests
import time
import json
import pytest

# 发送get请求
url = 'http://tkio-receive.solar-engine.com/receive/turl/Bf6JBva'
global parms
parms = {
    # 触点传参时间。is_s2s=1时必传,0时选传。不同渠道有可能传多种格式,详见需求。限制32位字符内。短链传参。
    'ry_touchpoint_ts': int(round(time.time() * 1000)),
    'ts': int(round(time.time() * 1000)),
    # 集成方式。is_s2s=1为服务器上报触点,0为客户端上报触点。0或1时有不同的参数非空校验,详见需求。固定为0或1。都必传
    'is_s2s': '1',
    # 操作系统。限制16字符内。都选传。短链传参。暂不与app_platform互相做校验。
    'os': 'ios'
}
# param参数转换成json格式
json.dumps(parms)
# 封装get请求
def send_get():
    global parms
    rep = requests.get(url=url,params=parms,timeout=10, verify=False)
    print(type(parms))
    print(rep.url)
    # 把返回的reponse转换成字典格式
    rep = json.loads(rep.text)
    print(type(rep))
    return rep

# 针对os字段做测试
def test_idfa1():
    # case1:修改parms里面os的值为2
    parms['os'] = '2'
    re = send_get()
    assert re["status"] == 119
def test_idfa2():
    # case2:修改parms里面os的值为2
    parms['os'] = '3'
    re = send_get()
    assert re["status"] == 119

if __name__ == '__main__':
    pytest.main()

 # 案例:post请求的接口

相关