学习pytest的第四天----fixture作为参数传入+多个fixture的使用+fixture互相调用

fixture作为参数传入

fixture标记的测试用例的固件,当然可以有返回值。那么我们如何能在测试用例中获得固件的返回值呢?

我们来吃个小荔枝:我们在固件中添加返回值;然后在测试方法中传入固件名;在测试方法中,我们用固件名来表示其返回值。例子中我们的返回值是字符串,其他列表、元组以及字典类型均可,可自行尝试。

#test_Pytest.py文件
#coding=utf-8

import pytest

@pytest.fixture()
def myfixture():
    print ("执行testPytest里的前置函数")
    return "preMethod的返回值"

import pytest

class Test_Pytest():

        def test_one(self,myfixture):
                print("test_one方法执行")
                print(myfixture)
                assert 1==1

        def test_two(self,myfixture):
                print("test_two方法执行")
                print(myfixture)
                assert "o" in "love"

        def test_three(self):
                print("test_three方法执行")
                assert 3-2==1

if __name__=="__main__":
    pytest.main(['-s','test_Pytest.py'])

运行结果如下图:
学习pytest的第四天----fixture作为参数传入+多个fixture的使用+fixture互相调用

多个fixture的使用

pytest中也是支持一个测试函数调用多个固件,使用起来也没什么特别的。

吃个荔枝:我们定义了两个固件;在第一个测试方法中传入第一个固件,在第二个测试方法中传入第二个固件,在第三个测试方法中传入两个固件。

#test_Pytest.py文件
#coding=utf-8

import pytest

@pytest.fixture()
def myfixture1():
    print ("执行固件myfixture1")
    return "myfixture1"

@pytest.fixture()
def myfixture2():
    print ("执行固件myfixture2")
    return "myfixture2"

import pytest

class Test_Pytest():

        def test_one(self,myfixture1):
                print("test_one方法执行---%s" % myfixture1)
                assert 1==1

        def test_two(self,myfixture2):
                print("test_two方法执行---%s" % myfixture2)
                assert "o" in "love"

        def test_three(self,myfixture1,myfixture2):
                print("test_three方法执行---%s---%s" % (myfixture1,myfixture2))
                assert 3-2==1

if __name__=="__main__":
    pytest.main(['-s','test_Pytest.py'])

运行结果如下图:
学习pytest的第四天----fixture作为参数传入+多个fixture的使用+fixture互相调用

fixture互相调用

固件不仅可以被测试用例调用,也可以被其他的固件调用。

来吃个小荔枝:我们声明了两个固件,在第二个固件中传入了第一个固件;然后又在第一个测试方法中传入了第二个固件。

#文件名是test_firstFile.py
#coding=utf-8
import pytest

@pytest.fixture()
def myfixture1():
    print("执行myfixture1")

@pytest.fixture()
def myfixture2(myfixture1):
    print ("执行myfixture2")

class Test_firstFile():

    def test_one(self,myfixture2):
        print("执行test_one")
        assert 1+2==3

    def test_two(self,myfixture1):
        print("执行test_two")
        assert 1==1

    def test_three(self):
        print("执行test_three")
        assert 1+1==2

if __name__=="__main__":
    pytest.main(["-s","test_firstFile.py"])

运行结果如下图:因为我们的第二个固件调用了第一个固件,所以在第一个测试方法执行之前两个固件都执行了。
学习pytest的第四天----fixture作为参数传入+多个fixture的使用+fixture互相调用
在这个例子基础上,我们在第一个测试方法中在传入第一个固件,结果会怎么样?第一个固件会执行两次么?经验证,答案是不会的,只会执行一次

参考:
https://www.cnblogs.com/yoyoketang/tag/pytest/(感谢作者)