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

  第三方库requests简单介绍

  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无锡妇科医院 http://www.bhnfk.com

  第三步:利用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 =============')

  得出控制台运行结果。