用例管理框架pytest

Pytest框架详解

一、作用:

1、发现用例:默认发现用例的规则。模块名必须以test_开头或者_test结尾,测试类必须以Test开头,测试方法必须以test_开头

2、执行用例

3、判断结果

4、生成结果

二、Pytest用例管理框架详细介绍

结合sele,reque,appium实现web,接口,app自动化。

Allure生成非常美观的报告以及和jenkins实现持续集成

插件:pytest;

pytest-html;生成html报告

pytest-xdist  多线程执行

pytest-ordering  控制用例的执行顺序

pytest-rerunfailures  失败用例重跑

pytest-base-url  基础路径

allure-pytest  生成allure报告

---------上述均放到requirements.txt里面,通过以下命令安装

pip install -r requirements.txt

三、如何执行

1、命令行?不行现在

2、主函数

import pytest

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

3、通过配置文件pytest.ini来改变以及执行用例

不管是命令行还是主函数,都会读取pytest.ini配置文件来执行。

<
<think>我们之前已经讨论过Pytest和Unittest的区别,现在用户具体询问如何将已有的Unittest测试用迁移到Pytest框架。 迁移步骤通常包括: 1. 安装Pytest:确保环境中有pytest。 2. 无需修改测试用Pytest可以直接运行Unittest格式的测试用(因为Pytest兼容Unittest)。 3. 逐步利用Pytest特性:可以逐步将测试用改写成Pytest风格,比如将setUp/tearDown替换为fixture,将测试方法从类中移出成为独立函数(可选),使用参数化等。 具体步骤: 步骤1:安装pytest 在命令行中执行:pip install pytest 步骤2:运行测试 直接使用pytest命令运行,它会自动发现并运行unittest用(因为pytest支持发现unittest.TestCase的子类)。 步骤3:逐步重构(可选,非必须) - 将测试类中的setUp和tearDown方法替换为pytest的fixture(使用@pytest.fixture装饰器)。 - 将测试方法从类中移出,变成模块级的函数(但注意,如果使用类来组织测试,pytest也支持,所以这一步可选)。 - 使用pytest的参数化替代unittest中的参数化(如使用@ddt或subTest的地方替换为@pytest.mark.parametrize)。 - 将self.assertXXX改为简单的assert语句。 注意:在迁移过程中,可以部分迁移,即部分用仍保持unittest风格,部分改为pytest风格,pytest都能运行。 示:将一个unittest测试用改为pytest风格 原Unittest测试用: ```python import unittest class TestStringMethods(unittest.TestCase): def setUp(self): self.str = "Hello" def test_upper(self): self.assertEqual(self.str.upper(), "HELLO") def test_isupper(self): self.assertTrue("HELLO".isupper()) self.assertFalse("Hello".isupper()) ``` 迁移到Pytest风格(使用fixture和普通函数): ```python import pytest @pytest.fixture def setup_string(): return "Hello" def test_upper(setup_string): assert setup_string.upper() == "HELLO" def test_isupper(): assert "HELLO".isupper() is True assert "Hello".isupper() is False ``` 或者,如果仍想用类组织(可选): ```python class TestStringMethods: @pytest.fixture(autouse=True) def setup_string(self): self.str = "Hello" def test_upper(self): assert self.str.upper() == "HELLO" def test_isupper(self): assert "HELLO".isupper() is True assert "Hello".isupper() is False ``` 注意事项: - 在类中,setup_string这个fixture通过autouse=True自动应用到每个测试方法。 - 在类中,测试方法不需要以test开头?不,仍然需要,因为pytest的发现规则是:类名不需要特定,但测试方法必须以test_开头(或者根据配置的规则)。 另外,pytest运行unittest用时,会显示为unittest风格的输出,但可以享受到pytest的一些特性(比如更丰富的输出、插件支持等)。 迁移的收益: - 可以利用pytest的丰富插件(如测试报告、并行执行等)。 - 测试代码更简洁,减少样板代码。 但是,如果项目庞大,完全重写所有测试用可能不现实,所以可以逐步迁移。 最后,必须提出3-5个相关问题,放在最后,以“§§相关问题§§”开头。</think>### 如何将 Unittest 测试用迁移到 Pytest 框架 #### **迁移步骤** 1. **安装 Pytest** ```bash pip install pytest ``` 2. **直接运行 Unittest 用(无需修改)** Pytest 原生支持运行 Unittest 用: ```bash pytest # 自动发现并执行所有 unittest 和 pytest ``` 3. **逐步重构关键部分** - **替换断言** 将 `self.assertXxx()` 改为原生 `assert`: ```python # Unittest self.assertEqual(result, expected) # Pytest assert result == expected ``` - **重构 Fixture** 将 `setUp()`/`tearDown()` 替换为 `@pytest.fixture`: ```python # Unittest class TestDemo(unittest.TestCase): def setUp(self): self.db = Database() # Pytest @pytest.fixture(scope="class") def db(): return Database() class TestDemo: def test_case(self, db): # 依赖注入 assert db.query() is not None ``` - **参数化改造** 用 `@pytest.mark.parametrize` 替代 `subTest`: ```python # Unittest for value in [1, 2, 3]: with self.subTest(value=value): self.assertTrue(value > 0) # Pytest @pytest.mark.parametrize("value", [1, 2, 3]) def test_positive(value): assert value > 0 ``` 4. **处理兼容性问题** - 保留 `unittest.mock` 为 `pytest-mock`: ```python # 原代码 from unittest.mock import patch # 迁移后 def test_mock(mocker): # pytest-mock 插件 mocker.patch("module.func", return_value=42) ``` #### **迁移注意事项** 1. **目录结构调整** Pytest 默认搜索 `test_*.py` 文件和 `Test*` 类,确保文件名符合规范(如 `test_api.py`)。 2. **渐进式迁移** - 优先迁移新用Pytest 风格 - 分批重构旧用,利用 Pytest 兼容性逐步过渡 - 使用 `pytest --collect-only` 验证用发现 3. **配置优化** 添加 `pytest.ini` 配置: ```ini [pytest] python_files = test_*.py addopts = -v --cov=src # 启用覆盖率等插件 ``` > **关键优势**:迁移后可使用 Pytest 的[失败重试](https://github.com/pytest-dev/pytest-rerunfailures)、[并行测试](https://github.com/pytest-dev/pytest-xdist)等插件大幅提升效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值