python的assert用法

断言语句和 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 之间,将可以看到如下运行过程:

运行结果: 请输入您的年龄:
1 Traceback (most recent call last): File "C:\Users\mengma\Desktop\1.py", line 3, in <module> assert 20 < age < 80 AssertionError

三、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 <module>
  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) is True      
assertFalse(x)     bool(x) is False      
assertIs(a, b)     a is b     2.7
assertIsNot(a, b)     a is not b     2.7
assertIsNone(x)     x is None     2.7
assertIsNotNone(x)     x is not None     2.7
assertIn(a, b)     a in b     2.7
assertNotIn(a, b)     a not in b     2.7
assertIsInstance(a, b)     isinstance(a, b)     2.7
assertNotIsInstance(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.7
assertGreaterEqual(a, b)     a >= b     2.7
assertLess(a, b)     a < b     2.7
assertLessEqual(a, b)     a <= b     2.7
assertRegexpMatches(s, re)     regex.search(s)     2.7
assertNotRegexpMatches(s, re)     not regex.search(s)     2.7
assertItemsEqual(a, b)     sorted(a) == sorted(b) and works with unhashable objs     2.7
assertDictContainsSubset(a, b)     all the key/value pairs in a exist in b     2.7
assertMultiLineEqual(a, b)     strings     2.7
assertSequenceEqual(a, b)     sequences     2.7
assertListEqual(a, b)     lists     2.7
assertTupleEqual(a, b)     tuples     2.7
assertSetEqual(a, b)     sets or frozensets     2.7
assertDictEqual(a, b)     dicts     2.7
assertMultiLineEqual(a, b)     strings     2.7
assertSequenceEqual(a, b)     sequences     2.7
assertListEqual(a, b)     lists     2.7
assertTupleEqual(a, b)     tuples     2.7
assertSetEqual(a, b)     sets or frozensets     2.7assertDictEqual(a, b)     dicts     2.7

九、防御性编程中添加断言实例

  在代码开始添加注释是个好的开端,但是人们都不太喜欢读和更新这些注释,这些注释会很快变得过时。但对于断言,我们可以同时对这块代码编写文档,如果这些断言被违反了,会直接引起一个简单而又直接的失败。

target = 5
x = 1
y = 2
z = 3


def run_x_code():
    print(1)


def run_y_code():
    print(2)


def run_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 <module>
    assert target in (x, y, z)
AssertionError

 

posted @ 2019-07-12 16:03  Amorphous  阅读(12440)  评论(0编辑  收藏  举报