pytest- fixture个人理解总结

pytest fixture超级灵活 缺乏百度文档学习,很多骚操作(继承、共享……),面试也爱问,多看多写。

前后置条件公式:

 

@pytest.fixture   #无参则默认为函数级别,可带参数 加上:(scope=”class”/”module”/”session”, auto=True)

Def fun1():

         前置条件执行体

         Yield 返回值

         后置条件执行体

#用例方法要调用前后置条件时:

@pytest.mark.usefixtures(“fun1”)

def test_add(self, fun1):  #要用前置条件函数中返回值时,此处用例方法才需传参,参数名一定同fixture函数名

         XXX

         XXX

Fixture骚操作---fixture的继承

如下图代码,init_driver  是 login_web的 一部分,两个都是函数级别的前后置条件,可以使用继承来优化Login_web。
自己理解:此处继承其实更像调用,先执行别人的代码,再执行自己的代码,如果要用到别人的返回值,仍用别人的函数名接收返回值直接使用。
继承了其他的前后置,其实是先执行一遍其它前后置函数中的语句。所以说省代码!

 

  

使用继承后 login_web函数改为如下:

# 访问网站并且登陆成功
@pytest.fixture
def login_web(init_driver):#login_web函数继承了init函数,或者叫调用了init函数,因为执行login_web时会先执行下init函数
    # login_web 调用了init—_web(就像用例方法调用前置条件一样来调用,直接加前置条件的函数名),并用init_driver接收了它的返回值
    LoginPage(init_driver).login(CD.user, CD.passwd)#init的返回值是driver,所以driver都换成了init
    yield  init_driver

fixture骚操作--全局共享conftest.py

使用pytest时,如果多处测试用例想共享一个前置、后置条件,则把fixture写在一个叫conftest.py的文件中。


1.固定名字,因为pytest有个机制会自动去conftest.py中搜索fixture, 而在用例文件当中,也不需要去引入conftest.py

2.作用域:当前conftest文件所在目录及N级子目录下的用例,均可直接调用此文件当中的 fixtures.

3.如果fixture出现重名。就近原则,优先使用自己文件下的,其次找父目录下的共享文件中的即同一爸爸的,其次才会去爷爷那去找。.

 
原文地址:https://www.cnblogs.com/shuchang1001/p/13492226.html