【软件测试】基于 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"}}
<class'dict'>
响应内容:{'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": "beihe@163.com",
        "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 认证的接口。

在这里插入图片描述

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 的接口。

在这里插入图片描述

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G皮T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值