赞
踩
当想在运行测试用例前运行一些代码时,如测试数据的准备,数据库的初始化连接、关闭;打开浏览器、关闭浏览器;等前置条件后置处理都可以使用fixture来实现。
创建方法如下:
定义fixture与普通函数差不多,唯一区别就是在函数上加装饰器@pytest.fixture(),fixture命名不要以test开头,跟用例区分开。
如需引用fixtrue的前置条件则需要把fixture的函数名称做为用例函数的参数传入。
如下:执行test_one时会先执行fix函数,test_two则没有执行
引用fixtrue方式二:直接在测试用例前面加装饰器pytest.mark.userxtrues(fixtrue_name),传入fixtrue_name(fixtrue函数名称)
但是如果有很多测试用例文件时,并且它引用的前置条件是一样的,用例写的越来越多的时候,难道每个py文件都重新定义一遍?或者可以定义在特殊的文件当中,需要直接调用就好了。
当然pytest已经准备好了这个公共文件conftest.py。而且完全不需要引用这个文件,pytest用例会自动识别该文件。
规则如下:
如下将fixtrue的函数放到conftest.py文件中,运行测试用例demo6与demo7
运行结果:
来看下fixtrue的参数列表:
主要介绍下scope的作用范围与autouse。
scope:有四个级别参数"function",“class”,“module”,“session”
scope=”funciton”:
默认是function,作用范围每个测试用例执行前都会运行一次:
scope=”class”:
fixture为class级别的时候,如果一个class里面有多个用例,都调用了次fixture,那么此fixture只在此class里所有用例开始前执行一次
scope=“module”:
fixture为module时,在当前.py脚本里面所有用例开始前只执行一次。
scope=“session”
fixture为session级别是可以跨.py模块调用的,也就是当我们有多个.py文件的用例的时候,如果运行所有用例时只需调用一次fixture,那就可以设置为scope=“session”,写到conftest.py文件里。
运行测试用例demo6.py:
demo7.py
运行结果:
autouse:默认是False,需要用例手动调用fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture
前面介绍的只是前置条件的操作,接下来看下后置条件是如何实现的;fixture中实现后置条件并不是一个独立的函数,用关键字yield分隔前置操作和后置操作。如果没用后置,那么关键字yield就不用写。如下
如需要用的fixtrue中的返回值则直接用yield返回即可:
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。