今天我们来聊一聊 异常 和断言!
"异常"和"断言"
异常
常见异常类型
序号 | 异常 | 描述 |
---|---|---|
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官网