断言,也叫检查点,指的是在自动化测试过程中,让脚本自动判断实际结果是否等于预期结果。有基本布尔型断言、比较断言、复杂断言等方法。
一、基本布尔型断言
序号 |
断言方法 |
断言描述 |
1 |
assertEqual(arg1, arg2, msg=None) |
验证arg1=arg2,不等则fail 【常用】 |
2 |
assertNotEqual(arg1, arg2, msg=None) |
验证arg1 != arg2, 相等则fail |
3 |
assertTrue(expr, msg=None) |
验证expr是true,如果为false,则fail 【常用】 |
4 |
assertFalse(expr,msg=None) |
验证expr是false,如果为true,则fail 【常用】 |
5 |
assertIs(arg1, arg2, msg=None) |
验证arg1、arg2是同一个对象,不是则fail |
6 |
assertIsNot(arg1, arg2, msg=None) |
验证arg1、arg2不是同一个对象,是则fail |
7 |
assertIsNone(expr, msg=None) |
验证expr是None,不是则fail |
8 |
assertIsNotNone(expr, msg=None) |
验证expr不是None,是则fail |
9 |
assertIn(arg1, arg2, msg=None) |
验证arg1是arg2的子串,不是则fail |
10 |
assertNotIn(arg1, arg2, msg=None) |
验证arg1不是arg2的子串,是则fail |
11 |
assertIsInstance(obj, cls, msg=None) |
验证obj是cls的实例,不是则fail |
12 |
assertNotIsInstance(obj, cls, msg=None) |
验证obj不是cls的实例,是则fail |
二、比较断言
序号 |
断言方法 |
断言描述 |
1 |
assertAlmostEqual (first, second, places = 7, msg = None, delta = None) |
验证first约等于second。 palces: 指定精确到小数点后多少位, 默认为7 |
2 |
assertNotAlmostEqual (first, second, places, msg, delta) |
验证first不约等于second。 palces: 指定精确到小数点后多少位, 默认为7 注: 在上述的两个函数中,如果delta指定了值, 则first和second之间的差值必须≤delta |
3 |
assertGreater (first, second, msg = None) |
验证first > second,否则fail |
4 |
assertGreaterEqual (first, second, msg = None) |
验证first ≥ second,否则fail |
5 |
assertLess (first, second, msg = None) |
验证first < second,否则fail |
6 |
assertLessEqual (first, second, msg = None) |
验证first ≤ second,否则fail |
7 |
assertRegexpMatches (text, regexp, msg = None) |
验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search() |
8 |
assertNotRegexpMatches (text, regexp, msg = None) |
验证正则表达式regexp搜索不匹配的文本text。 regexp:通常使用re.search() 说明:两个参数进行比较(>、≥、<、≤、约等、不约等) |
三、复杂断言
序号 |
断言方法 |
断言描述 |
1 |
assertListEqual(list1, list2, msg = None) |
验证列表list1、list2相等,不等则fail,同时报错信息返回具体的不同的地方 |
2 |
assertTupleEqual (tuple1, tuple2, msg = None) |
验证元组tuple1、tuple2相等,不等则fail,同时报错信息返回具体的不同的地方 |
3 |
assertSetEqual (set1, set2, msg = None) |
验证集合set1、set2相等,不等则fail,同时报错信息返回具体的不同的地方 |
4 |
assertDictEqual (expected, actual, msg = None |
验证字典expected、actual相等,不等则fail,同时报错信息返回具体的不同的地方 |
四、示例
(1)assertEqual(arg1, arg2), 判断arg1 == arg2 结果是一个bool值 可以是任意数据类型
(2) assertIn(str1, str2) 判断str1是不是str2的子串, str1 in str2 结果是一个bool值 只能是字符串
(3)具体用哪种断言方法,根据实际情况而定 常见:获取网页标题、url地址、元素的text文本、元素的某一个属性等。示例:
五、断言失败后续的代码不会被执行,所以可以使用异常处理
异常处理的格式:
try:
可能会出现异常的代码
except 指定异常类型:
捕获到异常时执行的代码
else:
没有捕获到异常时执行的代码
finally:
有没有异常都会执行
示例:
def test_xueshu(self):
driver = self.driver
driver.find_element_by_link_text('学术').click()
driver.switch_to.window(driver.window_handles[1])
try:
# 预期结果
Expected = "https://xueshu.baidu.com"
# 获取当前网页URL 实际结果
Actual = driver.current_url
# 断言
self.assertEqual(Expected, Actual)
# 在百度学术搜索自己名字
driver.find_element_by_id('kw').send_keys('lilgaage')
driver.find_element_by_id('su').click()
sleep(2)
# 动态时间
now = time.strftime("%Y%m%d_%H%M%S")
driver.get_screenshot_as_file("images/img_{}_百度学术搜索lilgaage.png".format(now))
# 捕获到指定异常--->断言失败
except AssertionError:
print("断言失败,进入的不是百度学术页面")
# 截图
now = time.strftime("%Y%m%d_%H%M%S")
driver.get_screenshot_as_file("images/img_{}_断言失败_不是百度学术搜索.png".format(now))
# 抛出异常
raise
finally:
print("断言结束")