pytest-fixture

fixture

作用:将函数定义为参数,并传入到其他函数中当参数使用;

被定义为fixture的函数可以当做是测试用例的资源,将资源传入用例后执行;测试的某系统需要登录/退出。那么每一条用例执行前都需要登录,执行完又都需要退出,可以使用fixture

 

例1:

简单入门,用fixture实现1+1=2

import pytest
@pytest.fixture()   #定义一个fixture的函数,用来当资源传递给其他函数
def p1():
    y = 1
    return y    
def p2(p1):     #传入fixture资源到内部当参数使用
    x = 1
    s = x + p1()
    print('1+1= %d' % s)
#执行
p2(p1)
>>1+1= 2

————————————————————————————————————————————————————

2:

编写测试用例,并在测试用例中传入fixture声明的函数,fixture声明的函数,会在执行测试类前先执行

import pytest
class Test1:
  @pytest.fixture()
  def cou(self):  
        print('9999999999999999999999999999999999999')
     return 1

  def test_y1(self,cou):
    print(u'用例1 %s' % cou)
    assert cou ==2

  def  test_y2(self,cou):
    print(u'用例2 %s' % cou)
    assert cou == 3
 if __name__ == '__main__':
    pytest.main()

解释:在类中定义了2个测试用例,且每个测试用例都传入fixture函数,发现——fixture定义的函数会在每个用例执行前调用,如下图,用例多了会消耗手机内存,例3将进行处理

 

————————————————————————————————————————————————————

例3

将由于在测试类中,声明fixture,在执行用例会重复执行该代码,现通过将fixture函数分离,实现执行一次该函数,实现多次调用

1.将该函数分离出来,并命名一个叫:conftest.py的文件,内容如下:

其中,yield会在所有用例执行完后释放该资源,return不会释放资源

import pytest
@pytest.fixture(scope='session')
def cou():
  print('ZheLiShi-confest.py')
  # return 2
  yield 22
  print('end!!!!!')

2.在测试用例中编写代码:

class Test1:
  def test_y1(self,cou):
    print(u'yongli1 %s' % cou)
    assert cou ==2

  def  test_y2(self,cou):
     print(u'yongli2 %s' % cou)
     assert cou == 2 

if __name__ == '__main__':
    pytest.main('-s test_y.py')

执行结果:

————————————————————————————————————————————————————

有关:yield

上面例子中,使用到yield和return,其中:

yield返回执行结果并不中断程序执行,return在返回执行结果的同时终端程序执行

 

 

————————————————————————————————————————————————————

fixture作用域的4个参数

有四种作用域的fixture,分别为function,class,module和session作用域。

简单理解

function scope,就是每一个函数都会调用;

class scope,就是每一个类调用一次,一个类可以有多个函数;

module scope,应该是一个文件调用一次,该文件内又有多个function;

session scope范围更大,是多个文件调用一次,每个文件有对应着一个module

不清楚用哪一个就挑影响范围大的:session>module>class>function

————————————————————————————————————————————————————

fixture添加测试参数

contest.py文件

@pytest.finxture(params=[1,2,3])
def canshu(request):
  return request.param

test_y.py文件
class Test1:
  def test_a(self,canshu):
    print(‘canshu %s’ % canshu)
    assert canshu ==1
if __name__ == '__main__':
  pytest.main('-q test_y.py')

执行结果:

————————————————————————————————————————————————————

 

 

 

 

参考文档:http://mio4kon.com/2017/04/12/%E7%A7%BB%E5%8A%A8%E7%AB%AF%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E7%B3%BB%E5%88%97%E4%B9%8B%E4%BA%8C%E2%80%94%E2%80%94%E5%88%A9%E5%99%A8pytest%E6%95%99%E7%A8%8B/

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值