断言,也叫检查点,指的是在自动化测试过程中,让脚本自动判断实际结果是否等于预期结果。有基本布尔型断言、比较断言、复杂断言等方法。

一、基本布尔型断言

序号

断言方法

断言描述
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("断言结束")
Logo

一站式 AI 云服务平台

更多推荐