Pytest:如何使用全功能的Python测试框架?小白必看

我们在写自动化的过程中,用例的断言也是至关重要的,断言可以帮助我们判断用例测试点是否成功和失败。当然在我们这么强大的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也可以帮助我们进行增加。

i

mport 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

  • 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

下面是我近几年的收集和整理,整体是围绕着【软件测试】来进行整理的,主体内容包含:python自动化测试专属视频、Python自动化详细资料、全套面试题等知识内容。
在这里插入图片描述
对于软件测试的的朋友来说应该是最全面最完整的面试备战仓库,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。

关注微信公众号:程序员二黑,即可获取Python自动化测试资源啦

猜你喜欢

转载自blog.csdn.net/m0_52650621/article/details/112999896