20181023軟體測試經驗分享-app的Ui自動化測試 使用unittest框架的斷言心得
目前app自動化測試指令碼在用的是unittest單元測試框架,在基本完成用例設計後,開始考慮如何來做斷言,(雖然學習一段時間的自動化,但用例基本不做斷言,除了登入後的拿使用者名稱驗證登入的成功與否)。基礎知識我就不做分享,分享下我目前的經驗。
一)斷言某些元素的屬性值-assertEqual()
assertEqual:如兩個值相等,則pass assertEqual:如兩個值不相等,則fail
self.assertEqual(4 + 5,9,‘The result is False’)
self.assertEqual(self.xin_find_element(By.ID, self.name_id).get_attribute('name'), self.DY_name[1])
我這樣寫,是斷定 可以找到元素的!!!(為什麼這麼說,後面有分析)
二)斷言某些元素存在與否-assertTrue()
assertTrue:判斷bool值為True,則pass assertTrue:判斷bool值為False,則fail
self.assertTrue(4 + 5 == 9,“The result is False”)
但是網上有些教程推薦這兒來做 判斷元素存在與否,寫法:self.assertTrue(self.driver.find_elemnt_by_xx(‘xxxx’).XXXX) XXXX 是 isEnable()檢查元素是否被啟用 isDisplay()檢查元素是否可見
但是我不能保證 1.你斷言這個元素是否需要等待,時間太短沒來得及去找到 怎麼辦? 2.給個找不到的元素,實際這條用例的結果是 怎麼樣的?
答: 1.可以使用顯式等待來做智慧等待; 2.結果是 selenium.common.exceptions.NoSuchElementException。就是說你想要的元素沒找到,給的結果不是斷言的結果!!!
(個人理解)HTMLTestRunner生成的測試報告,有三個不同結果:通過(pass),失敗(fail),錯誤(error)
python unintest單元測試框架提供了一整套內建的斷言方法。
如果斷言失敗,則丟擲一個AssertionError,並標識該測試為失敗狀態
如果異常,則當做錯誤來處理 注意:以上兩種方式的區別
如果成功,則標識該測試為成功狀態
三)斷言:某些新介面的某元素是否存在,如果不存在就自動截圖,如果存在,就斷言通過
def duanyan_chazhaoyuansu(self, by, locator):
duanyan = True
try:
self.xin_find_element(by, locator)
print('找到元素,斷言成功')
except:
self.driver.get_screenshot_as_file(
r'D:\xxxxxx\ScreenShot\screenshot_' + time.strftime('%Y%m%d_%H%M%S') + '.png')
duanyan = False
if duanyan is True:
self.assertTrue(duanyan, '斷言錯了,沒找到元素')
else:
self.assertTrue(duanyan, '斷言失敗了,沒找到元素')
xin_find_elemnt()使用顯式等待;傳入的by是BY common的By類;
這樣寫的好處是 如果元素找到了,直接print(‘找到元素,斷言成功’),斷言通過;如果元素沒找到,自動截圖,沒能通過斷言,提示msg=‘斷言失敗了,沒找到元素’。
四)反面舉例:聊天記錄被清空,返回會話介面,查詢聊天記錄的元素,做斷言
def test_03_d482k(self):
"""清空聊天記錄"""
# 在設定裡面 清空聊天記錄 確定後 返回會話
self.wodehuodong()
self.xin_find_element(By.ID, self.wode_jinruqunliao_id).click()
self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_id).click()
self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_qingkong_id).click()
self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_qingkong_queding_id).click()
self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_fanhui_id).click()
duanyan = True
try:
self.xin_find_element(By.ID, 'message_chat_right_text_text')
self.driver.get_screenshot_as_file(
r'D:\xxxxx\ScreenShot\screenshot_' + time.strftime('%Y%m%d_%H%M%S') + '.png')
except:
duanyan = False
print('沒找到元素,能清空聊天記錄,斷言成功了')
if duanyan is True:
self.assertFalse(duanyan, '斷言失敗了,找到元素,實際聊天記錄還有未清空掉的')
else:
self.assertFalse(duanyan, '居然找到元素了!!!')
self.xin_print()
設定,選擇清空聊天記錄,確定後,返回聊天會話介面。
duanyan = True
try 去尋找元素(那個id是定位 聊天記錄)
如果查詢到,自動截圖,開始斷言,斷言失敗,msg=‘斷言失敗了,找到元素,實際聊天記錄還有未清空掉的’
如果沒找到,duanyan = False,直接print(‘沒找到元素,能清空聊天記錄,斷言成功了’),斷言成功
關於app的斷言,目前就是這些體會,交流技術 歡迎+QQ153132336 zy