測試平台系列(98) 完善後置條件功能
大家好~我是米洛!
我正在從0到1打造一個開源的介面測試平台, 也在編寫一套與之對應的教程,希望大家多多支援下。為教程點個star,關愛部落客,從你做起!
歡迎關注我的公眾號米洛的測開日記,一起交流學習! 也可加入群聊一起討論~
回顧
上一節我們完善了根據環境執行case
功能,也差不多是有了在線調試的功能。隨著我們的系統功能陸續完善,那數據清理器(後置條件)這個我們一直沒解決
的一個點,就不得不搞定之了。
由於前置條件/後置條件差異很小,並且模式也都接近,所以為了避免重複開發,我決定改造Constructor類,將後置條件併入之。
設計思路
在此,我決定不玩非主流,恢復前置/後置條件
的叫法,方便大家理解。但已經定義好的類: Constructor我也不改名了。
前置條件表如何支援後置條件: 加個標誌位
我們可以為constructor表定義一個suffix
欄位,這個欄位是個bool值,默認為false。
這樣原先有的數據,就都是false,也就代表都是前置條件(能不影響到之前case)。新加的條件,我們用suffix區分它是前置
還是後置
。
說到資料庫的變更
,sqlalchemy沒有提供特別方便的方式。我一般是用datagrip去修改:
- 選擇表,進入編輯表功能
- 新增一個欄位
點擊+號,接著編輯欄位資訊。
- 編輯欄位資訊並選擇execute
其實下面已經給出了具體的sql,直接執行也一樣。
alter table pity_constructor
add suffix boolean default false not null;
其他的包括索引啥的,都是可以這樣編輯的。(如果對建表,加欄位等sql不太熟悉的,可以用用這個工具,pycharm就集成了datagrip)
動手實戰
說完了核心思路,但其實修改過程中發現不少變化,可能還有一些遺漏
。本次修改我可能只展示一部分,更多修改請參考git本次commit:
//github.com/wuranxu/pity/commit/743afc1c88c6e32d194800a5ef6861ed1bdf488e
- 修改model
from sqlalchemy import Column, INT, String, BOOLEAN, UniqueConstraint, TEXT, select, desc
from app.models.basic import PityBase
class Constructor(PityBase):
__tablename__ = 'pity_constructor'
__table_args__ = (
UniqueConstraint('case_id', 'suffix', 'name', 'deleted_at'),
)
type = Column(INT, default=0, comment="0: testcase 1: sql 2: redis 3: py腳本 4: 其它")
name = Column(String(64), comment="數據初始化描述")
enable = Column(BOOLEAN, default=True, nullable=False)
constructor_json = Column(TEXT, nullable=False)
value = Column(String(16), comment="返回值")
case_id = Column(INT, nullable=False, comment="所屬用例id")
public = Column(BOOLEAN, default=False, comment="是否共享")
index = Column(INT, comment="前置條件順序")
# 2021-12-18 是否是後置條件
suffix = Column(BOOLEAN, default=False, comment="是否是後置條件,默認為否")
def __init__(self, type, name, enable, constructor_json, case_id, public, user, value="", suffix=False, id=None):
super().__init__(user, id)
self.type = type
self.name = name
self.enable = enable
self.constructor_json = constructor_json
self.case_id = case_id
self.public = public
self.value = value
self.suffix = suffix
@staticmethod
async def get_index(session, case_id, suffix=False):
sql = select(Constructor).where(
Constructor.deleted_at == 0, Constructor.case_id == case_id,
Constructor.suffix == suffix,
).order_by(desc(Constructor.index))
data = await session.execute(sql)
query = data.scalars().first()
# 如果沒有查出來前/後置條件,那麼給他0
if query is None:
return 0
return query.index + 1
def __str__(self):
return f"[{'後置條件' if self.suffix else '前置條件'}: {self.name}]({self.id}))"
修改點在於:
- 唯一索引新增suffix欄位
- 新增suffix欄位
- 表繼承自PityBase
- get_index中對刪除的判斷改為deleted_at == 0而不是None
這其中還引發了一個事情,資料庫中deleted_at欄位要從datetime類型改為bigint,因為歷史原因,我們的deleted_at都是datetime,現在我們要一併調整。
可回顧第66節: 測試平台系列(66) 數據驅動之基礎Model
需要調整的地方
可以看到引用的地方非常之多,大概就下面幾個方向。
- 遇到Constructor.deleted_at == None的(
判斷條件是否被刪除
),要改為等於0
對應功能: 獲取前後置條件,刪除前後置條件等
- 執行case的日誌,要能夠區分前後置條件
對應功能: 用例執行前後置條件
- 接受ConstructorForm欄位要加上suffix,並且必填
對應功能: 新增/編輯前後置條件
- 查詢前後置條件的時候,要帶上suffix
對應功能: 前後置條件的複製
這一波改動挺大,也可能出現一些問題。如果有問題可以及時留言回饋。
前端改動
前端改動相對較小,只是在切換tab的時候多了一個suffix欄位的維護:
切換到後置條件,把suffix變為true,切換到前置條件則改為false。這樣編輯前後置條件的時候,只需要讀取那個suffix欄位即可。
當然還有一點微調,這裡由於篇幅問題就不展示了。參考commit:
//github.com/wuranxu/pityWeb/commit/86af44531c500c7acb22f2fb7a386ab00598551c