一組接口測試用例已經在測試平臺中編輯好,這時候想在第一條用例執行前插入一條用例,竟發現無從下手。前端
通過短暫頭腦風暴,個人大腦給出兩種解決方案:數據庫
在新增用例,和修改用例接口中實現 「testOrder」 屬性的添加以及修改,而且須要在 執行用例 接口中將一組接口用例按照 「testOrder」 順序執行。後端
仔細一想其實也並不是那麼簡單,新增用例時,須要先搜索當前用例組中最大的 「testOrder」 值,而後將 「最大的testOrder值」+ 1 後寫入用例中。這樣的話須要給新增用例接口加個鎖,不然可能會致使一組用例中存在相同的 「testOrder」 值。ide
還有,在修改用例順序時,須要將當前用例所屬用例組中部分用例執行順序進行從新排序並更新 「testOrder」 值。還有 ... ... ... ...函數
既然你(我)都(也)不想聽了那麼咱們進入方案二好了咯測試
首先在獲取測試用例時多加一個sort排序便可,代碼以下:spa
testing_cases = TestingCase.find({'isDeleted': {'$ne': True}})
.sort([('createAt', pymongo.ASCENDING)]) # 我就是傳說中的 sort排序
複製代碼
而後新增一個複製用例的接口,也不復雜,核心代碼以下:3d
# 先獲取原用例數據
test_case = TestingCase.find_one({'_id': ObjectId(case_id)})
# 去除原用例_id屬性
test_case.pop('_id') if test_case.get('_id') else None
# 去除原用例createAt屬性
test_case_create_at = test_case.pop('createAt') if 'createAt' in test_case else datetime.datetime.utcnow()
# 獲取新用例的「建立時間」
new_test_case_create_at = get_new_create_at(test_case_create_at) # 劃重點 劃重點 劃重點
# 設置新用例的名稱後綴便於區分
new_case_name_suffix = '(複製版)'
# 設置新用例名稱
new_case_name = test_case.pop('name') + new_case_name_suffix \
if 'name' in test_case else '未知接口用例' + new_case_name_suffix
# 賦值
test_case['createAt'] = new_test_case_create_at
test_case['name'] = new_case_name
# 插入數據
TestingCase.insert(test_case)
複製代碼
過程就是先將待複製用例中的 _id 以及 createAt 屬性去除,而後根據原有用例建立時間生成新用例的建立時間, 接着設置新用例名稱後將數據插入數據庫。code
相信你們都對上面代碼中的 get_new_create_at 函數抱有好奇心 :)cdn
#TODO 防止意外最好加個🔒
def get_new_create_at(create_at):
time_quantity = 1
while True:
new_create_at = create_at - datetime.timedelta(milliseconds=time_quantity)
find_result = list(TestingCase.find({'createAt': new_create_at}))
has_identical_create_at_case = True if len(find_result) > 0 else False
if not has_identical_create_at_case:
return new_create_at
else:
time_quantity += 1
複製代碼
總結成一句話就是拼命往前找,直到找到整個用例庫中不存在的用例建立時間爲止。
新增一個複製按鈕便可。
做爲一個有追求的人,固然是選擇方案二了。
效果展現環節:
能夠清晰看到每複製一個用例,都會在當前用例「建立時間」前建立新用例 (列表數據默認按照建立時間倒序排序)。
最終完美實現需求: 在列表中任意用例先後插入新用例。 (若是說要在最後一個用例後面插入新用例的話直接新建用例便可)
感謝讀者耐心看完這篇文章,以爲有意思的點個贊哦~
有任何問題或者對筆者測試平臺感興趣的話歡迎掃碼關注一下 公衆號 「智能自動化測試」 哦:)
--堅持天天進步一點點,你將會在不遠的未來看到不同的本身