首页 > 其他分享 >Pytest学习笔记

Pytest学习笔记

时间:2023-02-22 14:22:41浏览次数:58  
标签:teardown setup py pytest 笔记 学习 Pytest print def

参考链接

1、pytest执行用例规则

  • 目录下执行所有的用例
pytest
// or
py.test
  • 执行单独一个pytest模块
pytest fileName.py
  • 运行某个模块里面的某个类
pytest fileName.py::className
  • 运行某个模块里面某个类里面的方法
pytest fileName.py::className::methodName
  • -v打印运行日志信息(详细)
pytest -v fileName.py
  • -q打印运行日志信息(简略)
pytest -q fileName.py
  • -s控制台输出结果
pytest -v -s fileName.py
//s是带控制台输出结果,也是输出详细运行日志
  • -m标记表达式
pytest -m login
//将运行用 @pytest.mark.login 装饰器修饰的所有测试
  • -x用例运行失败则立即停止执行
pytest -x fileName.py
  • -k运行包含关键字的用例
pytest -v -k "one" fileName.py
//执行测试用例名称包含 one 的所有用例
  • -k运行排除关键字的用例
pytest -v -k "not one" fileName.py
//执行测试用例名称不包含 one 的所有用例
  • -k运行匹配多个关键字的用例
pytest -v -k "one or two" fileName.py
//执行测试用例名称包含 one 或 two 的所有用例
  • --maxfail=num错误个数达到指定数量停止测试
pytest fileName.py --maxfail=1
//用例运行时允许的最大失败次数,超过则立即停止

2、setup和teardown

参考链接

unittest pytest
setup()
setupClass()
teardown()
teardownClass()
模块级(开始于模块始末,全局的):setup_module()、teardown_module()
函数级(只对函数用例生效,不在类中):setup_function()、teardown_function()
类级(只在类中前后运行一次,在类中):setup_class()、teardown_class()
方法级(开始于方法始末,在类中):setup_method()、teardown_method()
方法细化级(运行在调用方法的前后):setup()、teardown()
# test_setup_teardown.py
#!-*- coding: utf-8 -*-
import pytest

def setup_module():
    print("----all py module start run once setup_module eg. open safari----")

def teardown_module():
    print("----all py module end run once teardown_module eg. close safari----")

def setup_function():
    print("----every functional testcase start run everytime setup_function----")

def teardown_function():
    print("----every functional testcase end run everytime teardown_function----")

def test_one():
    print("one")

def test_two():
    print("two")

class TestCase():
    def setup_class(self):
        print("====all test class start run once setup_class====")

    def teardown_class(self):
        print("====all test class end run once teardown_class====")

    def setup_method(self):
        print("====class testcase run start run setup_method====")

    def teardown_method(self):
        print("====class testcase run end run teardown_method====")

    def setup(self):
        print("====class testcase run start run setup")

    def teardown(self):
        print("====class testcase run end run teardown")

    def test_three(self):
        print("three")

    def test_four(self):
        print("four")

if __name__ == '__main__':
    pytest.main(["-q", "-s", "-ra", "test_setup_teardown.py"])

3、fixture

参考链接
fixture的优势

  • 命名方式灵活,不局限于 setup 和 teardown 这几个命名
  • conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到 fixture
  • scope="module" 可以实现多个 .py 跨文件共享前置
  • scope="session" 可以实现多个 .py 跨文件使用一个 session 来完成多个用例
@pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)
def test():
    print("fixture初始化的参数列表")
  • scope:可以理解成 fixture 的作用范围,默认:function,还有 class、module、package、session
    • function 的作用域:每一个函数或方法都会调用
    • class 的作用域:每一个类调用一次,一个类中可以有多个方法
    • module 的作用域:每一个 .py 文件调用一次,该文件内又有多个 function 和 class
    • session 的作用域:是多个文件调用一次,可以跨 .py 文件调用,每个 .py 文件就是 module
  • params:一个可选的参数列表,它将导致多个参数调用 fixture 功能和所有测试使用它
  • autouse:默认:False,需要用例手动调用该 fixture;如果是 True,所有作用域内的测试用例都会自动调用该 fixture
  • ids:每个字符串 id 的列表,每个字符串对应于 params,这样他们就是测试ID的一部分。如果没有提供ID,它们将从 params 自动生成
  • name:默认:装饰器的名称,同一模块的 fixture 相互调用建议写不同的名称
# test_fixture.py
#!-*- coding: utf-8 -*-
import pytest

# first
@pytest.fixture
def login():
    print("input id login, passport login")

def test_s1(login):
    print("case 1: after login do test_s1")

def test_s2():
    print("case 2: no login, do test_s2")

# second
@pytest.fixture
def login2():
    print("input id login2, passport login")

@pytest.mark.usefixtures("login2", "login")
def test_s3():
    print("case 3: after login do test_s3")

# third
@pytest.fixture(autouse=True)
def login3():
    print("====login3====")

# not start with 'test', decoration don'r execute fixture
@pytest.mark.usefixtures("login2")
def login4():
    print("====login4====")

标签:teardown,setup,py,pytest,笔记,学习,Pytest,print,def
From: https://www.cnblogs.com/fishwithsheep/p/16918277.html

相关文章