大家好~我是米洛!
我正在從0到1打造一個開源的介面測試平臺, 也在編寫一套與之對應的教學,希望大家多多支援下。為教學點個star,關愛博主,從你做起!
歡迎關注我的公眾號米洛的測開日記,一起交流學習! 也可加入群聊一起討論~
上一節我們完善了根據環境執行case
功能,也差不多是有了線上偵錯的功能。隨著我們的系統功能陸續完善,那資料清理器(後置條件)這個我們一直沒解決
的一個點,就不得不搞定之了。
由於前置條件/後置條件差異很小,並且模式也都接近,所以為了避免重複開發,我決定改造Constructor類,將後置條件併入之。
在此,我決定不玩非主流,恢復前置/後置條件
的叫法,方便大家理解。但已經定義好的類: Constructor我也不改名了。
前置條件表如何支援後置條件: 加個標誌位
我們可以為constructor表定義一個suffix
欄位,這個欄位是個bool值,預設為false。
這樣原先有的資料,就都是false,也就代表都是前置條件(能不影響到之前case)。新加的條件,我們用suffix區分它是前置
還是後置
。
說到資料庫的變更
,sqlalchemy沒有提供特別方便的方式。我一般是用datagrip去修改:
點選+號,接著編輯欄位資訊。
其實下面已經給出了具體的sql,直接執行也一樣。
alter table pity_constructor
add suffix boolean default false not null;
其他的包括索引啥的,都是可以這樣編輯的。(如果對建表,加欄位等sql不太熟悉的,可以用用這個工具,pycharm就整合了datagrip)
說完了核心思路,但其實修改過程中發現不少變化,可能還有一些遺漏
。本次修改我可能只展示一部分,更多修改請參考git本次commit:
https://github.com/wuranxu/pity/commit/743afc1c88c6e32d194800a5ef6861ed1bdf488e
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}))"
修改點在於:
這其中還引發了一個事情,資料庫中deleted_at欄位要從datetime型別改為bigint,因為歷史原因,我們的deleted_at都是datetime,現在我們要一併調整。
可回顧第66節: 測試平臺系列(66) 資料驅動之基礎Model
可以看到參照的地方非常之多,大概就下面幾個方向。
判斷條件是否被刪除
),要改為等於0對應功能: 獲取前後置條件,刪除前後置條件等
對應功能: 用例執行前後置條件
對應功能: 新增/編輯前後置條件
對應功能: 前後置條件的複製
這一波改動挺大,也可能出現一些問題。如果有問題可以及時留言反饋。
前端改動相對較小,只是在切換tab的時候多了一個suffix欄位的維護:
切換到後置條件,把suffix變為true,切換到前置條件則改為false。這樣編輯前後置條件的時候,只需要讀取那個suffix欄位即可。
當然還有一點微調,這裡由於篇幅問題就不展示了。參考commit:
https://github.com/wuranxu/pityWeb/commit/86af44531c500c7acb22f2fb7a386ab00598551c