今天我們來聊一聊 異常 和斷言!
異常
常見異常類型
序號 | 異常 | 描述 |
---|---|---|
1) | BaseException | 所有異常類的基類(python2.5之後) |
2) | Exception | 所有異常類的基類,繼承BaseException |
3) | AssertionError | assert語句失敗 |
4) | AttirbuteError | 試圖訪問未知的對象屬性 |
5) | FileNotFoundError | 試圖打開一個不存在的文件或目錄 |
6) | AttributeError | 試圖訪問的對象沒有屬性 |
7) | OSError | 當系統函數返回一個系統相關的錯誤(包括I/O故障),如“找不到文件”或“磁盤已滿”時,引發此異常 |
8) | NameError | 使用一個還沒賦值對象的變量 |
9) | IndexError | 當一個序列超出範圍時引發此異常 |
10) | KeyError | 試圖訪問你字典裏不存在的鍵 |
11) | IOEError | 輸入輸出異常,基本是無法打開文件 |
12) | ImportError | 無法引入模塊或者包,基本是路徑問題 |
13) | SyntaxError | 當解析器遇到一個語法錯誤時引發此異常 |
14) | KeyboardInterrupt | 按下組合鍵Ctrl+C,程序被強行終止 |
15) | TypeError | 傳入的對象類型與要求不符 |
16) | VauleError | 傳入一個不被期望的值,即使類型正確 |
異常用法
1.try–except–else
except異常執行,else非異常執行
try:
print(a)
except NameError as msg:
print(msg)
else:
print("沒有異常時執行")
輸出結果爲:name ‘a’ is not defined
2.try–except–finally
except異常執行,finally正常異常都執行
try:
print(a)
except NameError as msg:
print(msg)
finally:
print("不管是否出現異常,都會被執行")
輸出結果爲:
name ‘a’ is not defined
不管是否出現異常,都會被執行
拋出異常
raise關鍵字:
>>可用來拋出一個異常信息。
>>只能使用Python提供的異常類。
>>如果想要raise使用自定義異常類,則自定義類需要繼承Exception類
def say_hello(name=None):
# name爲空,拋出異常
if name is None:
raise NameError('"name" cannot be empty')
else:
print("hello, %s" % name)
if __name__ == '__main__':
say_hello()
運行結果,如下:
斷言
斷言的三種模式
selenium提供了三種模式斷言:
①assert
>>Assert(斷言) 失敗時,該測試將終止。
②verify
>>Verify(驗證) 失敗時,該測試將繼續執行,並將錯誤記入日誌顯示屏 。
③waitfor
>>Waitfor(等待) 用於等待某些條件變爲真,若爲真,則立即執行,若爲假,則失敗且暫停。一般跟SetTimeout時間一起用。
常用的斷言方法
序號 | 斷言 | 描述 |
---|---|---|
1) | assertLocation | 判斷當前是在正確的頁面 |
2) | assertTitle | 檢查當前頁面的 title 是否正確 |
3) | assertValue | 檢查 input 的值, checkbox 或 radio,有值爲”on”無爲”off” |
4) | assertSelected | 檢查 select 的下拉菜單中選中是否正確 |
5) | assertSelectedOptions | 檢查下拉菜單中的選項的是否正確 |
6) | assertText | 檢查指定元素的文本 |
7) | assertTextPresent | 檢查在當前給用戶顯示的頁面上是否有出現指定的文本 |
8) | assertTextNotPresent | 使檢查在當前給用戶顯示的頁面上是否沒有出現指定的文本 |
9) | assertAttribute | 檢查當前指定元素的屬性的值 |
10) | assertTable | 檢查 table 裏的某個 cell 中的值 |
11) | assertEditable | 檢查指定的 input 是否可以編輯 |
12) | assertNotEditable | 檢查指定的 input 是否不可以編輯 |
13) | assertAlert | 檢查是否有產生帶指定 message 的 alert 對話框 |
14) | verifyTitle | 檢查預期的頁面標題 |
15) | verifyTextPresent | 驗證預期的文本是否在頁面上的某個位置 |
16) | verifyElementPresent | 驗證預期的UI元素,它的HTML標籤的定義,是否在當前網頁上 |
17) | verifyText | 覈實預期的文本和相應的HTML標籤是否都存在於頁面上 |
18) | verifyTable | 驗證表的預期內容 |
19) | waitForPageToLoad | 暫停執行,直到預期的新的頁面加載 |
20) | waitForElementPresent | 等待檢驗某元素的存在。爲真時,則執行 |
unittest 常用的斷言方法
序號 | unittest常用斷言 | 描述 |
---|---|---|
1) | assertEqual(self, first, second, msg=None) | 判斷兩個參數相等:first == second |
2) | assertNotEqual(self, first, second, msg=None) | 判斷兩個參數不相等:first != second |
3) | assertIn(self, member, container, msg=None) | 判斷是字符串是否包含:member in container |
4) | assertNotIn(self, member, container, msg=None) | 判斷是字符串是否不包含:member not in container |
5) | assertTrue(self, expr, msg=None) | 判斷是否爲真:expr is True |
6) | assertFalse(self, expr, msg=None) | 判斷是否爲假:expr is False |
7) | assertIsNone(self, obj, msg=None) | 判斷是否爲 None:obj is None |
8) | assertIsNotNone(self, obj, msg=None) | 判斷是否不爲 None:obj is not None |
以上這幾條,是常用的,但是unittest提供的斷言遠不止這些,更多斷言方法,請參照: unittest官網