接口自動化(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),謝謝大家

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