【pytest】之fixture()和conftest使用详解

fixture的作用范围(scope)

fixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function

-function:每一个函数或方法都会调用

-class:每一个类调用一次,一个类中可以有多个方法

-module:每一个.py文件调用一次,该文件内又有多个function和class

-session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module

# Time:2022 2022/2/22 9:34
# Author: Jasmay
# -*- coding: utf-8 -*-
import pytest

#作用域为function
@pytest.fixture(scope="function")
def my_fixture():
    print("这是前置的方法,可以实现部分以及全部用例的前后置")
    yield
    print("这是后置的方法,可以实现部分以及全部用例的前后置")


class TestLogin:


    def test_login_01(self):
        print("\n测试01号登录成功")
    
    # my_fixture函数可以当参数,传入来调用
    def test_login_02(self,my_fixture):
        print("\n测试02号登录成功")

    def test_login_03(self):
        print("\n测试03号登录成功")

    def test_login_04(self):
        print("\n测试04号登录成功")

    def test_login_05(self):
        print("\n测试05号登录成功")

参数传递:

# Time:2022 2022/2/22 9:34
# Author: Jasmay
# -*- coding: utf-8 -*-
import pytest

@pytest.fixture(scope="function",params=['张三','李四','王五'])
def my_fixture(request):
    print("这是前置的方法,可以实现部分以及全部用例的前后置")
    yield request.param
    print("这是后置的方法,可以实现部分以及全部用例的前后置")


class TestLogin:


    def test_login_01(self):
        print("\n测试01号登录成功")

    # 函数可以当参数,传入来调用
    def test_login_02(self,my_fixture):
        print("\n测试02号登录成功",str(my_fixture))
        print('------------------\n'+str(my_fixture))

    def test_login_03(self):
        print("\n测试03号登录成功")

    def test_login_04(self):
        print("\n测试04号登录成功")

    def test_login_05(self):
        print("\n测试05号登录成功")


@pytest.fixture(scope=“function”,params=[‘张三’,‘李四’,‘王五’]),是参数名,有s
yield request.param,是属性名,没有s
固定写法。

return和yield的区别
1、return和yield都表示返回的意思,但return的后面不能有代码,返回值之后不再执行后续的代码;
2、yield返回后,可以接代码,会继续执行。

总结:

fixture可以放在conftest中使用。

conftest.py配置需要注意以下点:

  1. conftest.py:名称固定,不能改名称
  2. conftest.py与运行的用例最好在同一个pakage下,作用域:只对当前包起作用
  3. 不需要import导入conftest.py,pytest用例会自动查找
  4. scope=“session” 实现多个.py跨文件使用一个session来完成多个用例
# Time:2022 2022/2/23 13:42
# Author: Jasmay
# -*- coding: utf-8 -*-

import pytest
import uiautomator2 as u2
import time


@pytest.fixture(scope="session", autouse=True)
def device():
    d = u2.connect()
    d.unlock()
    time.sleep(1)
    pkg_name = 'com.taobao.taobao'
    currentApp = d.app_list_running()

    if pkg_name in currentApp:
        d.app_stop(pkg_name)

    d.app_start(pkg_name, wait=True)

    print("\n----------APP starts----------")
    print(d.info)
    time.sleep(10)
    yield d
    print("\n----------APP ends----------")

你可能感兴趣的:(python,python,开发语言,后端)