pytest之fixture

pytest使用规则:

1.文件开头用test_开头

2.测试类用Test开头

3.测试函数以test_开头

4.断言用assert

 

固定装置:fixture(固定代码)

1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等

2.测试用例前置条件可以用fixture实现

3.像unitest一样能使用step,teardown

4.fixturn可以实现unittest不能实现的功能,如unittest中的测试用例和测试用例无法传递参数和数据,但fixturn可以

详解:

一、又独立命名,通过声明它们从函数模块类整个项目使用来激活

二、模块化方式实现,每个fixture可互相调用

三、fixture可以从简单的单元扩展到复杂功能,允许配置跟组件。对fiture和测试用例参数化,或者跨函数function类class模moudle测试会话session

在fixture中断言失败error    在用例失败是fail

1.当作参数传入:

@python.fixture()

当其他函数调用被fixture标记的函数,直接当参数传入,用fixture()标记的函数不要用test_开头

用例fixture没有reture,返回值是none

例子:

@pytest.fixture

def login():
  p=12345

  u=test

  return(P)

使用:

def test_login(login)

  asser p!=-1,u!=-1

 

2.使用@pytest.mark.usefixtures('fixture),下面类中的函数自动带入标记的函数入参

使用:

@pytest.fixture

def login():
  p=12345

  u=test

  return(P)

@pytest.mark.usefixtures(login)

class Test_login():

  def test_login():

    assert p!=1

  def test_login2():

    assert u!=1

3.autouse参数,可以设置生效范围

@python.fixture(scope="调用范围“,autouse=Ture). [class:每个类运行一次,用例运行前调用一次;session:多.py文件调用;function:每个函数方法运行一次;moudle:每个模块运行一次)

 

例子:

@python.fixture() 不写范围默认为function

def psw():
  p=12345

  u=test

  return(p)

def test_login(psw):

  psw=psw

  assert psw==123456

 

@python.fixture(scope='class') 如果class里有很多用例,都调用fixture,那么此fixture在该class里所有用例开始前执行一次,但里面的值可一直使用

 

@python.fixture(scope='modle') 在模块里的所有用例开始前运行一次,里面的值可用

 

@python.fixture(scope='session')   session级别是可以跨多个.py文件模块调用的,如果有多个py文件调用且需调用一次,可以设置为scope=session并写到conftest.py下

 

conftest.py文件名称固定,pytest会自动识别该文件,放工程根目录,就可以全局调用了,如放到其package包下,那只在该package内有效,可以在两个文件内直接调用

 

多个fixture直接相互作用

1.使用多个fixture,可以返回列表,数组,字典

@pytest.fixture()

def login():

  u=test

  p=123456

  return(u,p)

def test_login(login):

  u=login[u]

  p=login[p]

2.可设置多个fixture

@pytest.fixture()

def psw():

  p=123456

  return(p)

def user():

  u=test

  return(u)

def test_login(user,psw):

  u=user

  p=psw

  asser user and psw !=-1

3.fixture 与fixture相互调用

@pytest.fixture()

def first():

  u=user

  return u

@pytest.fixture()

def psw(first):

  u=first

  p=123456

  return(u,p)

def test_login(psw):

  u=psw[0]

  p=psw[1]

  asser u!=-1

 

posted on 2022-04-08 17:18  zfj822  阅读(80)  评论(0编辑  收藏  举报