网站首页 > 基础教程 正文
我们在写自动化的过程中,用例的断言也是至关重要的,断言可以帮助我们判断用例测试点是否成功和失败。当然在我们这么强大的pytest框架中,断言也是比较强大的。为什么?继续往下看。
pytest断言
前面说到pytest的断言比较强大,它直接可以使用python自带的断言内容,当然不止而已,pytest还有一个重要的功能是可以重写assert关键字,pytest会截断对python中自带的assert的调用然后替换成自己定位的assert,从而可以获取更多的错误信息,让我们知道具体哪里出现了问题。
编写一个加法进行通过断言验证。
import pytest
class Test_01:
def add(self,x,y):
c = x + y
return c
def test_001(self):
c = self.add(1,2)
assert c == 4
if __name__ == '__main__':
pytest.main(['-s'
看到上面的代码大家都知道是会失败的, 那么我们一起看下pytest断言会给我们增加哪些新的报错信息。
从上图的结果中可以看出带">"的是python自带的错误解释,而带E的则是pytest进行添加的,这样就能很清楚的看到错误信息,比如这个3==4结果是错误的。
增加断言详细信息
在编写用例的时候,断言的时候想要获取一些更加有用的信息,比如参数化的时候,需要知道哪个参数进行传入的,如果出错了可以帮助我们进行调试,那么这一点pytest中的assert也可以帮助我们进行增加。
import pytest
class Test_01:
def add(self,x,y):
c = x + y
return c
def test_001(self):
a = 1
b = 2
assert self.add(a,b) == 4 , '当前传入的a值:%s,传入的b值:%s' %(a,b)
if __name__ == '__main__':
pytest.main(['-s
很清楚的看到了python自带的assert和pytest增加的对比,python自带的没有把值传入,pytest帮助我们把值传入进去,更加清楚的帮助查看错误信息。
异常断言
pytest断言方法内容应该没有unittests多,但是比unittest更加方便,更加灵活。这里安静在举一个例子。比如我们在执行一条错误的用例的时候,已经知道错误类型,这个时候我们也可以通过判断这个错误类型,如果错误类型和预期一致,那么就直接通过用例,反之失败。
安静先写一个错误的函数,然后找到他的错误类型,下面的函数错误类型为"AssertionError"。
def cake():
a = 'anjing'
b = 'test_anjing'
assert a == b
cake()
------------执行结果--------------
File "E:/auto_test/test_01.py", line 5, in <module>
cake()
File "E:/auto_test/test_01.py", line 4, in cake
assert a == b
AssertionError
这里可以使用pytest.raises(错误类型)进行对比断言。
import pytest
class Test_01:
def cake(self):
a = 'anjing'
b = 'test_anjing'
assert a == b
def test_001(self):
print('Test_01下的用例001')
with pytest.raises(AssertionError):
self.cake()
if __name__ == '__main__':
pytest.main(['-v
这个从表面上运行结果肯定是失败的,因为a不等于b,但是加入pytest的断言运行后就成功了。
上文中的异常断言,可以进行实例化,实例化过后存在三个可以用的方法,分别是.type,.value,.traceback安静简单的进行举例说明。
.type
我们这里也可以通过pytest.raises进行断言,我们可以根据返回的tpye进行对比,查看我们预期的与实际的是否一致。
import pytest
class Test_01:
def cake(self):
a = 'anjing'
b = 'test_anjing'
assert a == b
def test_001(self):
print('Test_01下的用例001')
with pytest.raises(AssertionError) as excinfo:
self.cake()
print('错误的类型是:%s' %excinfo.type)
assert excinfo.type == AssertionError
if __name__ == '__main__':
pytest.main(['-s
.value
如果还不知道具体的错误出现在哪里,我们也可以通过value进行查看具体的错误类型。
import pytest
class Test_01:
def cake(self):
a = 'anjing'
b = 'test_anjing'
assert a == b
def test_001(self):
print('Test_01下的用例001')
with pytest.raises(ZeroDivisionError) as excinfo:
self.cake()
print('错误的类型是:%s' %excinfo.type)
print('错误的值:%s'%excinfo.value)
assert excinfo.type == ZeroDivisionError
if __name__ == '__main__':
pytest.main(['-s
可以看出具体错误的值是assert中的两个字符串不相等导致的。
.traceback
这里这个方法表示可以把代码中哪行出现了错误进行打印出来,此方法必须在str下进行打印。
pytest常用断言
前面也介绍了pytest的断言可以复用python的断言,安静简单的列举几个python的断言:
1、判断是否为真:assert xx
2、判断不为真:assert not xx
3、判断a是否包含b:assert a in b
4、判断a不包含b:assert a not in b
5、判断两值相等:assert b == a
6、判断两值不相等:assert a != b
安静对常用断言简单的举几个例子。
import pytest
class Test:
def is_true(self):
'''返回True'''
return True
def test_01(self):
'''判断是否为真'''
assert self.is_true()
def is_false(self):
'''返回False'''
return False
def test_02(self):
'''判断不为真'''
assert not self.is_false()
def test_03(self):
'''判断是否相等'''
a = 'test_anjing'
b = 'test_anjing'
assert a == b
def test_04(self):
'''判断两值不相等'''
a = 'test_anjing'
b = 'anjing'
assert a != b
def test_05(self):
'''判断a包含b'''
a = 'test_anjing'
b = 'anjing'
assert b in a
def test_06(self):
'''判断a不包含b'''
a = 'anjing'
b = 'test'
assert b not in a
if __name__ == '__main__':
pytest.mai
请关注+私信回复:“测试”就可以免费拿到软件测试学习资料和面试题库,进群学习交流,快速让自己变强!
猜你喜欢
- 2024-11-15 使用Python读取Excel文件(python读取excel文件并画图)
- 2024-11-15 自动化测试学习:使用python库Paramiko实现远程服务器上传和下载
- 2024-11-15 PyPDF2是python的处理PDF文件的基本操作介绍
- 2024-11-15 RAG实战篇:精准判断用户查询意图,自动选择最佳处理方案
- 2024-11-15 03 Python数据类型转换(python数据类型转换函数)
- 2024-11-15 Python自带单元测试框架UnitTest,如何生成独立的测试报告?
- 2024-11-15 新手常见的python报错及解决方案(新手常见的python报错及解决方案有哪些)
- 2024-11-15 使用Python 模块 轻松集成功能(python用什么集成开发环境)
- 2024-11-15 Python学习教程(二)(“python教程”)
- 2024-11-15 python库的属性方法帮助以及ascII
- 06-18单例模式谁都会,破坏单例模式听说过吗?
- 06-18Objective-c单例模式的正确写法「藏」
- 06-18单例模式介绍(单例模式都有哪些)
- 06-18前端设计-单例模式在实战中的应用技巧
- 06-18PHP之单例模式(php单例模式连接数据库)
- 06-18设计模式:单例模式及C及C++实现示例
- 06-18python的单例模式(单例 python)
- 06-18你认为最简单的单例模式,东西还挺多
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- 单例 (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)