【软件测试】基于 requests 框架实现接口自动化测试

基于 requests 框架实现接口自动化测试

requests 库是一个常用的用于 http 请求的模块,它使用 python 语言编写,在当下 python 系列的接口自动化中应用广泛,本文将带领大家深入学习这个库。

方法 含义
requests.get() 发起 get 请求调用
requests.post() 发起 post 请求调用
requests.put() 发起 put 请求调用
requests.delete() 发起 delete 请求调用
requests.session() 获取 requests 的 session 对象
requests.session().request() 也是发起请求,可以自动管理 cookie

1. get 请求

import requests

host = 'http://10.0.0.18:8080'

def get():
    url = host + '/pinter/com/getSku' # 接口地址
    params={
        'id':1
    }

    resp = requests.get(url,params=params)

    status_code = resp.status_code # 获取响应状态码
    print('响应状态码:{}'.format(status_code))

    text = resp.text # 获取响应内容,结果类型是字符串
    print('响应内容:{}'.format(text))

    json=resp.json() # 获取响应内容,结果是字典类型
    print('响应内容:{}'.format(json))

    resp_headers = resp.headers #获取响应headers
    print('响应header:{}'.format(resp_headers))

if __name__ == '__main__':
    get()

结果如下:

响应状态码:200 
响应内容:{"code":"0","message":"success","data":{"skuId":1,"skuName":"ptest-1","price":"645","stock":709,"brand":"testfan"}}

响应内容:{'code':'0','message':'success','data':{'skuId':1,'skuName':'ptest-1','price':'645','stock':709,'brand':'testfan'}}
响应header:{'Content-Type':'application/json;charset=UTF-8','Transfer-Encoding':'chunked','Date':'Fri,12Mar202122:13:49GMT','Keep-Alive':'timeout=20','Connection':'keep-alive'}

2. post 请求

表单格式的参数:

import requests 

host = 'http://10.0.0.18:8080'

def post():
    url = host+'/pinter/com/login'

    # 表单参数
    data = {
       'userName': '沙陌',
       'password': '123456'
     }

    resp = requests.post(url=url, data=data)

    status_code = resp.status_code  # 获取响应状态码
    print('响应状态码:{}'.format(status_code))

    text = resp.text  # 获取响应内容,结果类型是字符串
    print('响应内容:{}'.format(text))

    json = resp.json()  # 获取响应内容,结果是字典类型
    print('响应内容:{}'.format(json))

    resp_headers = resp.headers  # 获取响应headers 
    print('响应header:{}'.format(resp_headers))

JSON 格式的参数:

import requests

host = 'http://10.0.0.18:8080'

def post_json():
    url = host+'/pinter/com/register'

    # header里定义参数类型
    headers={
        'Content-Type':'application/json'
    }
  
    # json参数
    json = {
        "userName": "沙陌",
        "password": "1234",
        "gender": 1,
        "phoneNum": "110",
        "email": "[email protected]",
        "address": "Beijing"
    }

    resp = requests.post(url=url, json=json)

    status_code = resp.status_code  # 获取响应状态码
    print('响应状态码:{}'.format(status_code))

    text = resp.text  # 获取响应内容,结果类型是字符串
    print('响应内容:{}'.format(text))

    json = resp.json()  # 获取响应内容,结果是字典类型
    print('响应内容:{}'.format(json))

    resp_headers = resp.headers  # 获取响应headers
    print('响应header:{}'.format(resp_headers))

3. put 请求

import requests

host = 'http://10.0.0.18:8080'

