pytest 自动化测试框架(二)

本文深入探讨 pytest 框架的高级特性,包括 fixture 的使用方式,如作为函数参数、指定范围共享、conftest.py 文件的配置,以及多线程并行与分布式执行测试。此外,还介绍了如何结合 pytest-html 生成测试报告,以及 pytest 的 assert 断言功能。通过实例展示了如何提高测试效率和报告质量。
摘要由CSDN通过智能技术生成

本文节选自霍格沃玆测试学院内部教材,文末链接进阶学习。

上一篇文章中分享了 pytest 的基本用法,本文进一步介绍 pytest 的其他实用特性和进阶技巧。

pytest fixtures

pytest 中可以使用 @pytest.fixture 装饰器来装饰一个方法,被装饰方法的方法名可以作为一个参数传入到测试方法中。可以使用这种方式来完成测试之前的初始化,也可以返回数据给测试函数。

将 fixture 作为函数参数

通常使用 setup 和 teardown 来进行资源的初始化。如果有这样一个场景,测试用例 1 需要依赖登录功能,测试用例 2 不需要登录功能,测试用例 3 需要登录功能。这种场景 setup,teardown 无法实现,可以使用 pytest fixture 功能,在方法前面加个 @pytest.fixture 装饰器,加了这个装饰器的方法可以以参数的形式传入到方法里面执行。

例如在登录的方法,加上 @pytest.fixture 这个装饰器后,将这个用例方法名以参数的形式传到方法里,这个方法就会先执行这个登录方法,再去执行自身的用例步骤,如果没有传入这个登录方法,就不执行登录操作,直接执行已有的步骤。

创建一个文件名为“test_fixture.py”,代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pytest

@pytest.fixture()
def login():
    print("这是个登录方法")
    return ('tom','123')

@pytest.fixture()
def operate():
    print("登录后的操作")

def test_case1(login,operate):
    print(login)
    print("test_case1,需要登录")

def test_case2():
    print("test_case2,不需要登录 ")

def test_case3(login):
    print(login)
    print("test_case3,需要登录")

在上面的代码中,测试用例 test_case1 和 test_case3 分别增加了 login 方法名作为参数,pytest 会发现并调用 @pytest.fixture 标记的 login 功能,运行测试结果如下:

plugins: html-2.0.1, rerunfailures-8.0, xdist-1.31.0, \
ordering-0.6, forked-1.1.3, allure-pytest-2.8.11, metadata-1.8.0
collecting ... collected 3 items

test_fixture.py::test_case1 这是个登录方法
登录后的操作
PASSED     [ 33%]('tom', '123')
test_case1,需要登录

test_fixture.py::test_case2 PASSED \
[ 66%]test_case2,不需要登录 

test_fixture.py::test_case3 这是个登录方法
PASSED      [100%]('tom', '123')
test_case3,需要登录

============================== 3 passed in 0.02s ===============================
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值