python+requests 接口自動化

  利用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 =============')

  得出控制檯運行結果。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章