Python介面自動化測試(1)
阿新 • • 發佈:2020-11-13
介面自動化測試三部曲: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: