pytest 技术总结

部署运行你感兴趣的模型镜像

目录

一  pytest的安装:

二  pytest有三种启动方式:

三 用例规则:

四 配置框架:


一  pytest的安装:

pip install pytest # 安装
pip install pytest -U # 升级到最新版

二    pytest有三种启动方式:

1. 命令: pytest::./test/test_area.py::::test_login

2. 代码:创建入口 run.py


3. 鼠标右键运行

三 用例规则:

测试框架在识别、加载用例的过程,称之为:用例发现pytest的用例发现步骤:
1. 遍历所有的目录,例外: venv , . 开头的目录
2. 打开python文件, test_ 开头 或者 _test 结尾
3. 遍历所有的 Test 开头类
4. 收集所有的 test_ 开头的函数 或者 方法

用例内容规则;

1. 可调用的(函数、方法、类、对象)
2. 名字 test_ 开头
3. 没有参数(参数有另外含义)
4. 没有返回值 (默认为None)

四 配置框架:

分别是什么方式
- 开头:参数
小写字母开头:ini配置
大写字母开头:环境遍历
配置文件: pytest.ini

常用参数:
-v : 增加详细程度
-s : 在用例中正常的使用输入输出
-x :快速退出,当遇到失败的用例停止执行
-m : 用例筛选

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>嗯,用户想了解pytest中装饰器的使用方法,特别是示例。首先,我需要回忆一下pytest中常用的装饰器,比如@pytest.mark.parametrize、@pytest.fixture,以及如何自定义装饰器。根据用户提供的引用内容,他们有提到这些点,所以需要结合这些引用资料来组织答案。 首先,我应该分点说明不同的装饰器用法。比如,参数化装饰器、fixture装饰器、自定义装饰器,还有组合使用的情况。每个部分都需要给出具体的代码示例,这样用户更容易理解。例如,参数化装饰器可以用于多组数据测试,fixture用于设置前置条件和后置操作,自定义装饰器可能用于添加额外功能,比如日志或时间记录。 接下来,要注意用户提到的系统级指令,特别是行内数学表达式要用$...$,不过这个问题可能不涉及数学公式,所以可能不需要用到。但需要确保代码块的格式正确,比如用三个反引号包裹,并标明语言类型。例如,Python代码块要正确展示。 然后,考虑用户的需求可能不仅仅是基础用法,他们可能想知道如何结合不同的装饰器,或者解决常见问题,比如装饰器顺序。根据引用4,用户提到@pytest.mark.parametrize和自定义装饰器一起使用,需要说明装饰器的顺序,通常是参数化放在最外层,自定义装饰器在内层。 另外,fixture装饰器在引用3、5中提到,需要说明如何创建fixture,设置作用域scope,参数params,以及自动使用autouse。带返回值的fixture可以传递数据给测试用例,这在引用5的示例中有说明,应该包含进去。 用户可能还关心如何判断一个函数是否是装饰器,但根据引用1,这可能属于另一个问题,但当前问题主要是使用方法,所以可能不需要深入讨论这点,但可以提到在pytest中装饰器通常通过@符号应用,比如@decorator。 还需要注意引用中的示例代码是否正确,比如测试函数的命名,是否需要使用特定的命名规则,比如以test_开头,以确保pytest能识别。例如,在fixture的例子中,测试函数test_data调用了data这个fixture,这里需要确保fixture的名称和测试参数一致。 另外,用户提供的引用2中提到了使用@pytest.mark.usefixtures来应用fixture,这也是一个装饰器用法,可以在不使用fixture返回值的情况下应用,比如设置浏览器的驱动,但不需要返回driver对象时使用。 组合装饰器的顺序问题需要强调,比如当同时使用参数化和自定义装饰器时,参数化应该在外层,自定义在内层,这样参数化先生效,然后自定义装饰器处理每个参数化的用例。例如引用4中的例子。 最后,生成相关问题部分需要考虑用户可能进一步的问题,比如如何调试装饰器、处理多个装饰器的顺序、或结合fixture和参数化,以及自定义装饰器的应用场景。根据已有的引用,可能的问题包括如何参数化测试、fixture的作用域、如何返回数据等。 总结一下,回答需要结构清晰,分点说明不同装饰器的用法,每个部分附上示例代码,并引用提供的资料作为支持。同时,确保代码语法正确,符合pytest的规范,例如正确的装饰器应用位置和测试函数结构。</think>### pytest装饰器技术详解 以下是pytest中与装饰器相关的核心用法及示例: --- #### 一、参数化装饰器 `@pytest.mark.parametrize` 用于为测试函数提供多组输入参数,实现数据驱动测试。 ```python import pytest @pytest.mark.parametrize("input,expected", [(1, 2), (3, 4)]) def test_increment(input, expected): assert input + 1 == expected ``` - **特点**:每组参数生成独立的测试用例[^4]。 --- #### 二、Fixture装饰器 `@pytest.fixture` 用于创建测试前置/后置逻辑,支持资源管理。 ```python import pytest @pytest.fixture(scope="module") def database_connection(): conn = create_db_connection() # 初始化连接 yield conn conn.close() # 测试结束后关闭连接 def test_query(database_connection): result = database_connection.execute("SELECT 1") assert result is not None ``` - **作用域**:`function`(默认)、`class`、`module`、`session`[^3]。 - **返回值传递**:Fixture可通过返回值向测试函数传递数据[^5]。 --- #### 三、自定义装饰器 用于扩展测试功能(如日志记录、权限校验)。 ```python import pytest def log_execution_time(func): def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) print(f"执行时间: {time.time() - start}s") return result return wrapper @log_execution_time def test_performance(): time.sleep(1) assert True ``` --- #### 四、组合使用装饰器 多个装饰器可叠加使用,**执行顺序从下往上**。 ```python @pytest.mark.parametrize("a,b", [(1,2), (3,4)]) @pytest.mark.usefixtures("driver") @log_execution_time def test_combined(a, b): assert a + 1 == b ``` - **规则**:参数化装饰器应放在最外层。 --- #### 五、常用标记装饰器 1. `@pytest.mark.skip`:跳过测试 2. `@pytest.mark.xfail`:预期失败测试 3. `@pytest.mark.usefixtures`:显式调用fixture[^2] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fish_study_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值