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'])
输出结果
此外,我们还可以使用其他的判断语句,例如
# 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
虽然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'])
输出结果
由结果可以看到,即使第一条断言失败了,我们依然能够执行后面的语句,这也正是assume比assert灵活的原因。
接着我们带入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'])