Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。更重要的一点是它支持 Python3 。
大概步骤
Request是第三方库,需要手动安装:CMD安装即可----命令:pip install requests
在pycharm先导入requests第三方库,代码—import requests
发送请求—http.get请求:requests.get(‘https://api.github.com/events’)
发送请求—http.post请求:requests.post(‘http://httpbin.org/post’, data = {‘key’:‘value’})
构建URL参数等
结合Python进行返回参数进行验证
运行即可(请求失败可抓包查看发送参数是否有误)
详细介绍
以下主要介绍两种常用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 =============')
控制台运行结果:
最后:简单的接口自动化已经完成
|
|