大家好~我是
米洛
!
我正在從0到1打造一個開源的介面測試平臺, 也在編寫一套與之對應的完整教程
,希望大家多多支援。
歡迎關注我的公眾號測試開發坑貨
,獲取最新文章教程!
回顧
上一節我們支援了SQL型別
的構造方法。
接下來我們要講的是如何豐富
我們的斷言型別。
基礎斷言
我們之前的斷言部分還是比較殘缺的,就好像辟邪劍譜
一樣。今天我們就來儘量完善下斷言的內容。
先看看之前的斷言型別:
- 等於
- 不等於
- 屬於
但這些往往還不夠,我們還需要新增一些。還記得我們之前寫的如何比對2個JSON物件
嗎?我們今天也要把它運用到實戰裡面。
編寫utils/json_compare.py
由於之前已經講過json對比的思路,所以這邊貼一下原始碼,並把JsonCompare類進行單例包裝。
import json
from app.utils.decorator import SingletonDecorator
@SingletonDecorator
class JsonCompare(object):
def compare(self, exp, act):
ans = []
self._compare(exp, act, ans, '')
return ans
def _compare(self, a, b, ans, path):
a = self._to_json(a)
b = self._to_json(b)
if type(a) != type(b):
ans.append(f"{path} 型別不一致, 分別為{type(a)} {type(b)}")
return
if isinstance(a, dict):
keys = []
for key in a.keys():
pt = path + "/" + key
if key in b.keys():
self._compare(a[key], b[key], ans, pt)
keys.append(key)
else:
ans.append(f"{pt} 在實際結果中不存在")
for key in b.keys():
if key not in keys:
pt = path + "/" + key
ans.append(f"{pt} 在實際結果中多出")
elif isinstance(a, list):
i = j = 0
while i < len(a):
pt = path + "/" + str(i)
if j >= len(b):
ans.append(f"{pt} 在實際結果中不存在")
i += 1
j += 1
continue
self._compare(a[i], b[j], ans, pt)
i += 1
j += 1
while j < len(b):
pt = path + "/" + str(j)
ans.append(f"{pt} 在預期結果中不存在")
j += 1
else:
if a != b:
ans.append(
f"{path} 資料不一致: {a} "
f"!= {b}" if path != "" else
f"資料不一致: {a} != {b}")
def _color(self, text, _type=0):
if _type == 0:
# 說明是綠色
return """<span style="color: #13CE66">{}</span>""".format(text)
return """<span style="color: #FF4949">{}</span>""".format(text)
def _weight(self, text):
return """<span style="font-weight: 700">{}</span>""".format(text)
def _to_json(self, string):
try:
float(string)
return string
except:
try:
if isinstance(string, str):
return json.loads(string)
return string
except:
return string
改寫斷言方式
看看之前的斷言方式:
因為我們也不可能補充很多內容,所以我們只新增一些常見的
。
我們新增一些,包含/不包含/包含於/不包含於/長度等於/長度大於/長度小於/JSON等於這樣的校驗方式。並且用emoji
區分了是否成功。
來看看效果吧~
這樣就稍微豐富
了我們們的斷言手段,但我們還有一些JSON包含等,以及文字比對相似度
斷言的方式還沒派上用場,之後有機會再給大家展示。
今天的內容就分享到這兒了,有興趣的朋友們可以一起動手寫起來呀!~
(本期內容比較少,下期帶來重磅的Python的定時任務系列
)
線上體驗地址: http://test.pity.fun
前端程式碼倉庫: https://github.com/wuranxu/pityWeb
後端程式碼倉庫: https://github.com/wuranxu/pity