1. 程式人生 > 實用技巧 >Python介面自動化測試(1)

Python介面自動化測試(1)

介面自動化測試三部曲:1、構造請求 2、判斷結果 3、資料庫查詢

1、Python的第三方包:requests

簡介:requests可以用來做介面測試、介面自動化測試、爬蟲等

requests的環境搭建:管理員身份在cmd執行:pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple(pip和pip3是一樣的東西,但是安裝了loadrunner的接只能用pip3不能用pip了)

requests如何做http請求(請求介面)

1.1、匯入包:importrequests

1.2、構造請求:

如果是get請求:

#用url存放介面地址,注意要加引號
#獲取首頁輪播圖介面地址 url = "http://118.24.105.78:2333/get_title_img" #介面地址一定是一個字串 h = {"Content-Type":"application/json"} #使用requests去請求get型別的介面,最終的返回值就是介面返回的內容了 res = requests.get(url=url,headers=h) #就相當於postman裡邊去填寫介面地址 #獲取返回值:res.text print(res.text)

如果是post請求:

#post請求:使用者登入介面 (依次從介面文件上填寫請求地址、請求頭、請求資料)
u = "http://118.24.105.78:2333/login" #介面地址 h = {"Content-Type":"application/json"} #請求頭:字典格式 d = {"username":"liuyun1","password":"a12345678"} #請求資料:json格式、字典 res = requests.post(url=u,headers=h,json=d) #依次傳參 print(res.text)

1.3、判斷結果(以使用者登入為例)

需要判斷兩個結果,先是介面狀態碼,後是返回值結果碼

首先需要通過判斷介面狀態碼看介面是否正確(如果介面都不正確了,就沒有必要看返回結果了),然後看介面返回結果中的status是否=200,等於200標誌著介面執行成功(返回的結果是字串型別的字典格式,我們首先要將字串真正的轉換為字典,這裡字串轉地址用魔鬼方法evar也不行,只能用.json()方法)

#判斷結果(要判斷兩個:先介面狀態碼和後結果返回值)
#狀態碼:標誌著介面的狀態:預判介面是否有問題       res.status_code獲取狀態碼
assert res.status_code == 200     #執行這步要把前面的print(res.text)刪掉或者註釋掉
#結果返回值(結果碼)  介面返回的結果是放在res中了,但是它存放的是字串型別,python中用res.json()將字串轉換為字典型別
assert res.json()["status"] == 200

在這裡可能會遇到斷言錯誤的問題,以註冊為例

遇到這種情況,就要排查,首先從日誌中可以看出是判斷結果碼那塊的斷言報錯,說明介面返回的結果碼不等於200,我們可以先把介面返回的結果打印出來

1.4、查詢資料庫

使用pymysql查詢資料庫,由於前面已經封裝好了pymysql的查詢方法,要想查詢資料庫,首先就是將qurey方法匯入進來:fromdbtoolsimportquery(兄弟關係導方法)

#查詢資料庫
sql = "select * from t_user where username = '{}'".format(d["username"])
# print(sql)   #從這裡就可以看見資料庫語句拼接起來了
# r = query(sql)
assert len(query(sql)) != 0
print("登入成功的測試用例通過")

注意注意:由於我們是呼叫的query方法,封裝query()方法時的url地址一定要和構造請求的url地址一致,否則會報錯(介面地址要和資料庫地址一致)

2、關聯

以登入-退出登入為例

import requests
from dbtools import query

#登入
u = "http://118.24.105.78:2333/login"
h = {"Content-Type":"application/json"}
d = {"username":"liuyun1","password":"a12345678"}

res = requests.post(url=u,headers=h,json=d)

assert res.status_code == 200
assert res.json()["status"] == 200

sql = "select * from t_user where username = '{}'".format(d["username"])
assert len(query(sql)) !=0
print("使用者登入成功")

#取token值
token = res.json()["data"]["token"]

#關聯使用者退出
u = "http://118.24.105.78:2333/logout"
h = {"Content-Type":"application/json","token":token}

res = requests.get(url=u,headers=h)

assert res.status_code == 200
assert res.json()["status"] == 200
print("使用者退出登入成功")

the end: