論一下unittest測試框架間測試用例依賴的重要性,是值得每一個自動化開發工程師,必修的武功寶典了,且解決方法的姿勢也有千差萬別,且跟我細細品嘗。
使用公共方法,在其他用例獲取Token值
class InvestTests(unittest.TestCase):
@classmethod
def setUpClass(self):
pass
@classmethod
def tearDownClass(self):
pass
def setUp(self):
self.baseurl = "http://218.17.157.55/:18087"
self.headers = {"Content-Type":"application/json"}
def tearDown(self):
pass
def getToken(self,username):
url = self.baseurl + "/pj-common/login"
payload = {"username":username,"password":"123456w","imageCode":"111111","clientType":"WEB"}
response = requests.post(url, headers=self.headers,json=payload)
rsp = response.json()
if rsp:
return rsp["data"]["token"]
def test_invest(self):
#獲取Token
token = self.getToek(username='123')
#出借
try:
if token:
self.headers.update({"Authorization": "Bearer %s" % self.token})
url = self.baseurl + "/pj-p2p-core/appFront/planInvest/v3.0/submitInvestOrder"
payload = {"investAmt":int(300),"couponId":-1,"planId":int(49)} # 出借30天產品
response = requests.post(url,headers=self.headers,json=payload)
if response.status_code == 200:
print("出借成功1筆")
else:
print("出借失敗1筆")
else:
print("沒有獲取到token!!!")
except Exception as e:
print(e)
優缺點:
優點是用例需要的token參數,不會受到其他用例的影響
確定是每次請求動作,都需要執行一次登錄獲取token的接口,對接口的請求頻繁
使用全局變量
# 全局變量,解決用例間的依賴
global token
class InvestTests(unittest.TestCase):
@classmethod
def setUpClass(self):
pass
@classmethod
def tearDownClass(self):
pass
def setUp(self):
self.baseurl = "http://218.17.157.55:18087"
self.headers = {"Content-Type":"application/json"}
def tearDown(self):
pass
def getToken(self,username):
url = self.baseurl + "/pj-common/login"
payload = {"username":username,"password":"123456w","imageCode":"111111","clientType":"WEB"}
response = requests.post(url, headers=self.headers,json=payload)
rsp = response.json()
global token
if rsp:
print(rsp["data"]["token"])
token = rsp["data"]["token"] #需要傳出去的參數 -- 設置成全局變量
def test_001_login_200(self):
self.getToken(username='13715384224')
def test_002_invest_200(self):
#出借
try:
if token:
self.headers.update({"Authorization": "Bearer %s" % token})
url = self.baseurl + "/pj-p2p-core/appFront/planInvest/v3.0/submitInvestOrder"
payload = {"investAmt":int(300),"couponId":-1,"planId":int(49)} # 出借30天產品
for num in range(int(1)):
response = requests.post(url,headers=self.headers,json=payload)
if response.status_code == 200:
print("出借成功1筆")
else:
print("出借失敗1筆")
else:
print("沒有獲取到token!!!")
except Exception as e:
print(e)
使用setUpClass方法和類方法
# 使用classmethod方法,執行unittest框架時只獲取一次token,解決用例間的依賴
class InvestTests(unittest.TestCase):
@classmethod
def getToken(cls,username):
url = cls.baseurl + "/pj-common/login"
payload = {"username":username,"password":"123456w","imageCode":"111111","clientType":"WEB"}
response = requests.post(url,json=payload)
rsp = response.json()
if rsp:
print(rsp["data"]["token"])
return rsp["data"]["token"] #需要傳出去的參數
@classmethod
def setUpClass(cls):
cls.baseurl = "http://218.17.157.55:18087"
cls.headers = {"Content-Type":"application/json"}
cls.token = cls.getToken(username='13715384224')
@classmethod
def tearDownClass(self):
pass
def setUp(self):
self.baseurl = "http://218.17.157.55:18087"
self.headers = {"Content-Type":"application/json"}
def tearDown(self):
pass
def test_001_login_200(self):
pass
def test_002_invest_200(self):
#出借
try:
if self.token:
self.headers.update({"Authorization": "Bearer %s" % self.token})
url = self.baseurl + "/pj-p2p-core/appFront/planInvest/v3.0/submitInvestOrder"
payload = {"investAmt":int(300),"couponId":-1,"planId":int(49)} # 出借30天產品
for num in range(int(1)):
response = requests.post(url,headers=self.headers,json=payload)
if response.status_code == 200:
print("出借成功1筆")
else:
print("出借失敗1筆")
else:
print("沒有獲取到token!!!")
except Exception as e:
print(e)