自动化框架pytest如何搭建
时间: 2023-09-07 13:13:19 浏览: 116
1. 安装pytest
在终端中输入以下命令:
```
pip install -U pytest
```
2. 创建测试文件
在你的项目目录下创建一个名为 `test_*.py` 的文件,其中 `*` 是你要测试的模块名。例如,如果你要测试名为 `calc.py` 的模块,那么你可以创建一个名为 `test_calc.py` 的文件。
3. 编写测试用例
在 `test_*.py` 文件中编写测试用例函数。每个测试用例函数应该以 `test_` 开头,并使用 `assert` 语句来检查结果是否符合预期。
例如,如果你要测试 `calc.py` 中的 `add()` 函数,那么你可以编写以下测试用例函数:
```
def test_add():
assert add(2, 3) == 5
assert add(0, 0) == 0
assert add(-1, 1) == 0
```
4. 运行测试
在终端中进入你的项目目录,并运行以下命令:
```
pytest
```
pytest 将自动查找并执行所有以 `test_*.py` 命名的文件中的测试用例函数,并输出结果。
5. 高级用法
pytest 支持许多高级功能,例如参数化测试、夹具、插件等。如果你想了解更多 pytest 的用法,请查阅官方文档。
相关问题
web ui自动化框架pytest
### 使用 Pytest 实现 Web UI 自动化测试
为了实现 Web UI 的自动化测试,Pytest 结合 Playwright 或 Selenium 等工具提供了强大的支持。Playwright 特别适合现代网页应用的端到端测试。
#### 创建测试环境
首先需要设置合适的开发环境来运行这些测试案例。推荐使用 `pipenv` 来管理项目的依赖关系[^5]:
```bash
pip install pipenv
cd your_project_directory
pipenv install --dev pytest playwright
```
这将创建一个新的虚拟环境并安装必要的软件包。
#### 编写基本测试脚本
下面展示了一个简单的例子,演示如何通过 Pytest 和 Playwright 进行页面加载后的断言验证:
```python
import pytest
from playwright.sync_api import sync_playwright
@pytest.fixture(scope="module")
def browser():
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
yield browser
browser.close()
@pytest.mark.parametrize("browser_type", ["chromium"])
def test_example(browser, browser_type):
context = browser.new_context()
page = context.new_page()
# 打开目标网站
page.goto('https://example.com')
# 断言标题是否正确
assert 'Example Domain' in page.title()
context.close()
```
上述代码片段展示了怎样启动浏览器实例、导航至指定URL以及执行简单的内容校验操作[^4]。
#### 组织测试结构
对于大型项目来说,良好的文件夹布局有助于维护性和扩展性。通常建议按照功能模块划分不同的子目录,并为每个特性编写独立的小型测试集。
例如,在名为 `tests/ui_tests/` 下面可以有如下结构:
- login/
- test_login_success.py
- test_invalid_credentials.py
- product_search/
- test_product_availability.py
这种分层方式使得定位特定部分变得容易得多。
#### 配置与参数化
为了让测试更加灵活多变,可以通过 YAML 文件或其他形式保存配置项;或者采用 `@pytest.mark.parametrize()` 对输入数据进行动态调整。
---
自动化测试框架pytest
### Pytest 自动化测试框架使用指南
#### 什么是 pytest?
Pytest 是一种功能强大且易于使用的 Python 测试框架,它能够帮助开发者更高效地编写和执行测试脚本[^1]。其核心优势在于简化了测试过程中的复杂操作,并提供了丰富的插件生态系统来扩展功能。
---
#### 安装 pytest
要开始使用 pytest,首先需要安装该库。可以通过 pip 工具完成安装:
```bash
pip install pytest
```
---
#### 基础概念
- **测试文件命名规则**:pytest 默认识别以 `test_` 开头或 `_test` 结尾的文件作为测试文件[^2]。
- **测试函数/方法命名规则**:测试函数应以 `test_` 开始;类名则需以 `Test` 开头,且不应包含父类继承(除非必要)。
---
#### 示例代码
以下是一个完整的 pytest 测试案例演示如何定义并运行多个测试用例:
##### 文件结构
假设有一个名为 `calculator.py` 的模块用于实现加法运算逻辑:
```python
# calculator.py
def add(a, b):
return a + b
```
对应的测试文件如下所示:
```python
# test_calculator.py
import pytest
from calculator import add
class TestCalculator:
def test_add_positive_numbers(self):
result = add(1, 2)
assert result == 3, f"Incorrect addition result: {result}" # 断言验证结果是否正确[^4]
def test_add_negative_numbers(self):
result = add(-1, -2)
assert result == -3, f"Incorrect addition result: {result}"
if __name__ == "__main__":
pytest.main()
```
运行此测试文件的方式有两种:
1. 执行整个目录下的所有测试文件:
```bash
pytest
```
2. 针对单个文件运行测试:
```bash
pytest test_calculator.py
```
---
#### 参数化测试
为了减少冗余代码量,pytest 提供了参数化的机制,允许一次性定义多种输入条件及其预期输出值。以下是基于前面例子改进后的版本:
```python
@pytest.mark.parametrize(
"a,b,expected",
[
(1, 2, 3),
(-1, -2, -3),
(0, 0, 0),
],
)
def test_add_parametrized(a, b, expected):
result = add(a, b)
assert result == expected, f"Expected {expected}, but got {result}"
```
这样可以显著提升测试效率与可维护性。
---
#### 固定装置(Fixtures)
固定装置是 pytest 中非常重要的特性之一,主要用于提供共享资源给不同测试用例使用。例如登录状态、数据库连接等情境都可通过 fixtures 实现复用。
下面展示了一个简单示例说明如何创建 fixture 并将其应用于多个测试用例之中:
```python
@pytest.fixture(scope="module")
def setup():
print("\nSetup called before any tests.")
yield {"username": "admin", "password": "secret"}
print("\nTeardown after all tests.")
class TestLoginFixtureUsage:
def test_login_with_fixture(self, setup):
user_info = setup
assert user_info["username"] == "admin"
def test_another_test_case_using_same_setup(self, setup):
pass # 可继续添加更多依赖于同一setup数据的测试逻辑
```
此处的关键点在于通过 `@pytest.fixture()` 装饰器声明一个 fixture 函数,在需要的地方传入即可调用对应的数据准备流程[^3]。
---
#### 总结
Pytest 不仅能极大地方便日常开发过程中单元测试工作的开展,而且还能促进团队协作时保持高质量交付成果的能力。掌握好它的基本语法以及高级特性的运用技巧将会成为每位工程师不可或缺的一项技能。
---
阅读全文
相关推荐













