pytest-fixture详解

fixture

优势:

  • pytest的fixture命名不在局限于setup和teardown命名方式
  • 所有的fixture都可以一个conftest.py的文件中,供所有测试用例使用

fixture 创建和使用方法
fixture 创建

#1. @pytest.fixture()
#2. 编写一个普通函数
@pytest.fixture()
def login():
	print("执行登录")

fixture 使用

#在需要使用fixture的测试用例中,当做参数传入即可
def test_shopping(login):
	print("测试购物")

使用一个fixture来实现setup和teardown
语法:yield 关键字

@pytest.fixture()
def login():
	print("打开浏览器,登录成功")
	yield     #用例执行成功后执行,相当于teardown
	print("关闭浏览器")

def test(login):     #相当于setup在test用例前执行
	print("执行")

yield 遇到异常
1.不会影响后续用例的执行
2.当用例执行完之后,会执行yield后面的代码,但不能return

addfinalizer这个实现功能跟yield一样,可以return参数。传给后面用例,示例:

import pytest
#创建fixture
def open(request):
	driver=webdriver.chrome()
	print("打开浏览器")
				def end():
					driver.quit()
	request.addfinalizer(end)  #终结函数 --作用和yield一样
	return driver

def test.baidu(open):
	open.get("http://www.baidu.com")
	title=open.title
	print("标题",title)
_fixture其他方法使用

1.fixture 返回值
2.fixture 参数化

@pytest.fixture(params:[1,2,3])
def need_data(request):          #传入参数params
	return request.param          #取列表中单个值

class Test_ABC:
	def test_a(self,need_data):
		print("---------------------test_a")
		assert need_data !=3   #断言need_data不等于3

使用装饰器引用fixture

import pytest
@pytest.fixture()   #fixture标记的函数可以应用于测试类外部
def before():
	print("------------before")
@pytest.mark.usefixture("before")
class Test_ABC:
	def setup(self):
		print("---------setup")
	def test_a(self):
		print("-------test_a")
		assert 1

fixture(scope=“function”,params=None,autouse=False,ids=None,name=None)
优势:(fixture相对于setup和teardown来说应该有以下几点优势)

  • 命名方式灵活,不局限于setup和teardown这几个命名
  • conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置
  • scope = “module” 可以实现多个.py跨文件共享前置,每个.py文件调用一次
  • scope = “session” 可以实现多个.py跨文件使用一个session来完成多个用例

猜你喜欢

转载自blog.csdn.net/qq_36875803/article/details/109232197