Python自动化测试框架之Pytest相关用法-断言(4)

1、pytest断言assert

(1)基本使用

        assert断言的使用比较简单,只需assert + 逻辑判断语句即可

# coding: utf-8
import pytest


class Test_Case:

    def test_case1(self):
        assert 1 == 1


if __name__ == '__main__':
    pytest.main(['./test_demo1.py::Test_Case::test_case1', '-s'])

        输出结果

Python自动化测试框架之Pytest相关用法-断言(4)_第1张图片

 

        此外,我们还可以使用其他的判断语句,例如

# coding: utf-8
import pytest


class Test_Case:

    def test_case1(self):
        a = 2
        b = 1
        assert a > b

    def test_case2(self):
        a = 'Hello World'
        b = 'ass'
        assert b in a

    def check_return(self):
        return True

    def test_case3(self):
        assert self.check_return()


if __name__ == '__main__':
    pytest.main(['./test_demo1.py::Test_Case', '-s'])

         此外,当用例断言不通过时,我们还可以加上后续的执行语句,例如打印相关信息提醒,或是调用其他方法

# coding: utf-8
import pytest


class Test_Case:

    def test_case1(self):
        a = 2
        b = 1
        assert a > b, '实际与预期不符:a

2、多重断言(软断言)assume

        虽然assert断言可以帮我们检查用例是否通过,但是当我们需要断言多条逻辑时,assert的不足就体现出来了,当assert断言不通过时,当前用例会被终止执行,后续的语句也不会再走下去。所以我们可以使用多重断言(软断言)--assume来解决这一问题。

        使用方法与assert相似,而assume的引入似乎存在问题,但是依然能够正常使用

         以下是基本使用方法

# coding: utf-8
import pytest


class Test_Case:

    def test_case1(self):
        pytest.assume(1 == 2, '断言错误!!!!实际与预期不符')
        print('继续执行...')
        pytest.assume(1 == 3, '断言错误!!!!实际与预期不符')


if __name__ == '__main__':
    pytest.main(['./test_demo1.py::Test_Case', '-s'])

输出结果

Python自动化测试框架之Pytest相关用法-断言(4)_第2张图片

        由结果可以看到,即使第一条断言失败了,我们依然能够执行后面的语句,这也正是assume比assert灵活的原因。

3、场景示例

        接着我们带入UI自动化的场景来使用assume。

        如示例代码所示,对于图片断言可能存在偏差,存在的不定性因素比较多,可能页面下滑到一般,遮挡了部分图片,导致断言不通过。也可能是页面未刷新完全就断言。当我们不希望影响到其他断言的检查,所以使用assume比较合适。

        而如果url的检查有误,说明获取的配置出错,是比较硬性的错误,目标url的检查都不通过,那么其他断言也会失败,就没有执行下去的必要了,所以比较适合试用assert。

# coding: utf-8
import pytest
from selenium import webdriver


class Test_Case:
    def __init__(self):
        self.driver = webdriver.Chrome()

    def check_pic(self):
        """图片对比方法,存在偏差"""
        ratio = 0.6
        print('经图片对比分析,对比度为:', ratio)
        return ratio

    def check_url(self):
        """返回当前url"""
        return self.driver.current_url

    def test_case1(self):
        assert self.check_url() == 'http://www.xxx.com', 'url有误请检查配置'
        pytest.assume(self.check_pic() > 0.9, '图片对比未通过,需要执行刷新操作')


if __name__ == '__main__':
    pytest.main(['./test_demo1.py::Test_Case', '-s'])

 

你可能感兴趣的:(pytest,自动化测试,python,开发语言)