当前位置: 首页>后端>正文

接口测试用例编写000:环境初始化 ,数据清除(fixture,yield )

环境初始化和数据清除

方式1:setup,teardown

def setup_class(self):  # 前置条件
    pass
def teardown_class(self): 后置条件,环境恢复
    pass

在pytest中有四种setup和teardown,
1、setup_moduleteardown_module在整个测试用例所在的文件中所有的方法运行前和运行后运行,只会运行一次;
2、setup_classteardown_class在文件中的一个class中所有用例的前后运行;
3、setup_methodteardown_method在class内的每个方法运行前后运行;
4、setup_functionteardown_function则是在非class下属的每个测试方法的前后运行;

方式2:fixture ,yield

fixture

1、语法:fixture(scope = “function”,params=None,autouse=Flase,ids=None,name=None)

  • scope:有四个级别的参数
    “function”(默认)----每一个函数和方法会调用
    “class”,----每一个类调用一次,可能又多个function
    “module”----每个py文件调用一次,可能包含多个class和function
    “session”(每个包)--整个自动化只运行一次,如环境检查,登录
  • params 可选参数列表,它导致多个参数调用fixture功能和所有测试使用它
    在testCase中新建conftest.py ---专门存放fixture的配置文件,用例无需导入,pytest会自己找
  • autouse:是否自动跑用例
  • ids:每个字符串id的列表,每一个字符串对应于params,这样他就是测试ID的一部分;如果没有通过id,则从params自动生产
  • name:fixture的名称,默认是装饰函数的名称,如果fixture在定义它的统一模块中使用,夹击的功能名称将被请求夹击的功能arg遮蔽
    2、调用fixture的三种方法
    (1)函数或类里面方法直接传fixture的函数参数名称
@pytest.fixture()
def test01():
  print("\n开始执行function")
def test_a(test01):
  print("用例a执行")

(2)使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

import pytest
@pytest.fixture()
def test01():
  print("\n开始执行function")
@pytest.mark.usefixtures(test01)
def test_a():
  print("用例a执行")

(3)叠加usefixtures, 如果一个方法或者一个class用例想要同时调用多个fixture,可以使用@pytest.mark.usefixture()进行叠加。注意叠加顺序,先执行的放底层,后执行的放上层。

import pytest
@pytest.fixture()
def test01():
  print("\n开始执行function1")

def test02():
  print("\n开始执行function2")

@@pytest.mark.usefixture(test01)
@@pytest.mark.usefixture(test02)
def test_a():
  print("用例a执行")

usefixtures 与fixture 的区别
(1)如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。
(2)当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以。

yield

1.除了yield可以实现teardown,在request-context对象中注册addfinalizer方法也可以实现终结函数。


接口测试用例编写000:环境初始化 ,数据清除(fixture,yield ),第1张

2.yield和addfinalizer方法都是在测试完成后才执行相应的代码。

实例代码:

import pytest
@pytest.fixture(scope='seesion',autouse=False)
def start_running():
  print('------开始自动化测试运行------')
 
# ------------1、登录--------------------------
@pytest.fixture(scope='session') 
def login_init():
  print('-----开始执行登录操作----')
  token = Login().login(NAME_PWD,get_token=True)
  # reture token  # 后续操作不能执行
  yield token
  print('登录完成')

# ------------------2、店铺初始化--------------
# 有返回值的fixture的使用:如果一个fixture函数需要使用另一个fixture的返回值,直接使用他的函数名,如shop(login_init)
# 没有返回值:@pytest.mark.usefixture('函数名')
@pytest.fixture(scope='session') 
def shop_init():
  print('-----创建店铺实例操作----')
  shop_object=Shop() # 需要拿到token
  yield shop_object # 返回出去给--测试方法用

# ----------店铺更新初始化操作-------
@pytest.fixture(scope='class')
def shop_update_init(shop_init):
  shop_object = shop_init #  创建店铺实例,可以不写
  shop_id = shop_init.qurey({'page':1,'limit':20})['data']['records'][0]['id']
  image_info= shop_init.file_upload('../data/456.png')['data']['realFileName']
  shop_update = {'shop_object ':shop_object ,'shop_id':shop_id,'image_info':image_info}
  # yield shop_object,shop_id,image_info # 元组
  #yield shop_update 

https://www.xamrdz.com/backend/3tf1938892.html

相关文章: