断言语句和 if 分支有点类似,它用于对一个 bool 表达式进行断言,如果该 bool 表达式为 True,该程序可以继续向下执行;否则程序会引发 AssertionError 错误。
断言格式 : assert+空格+要判断语句+双引号“报错语句”
一、断言的常见用途
那么我们什么时候应该使用断言呢?如果没有特别的目的,断言应该用于如下情况:
防御性的编程
运行时对程序逻辑的检测
合约性检查(比如前置条件,后置条件)
程序中的常量
检查文档
二、assert基础语法1
s_age = input("请输入您的年龄:")
age=int(s_age)assert 20 < age < 80
print("您输入的年龄在20和80之间")
上面程序中粗体字代码断言 age 必须位于 20 到 80之间。运行上面程序,如果输入的 age 处于执行范围之内,则可看到如下运行过程:
运行结果:
请输入您的年龄:23您输入的年龄在20和80之间
如果输入的 age 不处于 20 到 80之间,将可以看到如下运行过程:
运行结果:
请输入您的年龄:1Traceback (most recent call last):
File"C:\Users\mengma\Desktop\1.py", line 3, in
assert 20 < age < 80AssertionError
三、assert基础语法2
s_age = input("请输入您的年龄:")
age = int(s_age)
assert 20 < age < 80, "断言错误提示:年龄不在范围之内!"
print("您输入的年龄在20和80之间")
上面程序中粗体字代码断言 age 必须位于 20 到 80之间。运行上面程序,如果输入的 age 处于执行范围之内,则可看到如下运行过程:
运行结果:
请输入您的年龄:23您输入的年龄在20和80之间
如果输入的 age 不处于 20 到 80之间,将可以看到如下运行过程:
运行结果:
请输入您的年龄:1
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/json/flaskAI/day9020190712/test1.py", line 10, in
assert 20 < age < 80, "断言错误提示:年龄不在范围之内!"
AssertionError: 断言错误提示:年龄不在范围之内!
四、断言的自动化测试脚本
python自动化测试中寻找元素并进行操作,如果在元素好找的情况下,相信大家都可以较熟练地编写用例脚本了,但光进行操作可能还不够,有时候也需要对预期结果进行判断。
常用断言:
assertEqual
assertNotEqual
assertTrue
assertFalse
assertIsNone
assertIsNotNone
五、assertEqual 和 assertNotEqual
assertEqual:如两个值相等,则pass
assertNotEqual:如两个值不相等,则pass
使用方法:
assertEqual(first,second,msg)其中first与second进行比较,如果相等则通过;msg为失败时打印的信息,选填;断言assertNotEqual反着用就可以了。
六、assertTrue和assertFalse
assertTrue:判断bool值为True,则pass
assertFalse:判断bool值为False,则Pass
使用方法:
assertTrue(expr,msg)其中express输入相应表达式,如果表达式为真,则pass;msg选填;断言assertFalse如果表达式为假,则pass
七、assertIsNone和assertIsNotNone
assertIsNone:不存在,则pass
assertIsNotNone:存在,则pass
使用方法:
assertIsNone(obj,msg)检查某个元素是否存在
八、断言测试补充
assertEqual(a, b) a ==b
assertNotEqual(a, b) a!=b
assertTrue(x) bool(x)isTrue
assertFalse(x) bool(x)isFalse
assertIs(a, b) ais b 2.7assertIsNot(a, b) ais not b 2.7assertIsNone(x) xis None 2.7assertIsNotNone(x) xis not None 2.7assertIn(a, b) ain b 2.7assertNotIn(a, b) anot in b 2.7assertIsInstance(a, b) isinstance(a, b)2.7assertNotIsInstance(a, b)not isinstance(a, b) 2.7
assertAlmostEqual(a, b) round(a-b, 7) ==0
assertNotAlmostEqual(a, b) round(a-b, 7) !=0
assertGreater(a, b) a> b 2.7assertGreaterEqual(a, b) a>= b 2.7assertLess(a, b) a< b 2.7assertLessEqual(a, b) a<= b 2.7assertRegexpMatches(s, re) regex.search(s)2.7assertNotRegexpMatches(s, re)not regex.search(s) 2.7assertItemsEqual(a, b) sorted(a)== sorted(b) and works with unhashable objs 2.7assertDictContainsSubset(a, b) all the key/value pairs in a exist in b 2.7assertMultiLineEqual(a, b) strings2.7assertSequenceEqual(a, b) sequences2.7assertListEqual(a, b) lists2.7assertTupleEqual(a, b) tuples2.7assertSetEqual(a, b) setsor frozensets 2.7assertDictEqual(a, b) dicts2.7assertMultiLineEqual(a, b) strings2.7assertSequenceEqual(a, b) sequences2.7assertListEqual(a, b) lists2.7assertTupleEqual(a, b) tuples2.7assertSetEqual(a, b) setsor frozensets 2.7assertDictEqual(a, b) dicts 2.7
九、防御性编程中添加断言实例
在代码开始添加注释是个好的开端,但是人们都不太喜欢读和更新这些注释,这些注释会很快变得过时。但对于断言,我们可以同时对这块代码编写文档,如果这些断言被违反了,会直接引起一个简单而又直接的失败。
target = 5x= 1y= 2z= 3
defrun_x_code():print(1)defrun_y_code():print(2)defrun_z_code():print(3)assert target in(x, y, z)if target ==x:
run_x_code()elif target ==y:
run_y_code()else:assert target ==z
run_z_code()
打印结果:
# target= 5 时Traceback (most recent call last):
File"C:/Users/Administrator/Desktop/json/flaskAI/day9020190712/test1.py", line 31, in
assert target in(x, y, z)
AssertionError