接口自动化(python+requests)

利用python和第三方库requests进行接口自动化测试(python+requests)

第三方库requests简单介绍

Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。更重要的一点是它支持 Python3 。

大概步骤

  1. Request是第三方库,需要手动安装:CMD安装即可----命令:pip install requests
  2. 在pycharm先导入requests第三方库,代码—import requests
  3. 发送请求—http.get请求:requests.get(‘https://api.github.com/events’)
  4. 发送请求—http.post请求:requests.post(‘http://httpbin.org/post’, data = {‘key’:‘value’})
  5. 构建URL参数等
  6. 结合Python进行返回参数进行验证
  7. 运行即可(请求失败可抓包查看发送参数是否有误)

详细介绍

以下主要介绍两种常用http请求:get和post,以及delete

下图为本次编写代码测试的用例
在这里插入图片描述
具体代码:

第一步:安装完后直接导入requests使用

#导入requests
import requests

第二步:利用Python+requests编写代码构建请求

#登录接口--post请求
这里需要注意,除了返回接口内容,还需要返回cookies,因为后面的操作需要用到登录身份标识
def Login(user,passw):
    payload = {
        'username': test,
        'password': 123456
    }
    # data参数 就是构造消息体的
    response = requests.post("http://localhost/XXXX",
                             data=payload)                      
    # 获取结果,返回给调用者
    retDict = response.json()
    # 在控制台打印出结果
    print(retDict)
    #返回结果,调用时需要用到
    return retDict, response.cookies
#添加课程接口--post请求
这里需要注意,请求参数需要加上cookies,因为后面的操作需要用到登录身份标识
def  add_course(action,name,desc,dis,sessionid):
    re={'action':action,
        'data':'''
            {
                "name": "%s",
                "desc": "%s",
                "display_idx": "%s"
            }
            '''% (name,desc,dis)
        }
    rs=requests.post("http://localhost/XXXX",data=re,cookies={'sessionid': sessionid})
    re=rs.json()
    print(re)
    return re
#列出课程接口--get请求
def  list_course(sessionid):
    parm={
       'action' :'list_course',
        'pagenum':1,
        'pagesize':20
    }
    # he = {"Content-Type": "application/json"}
    rs=requests.get("http://localhost/XXXX",params=parm,cookies={'sessionid': sessionid})
    liechu=rs.json()
    print(liechu)
    return liechu
#删除课程接口--delete请求
def delete_course(courseid,sessionid):
    payload = {
        'action': 'delete_course',
        'id': f'{courseid}'
    }

    response = requests.delete("http://localhost/XXXX/",
                               data=payload,
                                cookies={'sessionid': sessionid})

    r = response.json()
    pprint.pprint(r)
    return r

第三步:利用Python对requests返回的参数进行验证

#因为这块代码是新建了另一个Python文件编写。所以这里需要先导入上面的Python文件才可以调用里面的函数
from jiakouzudonghua import aba

#导入随机数函数
import random

# 利用写好的登录接口进行登录
# loginRet保存登录接口返回是否登录成功的参数,cookies保存登录成功返回的cookie
loginRet,cookies = aba.Login('auto','sdfsdfsdf')

#使用if判断是否登录成功,可直接使用assert验证
if loginRet["retcode"] == 0:
    print('登录成功')
else:
    print('登录失败')

# 记录下sessionid
sessionid =cookies['sessionid']

#这里课程使用了随机数,最大程度确保每次运行不会创建到同名课程
classname=('课程'+str(random.randint(0,99999999999)))

# 第一次先列出课程,为后面比较做准备
coureListBefore = list_course(sessionid)['retlist']

# 添加一门课程,且使用assert进行验证,对则不会反悔信息,错则返回错误信息
retDict = add_course('classname','php语言','2',sessionid)
assert  retDict['retcode'] == 0
#也可用if进行验证
# if retDict['retcode'] == 0:
#     print('添加课程成功')
# else:
#     raise Exception('添加课程失败')


# 第二次再列出课程
coureListAfter = list_course(sessionid)['retlist']

#使用len计算添加课程前和添加课程后的课程数量,然后相减等于1则证明成功,也可直接取返回的课程数量total进行验证
createCount = len(coureListAfter) - len(coureListBefore)
assert createCount == 1

# 取出,多出来的一门课程对象
newcourse = None
for one in coureListAfter:
    if one not in coureListBefore:
        newcourse = one
        break

# 检查是否是刚刚添加的课程
assert newcourse!=None
assert newcourse['name']=='classname'
assert newcourse['desc']=='php语言'
assert newcourse['display_idx']==2


# 清除环境操作,删除刚刚添加的课程
delete_course(newcourse['id'],sessionid)

print('\n========= test case pass =============')

控制台运行结果:
在这里插入图片描述
最后:简单的接口自动化已经完成

有不足的地方请留言指正或加QQ讨论(1441302865),谢谢大家

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值