python_pytest测试框架

本文详细介绍了如何在Python测试框架Pytest中使用fixture、yield和参数化,包括登录模拟、模块级teardown、自动fixture、参数组合以及各种标记技巧,帮助读者提升测试代码的组织和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在这里插入图片描述
https://docs.pytest.org/en/latest/contents.html#toc

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# fixture
import pytest
@pytest.fixture()
def login():
    print("登录函数")

def test_case1(login):
    print("test_case1,需login")
    pass

def test_case2():
    print("test_case2,无需login")
    pass

def test_case3(login):
    print("test_case3,需login")
    pass

if __name__ == '__main__':
    pytest.main()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# fixture、yield
import pytest
@pytest.fixture(scope='module')
def login():
    print("登录函数")
    yield
    print("执行teardown!关闭浏览器")

def test_case1(login):
    print("test_case1,需login")

def test_case2():
    print("test_case2,无需login")

def test_case3(login):
    print("test_case3,需login")

if __name__ == '__main__':
    pytest.main()

在这里插入图片描述

import pytest
@pytest.fixture(autose=True)
def login():
    print("登录函数")
    yield
    print("执行teardown!关闭浏览器")

def test_case1(login):
    print("test_case1,需login")

def test_case2():
    print("test_case2,无需login")

def test_case3(login):
    print("test_case3,需login")

if __name__ == '__main__':
    pytest.main()
# @pytest.mark.parametrize 参数化
import pytest
# 参数化,前两个变量,后面是对应的数据
# 3+5 -> expression,8 -> result
@pytest.mark.parametrize("expression,result",[('3+5',8),('2+5',9),('2+8',10)])
def test_eval(expression,result):
    # eval 将字符串str当成有效的表达式来求值,并返回结果
    assert eval(expression) == result
    
# 参数组合
@pytest.mark.parametrize("x",[1,2])
@pytest.mark.parametrize("y",[8,9,10])
def test_foo(x,y):
    print(f"测试数据组合x:{x},y:{y}")

# 模拟登录
login_user=['tom','amy']
@pytest.fixture(scope='module')
def login(request):
    user = request.param
    print(f"\n准备登录,登录用户:{user}")
    return user

# indirect=True,把传过来的参数当作函数执行
@pytest.mark.parametrize('login',login_user,indirect=True)
def test_login(login):
    a = login
    print(f"\n测试用例中login的返回值:{a}")
    assert a != ""
# 跳过执行某个用例
@pytest.mark.skip("此次测试不执行登录“)

# 加入条件
@pytest.mark.skipif(sys.platform == 'darwin', reason = "不在macos上执行")

# @pytest.xfail
@pytest.mark.xfail
@pytest.mark.parametrize('login',login_user,indirect=True)
def test_login(login):
    a = login
    print(f"\n测试用例中login的返回值:{a}")
    assert a != ""
    raise NameError

在这里插入图片描述
在这里插入图片描述

import pytest
@pytest.mark.search
def test_search1():
    print("test_search1")
    raise NameError
    pass

@pytest.mark.search
def test_search2():
    print("test_search2")
    pass

@pytest.mark.search
def test_search3():
    print("test_search3")
    pass

@pytest.mark.login
def test_login1():
    print("test_login1")
    pass

@pytest.mark.login
def test_login2():
    print("test_login2")
    pass

if __name__ == '__main__':
    pytest.main()

在terminal里执行上面的命令,但是会报warning
这时候要去conftest.py里加入

def pytest_configure(config):
    mark_list = ['search','login']
    for markers in mark_list:
        config.addinivalue_line(
            "markers",markers
        )

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值