def put():
    url = host + '/pinter/com/phone' #接口地址

    # 参数
    json = {
        "brand": "Huawei",
        "memorySize": "64G",
        "cpuCore": "8核",
        "price": "8848",
        "desc": "全新上市"
    }
    
    resp = requests.put(url=url, json=json)

    status_code = resp.status_code  # 获取响应状态码
    print('响应状态码:{}'.format(status_code))

    text = resp.text  # 获取响应内容,结果类型是字符串
    print('响应内容:{}'.format(text))

    json = resp.json()  # 获取响应内容,结果是字典类型
    print('响应内容:{}'.format(json))

    resp_headers = resp.headers  # 获取响应headers
    print('响应header:{}'.format(resp_headers))

4. delete 请求

import requests

host = 'http://10.0.0.18:8080'

def delete():
    url = host + '/pinter/com/phone' #接口地址

    # 参数
    json = {
        "brand": "Huawei",
        "memorySize": "64G",
        "cpuCore": "8核",
        "price": "8848",
        "desc": "全新上市"
    }
    
    resp = requests.delete(url=url, json=json)

    status_code = resp.status_code  # 获取响应状态码
    print('响应状态码:{}'.format(status_code))

    text = resp.text  # 获取响应内容,结果类型是字符串
    print('响应内容:{}'.format(text))

    json = resp.json()  # 获取响应内容,结果是字典类型
    print('响应内容:{}'.format(json))

    resp_headers = resp.headers  # 获取响应headers
    print('响应header:{}'.format(resp_headers))

5. requests.session.request

可以自动管理 cookie,比如如下需要采用 cookie 认证的接口。

【软件测试】基于 requests 框架实现接口自动化测试_第1张图片

import requests

host = 'http://10.0.0.18:8080'
session = requests.session

def query():
    # 查询余额
    url = host +'/pinter/bank/api/query'  # 接口地址
    params = {
        'userName':'admin'
    }
    
    resp = session.request(url=url, method='get', params=params)
    
    status_code = resp.status_code  # 获取响应状态码
    print('响应状态码:{}'.format(status_code))
    
    text = resp.text  # 获取响应内容,结果类型是字符串
    print('响应内容:{}'.format(text))
    
def login():
    # 登录
    url = host + '/pinter/bank/api/login'
    # 表单参数
    data = {
        'userName': 'admin',
        'password': '1234'
    }
    session.request(url=url, method='post', data=data)

if __name__ == '__main__':
    login()
    query()

结果如下:

响应状态码:200 
响应内容:{"code":"0","message":"success","data":"$74,780,457"}

6. token 关联的接口

对于需要 token 关联的接口来说,需要从登录接口的返回值中提取 token 信息,并传递给需要 token 的接口。

【软件测试】基于 requests 框架实现接口自动化测试_第2张图片

import jsonpath
import requests

host = 'http://10.0.0.18:8080'
session = requests.session()

def query():
    # 查询余额
    url = host + '/pinter/bank/api/query2'  # 接口地址
    headers = {
        'testfan-token': token  # 加入token字段
    }
    params = {
        'userName': 'admin'
    }
    resp = session.request(url=url, method='get', params=params, headers=headers)

    status_code = resp.status_code  # 获取响应状态码
    print('响应状态码:{}'.format(status_code))
    text = resp.text  # 获取响应内容,结果类型是字符串
    print('响应内容:{}'.format(text))

def login():
    # 登录
    global token
    url = host + '/pinter/bank/api/login2'
    # 表单参数
    data = {
        'userName':'admin',
        'password':'1234'
    }
    resp = session.request(url=url, method='post', data=data)
    resp_json = resp.json()
    token = jsonpath.jsonpath(resp_json, '$.data')[0]  # 使用jsonpath从响应结果中提取data字段

if __name__ == '__main__':
    login()
    query()

结果如下:

响应状态码:200 
响应内容:{"code":"0","message":"success","data":"$74,780,457"}

requests 库的请求方法里参数众多,所以简单划分一下:

  • 查询参数就用 params = params
  • 表单参数就用 data = data
  • json 参数就用 json = json
  • 请求头信息header就用 headers = headers

你可能感兴趣的:(软件测试,python,requests,测试,接口测试,自动化测试)