pytest安装+用例收集规则+fixture定义及使用+测试报告+运行方式

目录

一、pytest的安装操作

二、pytest中的测试用例的收集规则

三、pytest的基本操作

1. 使用Assert进行断言

2. fixtured的操作

3.fixture的其他操作

4.统计用例的运行时间

四、测试报告的生成

1.生成junitXML格式的测试报告,方便Jenkins进行集成

2.创建测试用例的URL

3.生成HTML格式的测试报告

五、pytest的运行命令

1.指定模块运行

2.指定目录运行

3.通过关键字表单式过滤

4.通过节点id来进行运行

5.通过标签表达式运行


一、pytest的安装操作

1.使用pip命令直接进行安装

pip install pytest

2.查看已安装的pytest的版本:

C:\Users\Administrator>pytest --version This is pytest version 4.6.4, imported from c:\python27\lib\site-packages\pytest.pyc

3.简单测试举例:

def reverse(string):
    return string[::-1] # 翻转字符串函数

def test_reverse():
    """翻转字符串测试函数"""
    string = "good"
    assert reverse(string) == "doog"  # 第1个断言操作

    another_string = "itest"
   assert reverse(another_string) == "tseti"   # 第2个断言操作

二、pytest中的测试用例的收集规则

1.默认从当前目录中搜集测试用例,即在哪个目录下运行pytest命令,则从哪个目录中进行搜索。

2.搜索规则:

  • 查找当前文件夹以及递归子文件夹中的所有 test_*.py 或 *_test.py 的文件,将其当作测试文件
  • 不在类中的以 test_ 开头的方法和函数
  • 在Test开头的类中(不含__init__方法),以test_ 开头的方法
  • pytest也支持unittest模式的用例定义

举例:当前文件下有2个测试文件:

test_calc.py test_quick_start.py

则运行所有的py文件:

pytest # 运行所有的test_ 开头的py文件

只运行部分py文件:

pytest test_calc.py # 只运行test_calc.py

三、pytest的基本操作

1. 使用Assert进行断言

每一个测试用例都需要尽心断言,pytest使用python的assert进行断言,降低了学习成本。

assert后接表达式,只要表达式的结果为true,则用例执行成功,反之失败。

assert执行失败时的描述非常清晰:

================================== FAILURES ===================================
________________________________ test_reverse _________________________________

    def test_reverse():
        string = "good"
>       assert reverse(string) == "dooog"
E       AssertionError: assert 'doog' == 'dooog'
E         - doog
E         + dooog
E         ?    +

test_quick_start.py:12: AssertionError
========================== 1 failed in 0.12 seconds ===========================

常见的断言:

  • assert可以使用直接使用“==”、“!=”、“<”、“>”、“>=”、"<=" 等符号来比较相等、不相等、小于、大于、大于等于和小于等于。
  • assert 可以直接使用 in 和not in 来比较包含与不包含。
  • 通过assert不需要任何辅助符号,直接判断对象是否为ture,而assert not 用于判断是否为false

2. fixtured的操作

fixture:即测试用例执行的环境准备和清理操作。

在unittest中指的是setup(),teardown(),classSetup(),classTeardown()。

fixture主要的目的是为了提供一种可靠和可重复型的手段去运行那些最基本的内容。例如在测试网站时,每个用例都需要登录和退出,利用fixture只做一次即可,避免在每个用例执行前都做冗余的操作。

使用Fixture进行初始化操作,相当于 tearUp和tearDown的过程,可在下述情境中使用:

  • 所有用例执行之前初始化数据、对象
  • 所有用例结束之后销毁数据、对象
  • 每个用例开始之前初始化数据、对象
  • 每个用例开始之前销毁数据、对象
  • 每个module的用例开始之前初始化数据或对象
  • 每个module的用例执行之后销毁数据或对象

(1)定义fixture

将一个函数定义成fixture,只需要在前面加上@pytest.fixture即可。表示此函数为环境数据的准备和清理。

