pytest之fixture

前言:刚好学到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。

  

  

   

    

猜你喜欢

转载自www.cnblogs.com/cbslock/p/10160307.html