Python3利用HTTPTestRunner進行介面測試
阿新 • • 發佈:2018-12-09
匯入HTTPTestRunner後,對一些常用方法進行了封裝,之後只要呼叫即可。實現一條語句完成請求
約定:請求的json檔案放在本目錄的特定資料夾下
包含了各種請求條件下的重寫方法,基本滿足需求
import requests import unittest import json import os from enum import unique from enum import Enum import random #列舉型別,規定方法呼叫,現在只支援get和post @unique class Method(Enum): get = 1 post = 2 delete = 3 patch = 4 class TestMyTest(unittest.TestCase): u""" 自己的測試,HTTPTestRunner 會將次加到註釋裡 """ # 基礎路徑 baseurl = "https://域名或ip地址" # 從檔案獲取json引數 def loadParams(self, filename): with open(os.getcwd() + os.path.sep + filename, encoding="utf-8", mode="r") as f: return json.load(f) #從檔案獲取簡單的文字引數 def loadSimpleParams(self,filename): with open(os.getcwd() + os.path.sep + filename, encoding="utf-8", mode="r") as f: return f.read() #random id用於給建立使用者時,新增一個隨機數 randomId = str(random.choice(range(100))) # 獲取登入cookies def loginCookies(self): loginuri = "/adminapi/login" res = requests.post(url=self.baseurl + loginuri, data=self.loadParams("params\login.json"), verify=False) return res.cookies # 獲取登入headers def loginHeaders(self): loginuri = "/adminapi/login" res = requests.post(url=self.baseurl + loginuri, data=self.loadParams("params\login.json"), verify=False) return res.headers #模板方法,需要傳入uri,引數,如果請求方式是method則不需要,post需要制定為post,返回result,如果不要cookie,則cookie="No" def myTest(self, testuri=None, data= None, verify=False, cookies="", method=Method.get): result = "" #如果cookie未賦值,則呼叫登入方法,獲取cookie,否則,使用使用者傳遞的cookie if cookies == "": cookies = self.loginCookies() if method == Method.get: result = requests.get(url=self.baseurl + testuri, data=data, verify=verify, cookies=cookies) elif method == Method.post: result = requests.post(url=self.baseurl + testuri, data=data, verify=verify, cookies=cookies) elif method == Method.delete: result = requests.delete(url= self.baseurl + testuri, verify = verify, cookies = cookies) elif method == Method.patch: result = requests.patch(url=self.baseurl + testuri, data = data, verify = verify, cookies = cookies) print(result.status_code) #print(result.json()) return result #不需要cookie,如login時使用 def myTestNoCookie(self, testuri=None, data= None, verify=False, method=Method.get): result = "" #如果規定cookie為No,則請求不新增cookie if method == Method.get: result = requests.get(url=self.baseurl + testuri, data=data, verify=verify) elif method == Method.post: result = requests.post(url=self.baseurl + testuri, data=data, verify=verify) print(result.status_code) #print(result.json()) return result #自定義cookies def myTestCookies(self, testuri=None, data= None, verify=False, cookies="", method=Method.get): result = "" #如果cookie未賦值,則呼叫登入方法,獲取cookie,否則,使用使用者傳遞的cookie if cookies == "": raise Exception("本方法 cookie 不能為空") if method == Method.get: result = requests.get(url=self.baseurl + testuri, data=data, verify=verify, cookies=cookies) elif method == Method.post: result = requests.post(url=self.baseurl + testuri, data=data, verify=verify, cookies=cookies) print(result.status_code) #print(result.json()) return result #沒有data的請求 def myTestNoData(self, testuri=None, verify=False, cookies="", method=Method.get): result = "" #如果cookie未賦值,則呼叫登入方法,獲取cookie,否則,使用使用者傳遞的cookie if cookies == "": cookies = self.loginCookies() if method == Method.get: result = requests.get(url=self.baseurl + testuri, verify=verify, cookies=cookies) elif method == Method.post: result = requests.post(url=self.baseurl + testuri, verify=verify, cookies=cookies) print(result.status_code) #print(result.json()) return result #模板方法,需要Contet-Type和Cookies的header的方法 def myTestWithHeader(self, testuri=None, data= None, verify=False, headers= "", method=Method.get): result = "" #如果cookie未賦值,則呼叫登入方法,獲取cookie,否則,使用使用者傳遞的cookie if headers == "": headers = {"Content-Type": self.loginHeaders()["Content-Type"], "Cookie": self.loginHeaders()["Set-Cookie"]} if method == Method.get: result = requests.get(url=self.baseurl + testuri, data=data, verify=verify, headers=headers) elif method == Method.post: result = requests.post(url=self.baseurl + testuri, data=data, verify=verify, headers=headers) elif method == Method.delete: result = requests.delete(url= self.baseurl + testuri) elif method == Method.patch: result = requests.patch(url=self.baseurl + testuri, data = data, verify = verify, headers=headers) print(result.status_code) #print(result.json()) return result #使用者登入 def test_login(self): result = self.myTestNoCookie(testuri="/adminapi/login",data= self.loadParams("params\login.json"), method=Method.post) self.assertEqual(200, result.status_code) self.assertEqual("操作成功", result.json()["message"]) #使用者登出 def test_logout(self): result = self.myTestNoData(testuri="/adminapi/logout", method= Method.post) self.assertEqual(200, result.status_code) self.assertEqual("操作成功", result.json()["message"])