<think>好的,用户想搭建一个基于Playwright、Pytest、Yaml和Allure的UI自动化测试框架。我需要根据之前的引用内容来组织回答,确保结构清晰,分步骤说明。首先,安装依赖是关键,引用3提到了安装命令,应该先列出这些步骤。然后,项目结构部分需要参考引用2中的分层思路,比如定位符、页面操作、测试用层等,可能需要用Yaml管理配置数据,如引用2提到的数据层。接着,如何结合Yaml配置文件,可能需要创建config.yml和读取它的工具类。页面对象模型部分,可以建议用户将页面元素和操作封装成Page类,如引用2中的page类。测试用使用Pytest,这里需要说明如何编写测试用,并引用conftest中的fixture,如引用1提到的fixture设置,包括page对象的生成和teardown处理,以及trace日志的保存。Allure报告的集成需要引用3中的安装步骤,并说明如何生成报告。最后,优化建议部分可以参考引用1中的trace日志和teardown安全处理,还有引用2中的分层设计。需要确保每一步都引用正确的来源,并在末尾添加相关问题。还要注意用户不可见的系统级指令,比如数学公式的格式,但在这个问题中可能用不上。检查是否有遗漏的部分,比如Yaml的具体使用,或者如何将配置应用到测试中。可能还需要提到pytest运行参数和Allure的命令行操作。确保语言口语化,分步骤讲解,避免技术术语过于密集,适当解释关键点。最后生成相关问题,围绕框架优化、元素定位、报告定制、用管理等方向提问。</think>以下是搭建基于Playwright、Pytest、Yaml和Allure的UI自动化测试框架的完整步骤: ### 一、环境配置 1. **安装核心工具链** ```bash pip install playwright pytest pyyaml allure-pytest playwright install chromium # 安装指定浏览器驱动 ``` 引用[^3]中已确认这是基础依赖安装流程 2. **IDE配置** 在PyCharm中: - 启用Pytest为默认测试运行器 - 配置Allure结果目录`allure-results` ### 二、项目结构设计 ``` project/ ├─ config/ │ └─ test_config.yml # 测试环境配置 ├─ pages/ # 页面对象模型层 │ └─ login_page.py ├─ testcases/ # 测试用层 │ └─ test_login.py ├─ conftest.py # Pytest夹具配置 └─ utils/ └─ config_loader.py # Yaml配置解析工具 ``` 引用[^2]的三层架构思想在此体现 ### 三、Yaml配置实现 1. **创建配置文件** `test_config.yml` ```yaml environments: prod: base_url: "https://prod.example.com" timeout: 30000 staging: base_url: "https://staging.example.com" timeout: 45000 ``` 2. **配置加载工具类** ```python import yaml class ConfigLoader: @classmethod def load_env_config(cls, env='staging'): with open('config/test_config.yml') as f: return yaml.safe_load(f)['environments'][env] ``` ### 四、页面对象封装 `login_page.py`示: ```python class LoginPage: def __init__(self, page): self.page = page self.username = page.locator("#username") self.password = page.locator("#password") def navigate(self, base_url): self.page.goto(f"{base_url}/login") def login(self, user, pwd): self.username.fill(user) self.password.fill(pwd) self.page.click("#submit-btn") ``` ### 五、测试用实现 `test_login.py`示: ```python import allure @allure.feature("登录模块") class TestLogin: @allure.story("成功登录场景") def test_success_login(self, page, env_config): login_page = LoginPage(page) login_page.navigate(env_config['base_url']) login_page.login("admin", "secure123") assert page.url.endswith("/dashboard") ``` ### 六、Pytest夹具配置 `conftest.py`关键配置: ```python import pytest from utils.config_loader import ConfigLoader @pytest.fixture(scope="class") def page(context): context = context.new_context() page = context.new_page() yield page # 安全关闭并保存追踪日志 context.close() page.context.tracing.stop(path="trace.zip") @pytest.fixture(scope="session") def env_config(): return ConfigLoader.load_env_config() ``` 引用[^1]中提到的安全teardown机制在此实现 ### 七、Allure报告生成 1. **执行测试时添加参数**: ```bash pytest --alluredir=allure-results ``` 2. **生成可视化报告**: ```bash allure serve allure-results ``` ### 八、框架优化建议 1. **元素定位策略**: - 使用Playwright的`data-testid`选择器增强稳定性 - 实现动态元素等待机制: ```python page.wait_for_selector(".loading", state="hidden", timeout=5000) ``` 2. **失败重试机制**: 在`pytest.ini`中添加: ```ini [pytest] addopts = --reruns 2 --reruns-delay 1 ``` 3. **多浏览器支持**: 扩展`conftest.py`夹具: ```python @pytest.fixture(params=["chromium", "firefox"]) def browser_type(request): return request.param ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值