前言:刚好学到fixture。做下笔记。
#首先明确一点。unittest和nose都支持fixture的。但是fixture在pytest里使用更灵活。也算是pytest的一个闪光点吧。
1、什么是fixture?
你可以理解为一个跟setup和teardown这种前后置类似的东西。但是比它们要强大、灵活很多。
2、啥时候需要用到fixture?
我们知道前后置,要么每个用例调用一次。要么总共调用一次。比如我们有对于某测试点五个测试用例。三个用例需要
调用登录的login方法。两个不需要调用。这个时候用前置与后置就没办法解决了。(谁说的。我特么把调用login不写在前后置里面
不就行了。只是看起来没有那么规范而已。)
3、fixture之conftest。
3.1第一步。如下图:新建一个名为conftest的py文件(注意文件名是固定的,不能更改)
3.2再新增一个文件。代码如下。
3.3我们可以看到。test_s1和test_s3调用了login方法,test_s2没有调用,执行一下。
3.4非常的简洁易懂。当然。如果内容较少的情况下写在一起也行。如下:
执行结果下:效果都是一样的。
注:fixture装饰器里的scope有四个级别的参数。“function(不写默认这个)”,“class”,“module”or“session”
除scope之外。还有params、autouse、ids、name等。
4、fixture之yield。
4.1、如果说scope参数类似于setup。那么yield就类似于teardown。且yield最大的好处是遇到报错不会直接停止,还是会继续执行下
一个用例。(如果前置就出错那就不会执行yield了)。例子如下:(重申一遍:fixture参数scope=“module”,整个文件生效。)
如上,在test_s1里面我们模拟异常。看看运行情况。如下:
我们可以看到。即使第一个用例报错了。也并不影响后面两个用例的执行以及yield的执行。
5、上面我们都是通过类方法传fixture的函数参数名称来调用fixture的。
除此之外。我们还有两种方法来调用。
1、使用装饰器@pytest.mark.usefixtures()
2、autouse=Ture自动使用。
使用装饰器结构如下:
使用autouse=Ture结构:其实就是这里括号
里面增加一行autouse=Ture。默认所有用例全部调用fixture。