都说Pytest框架比Unittest好用太多,你信吗?

本文深入解析Pytest框架,介绍其相较于unittest的优势,包括自动化测试用例的组织、参数化支持、测试报告生成及与Selenium结合进行web自动化测试。涵盖环境搭建、编写规则及实战案例。
部署运行你感兴趣的模型镜像

前言

大家都知道Python有自带的单元测试框架unittest,那为什么还要学习Pytest呢?先了解下Pytest优点


 pytest:

pytest是一个非常成熟的全功能的Python测试框架,是unittest框架的扩展,主要特点有以下几点:

 1、简单灵活,非常方便的组织自动化测试用例;

 2、支持参数化,可以细粒度地控制要测试的测试用例;

 3、能够支持简单的单元测试和复杂的功能测试,比如web端selenium/移动端appnium等自动化测试、request接口自动化测试

 4、pytest具有很多第三方插件,并且可以自定义扩展,比如测试报告生成,失败重运行机制

 5、测试用例的skip和fail处理;

 6、结合业界最美的测试报告allure+Jenkins,持续集成

selenium:

基于JavaScript代码库的自动化测试框架,通过脚本语言,模拟用户行为操作,最接近用户真实场景,实现对web自动测试。

Selenium,是目前的最火爆企业最主流的webUI自动化框架


环境搭建

pip install -U pytest

pytest-xdist #多线程

pip install -U pytest-rerunfailures   #重试运行cases

pip install  pytest-html #生成测试报告

pytest --version # 会展示当前已安装版本


编写规则

编写pytest测试样例非常简单,只需要按照下面的规则:

 测试文件以test_开头(以_test结尾也可以)

 测试类以Test开头,并且不能带有 init 方法

 测试函数以test_开头

 断言使用基本的assert即可


selenium+pytest案例实操

 import pytest # 引入pytest包

 def test_a(): # test开头的测试函数

     print("------->test_a")

     assert 1 # 断言成功

 def test_b():

     print("------->test_b")

     assert 0 # 断言失败

 if __name__ == '__main__':

        pytest.main(['-s', 'class01.py'])

可以包含一个或多个Test开头的测试类,test_开头的函数

1.测试类主函数模式

  pytest.main(['-s', 'test.py'])

2.命令行模式运行

  pytest 文件路径/测试文件名


3. 扩展插件

3.1. 测试报告: pytest-html

pytest.main(['-s','test.py','--html=./report/result.html'])

表示当前路径下生成report文件夹,result.html文件

批量运行用例:pytest-xdist

pytest.main(['-s','test.py','--html=./report/result.html','-n=2'])

-n=2 表示2个线程并发运行所有的测试用例

allure测试报告:allure-pytest

运行用例:pytest.main(['-s', '-q', '--alluredir', './report/xml'])

                 pytest 测试目标文件 --alluredir 数据目录

                运行后的结果,是生成xml的数据集合

生成报告:allure generate --clean ./report/xml/ -o ./results/html/

         第一个是数据集目录,第二个是生成报告目录

        -o是指向目标生成测试报告的目录;


4.conftest配置

当自动化用例越来越庞大的时候,很多用例的数据可以共享,复用,让用例脚本可读性,维护性更高,比如登录等

conftest.py 配置里可以实现数据共享,比如py跨文件共享前置

conftest.py配置脚本名称是固定的,不能改名称

不需要import导入 conftest.py,pytest用例会自动查找

自从使用了pytest框架,爱了爱了,深深的感受到它的可扩展性和灵活性,老板再也不用担心我的自动化效率低

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

Python3.10

Python3.10

Conda
Python

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

<think>好的,我现在需要帮助用户了解pytest接口自动化框架的基础知识用法。用户是初学者,可能需要一个详细的入门指南。首先,我得回顾一下自己关于pytest的知识,确保息准确。 首先,pytest是Python的一个测试框架,比unittest更灵活,支持参数化测试丰富的插件。接口自动化通常涉及发送HTTP请求,验证响应,所以需要结合requests库。接下来,我需要整理步骤:安装pytest相关库,创建项目结构,编写测试用例,使用fixture管理资源,参数化测试,断言机制,生成报告,以及持续集成。 然后,要确保符合用户给的系统级指令,比如正确使用LaTeX格式,生成相关问题,引用标记。例如,在提到数学公式时用$...$,虽然接口测试中可能用不到太多数学公式,但如果有相关概念可能需要应用。不过当前主题可能不涉及太多数学内容,所以可能这方面不。 需要检查引用内容,看看是否有相关的引用点。用户提供的引用中有关于Python接口自动化的内容,引用[2][5]提到了接口测试的基础知识优势,引用[4]提到了unittest,而pytest是另一个框架,可以对比明。引用[3]关于Web自动化可能关联较少,但可以忽略。 接下来,结构要清晰,分步骤讲解。可能需要包括安装、项目结构、编写测试用例、fixture使用、参数化、断言、报告持续集成。每个部分要简明,适合初学者。 生成的相关问题需要考虑用户可能进一步想了解的内容,比如pytestunittest的区别,如何处理认证,数据驱动测试等。 最后,确保所有引用正确标注,比如在提到接口测试的优势时引用[5],或者在提到unittest时引用[4]。 现在,开始组织内容,确保符合所有要求,语言口语化,步骤清晰,帮助用户逐步入门pytest接口自动化框架。</think>### pytest接口自动化框架入门指南 #### 1. 环境准备 安装核心库: ```bash pip install pytest requests pytest-html ``` - **pytest**:测试框架本体 - **requests**:HTTP请求库 - **pytest-html**:生成HTML测试报告 #### 2. 项目结构 ```bash project/ ├── conftest.py # 全局fixture配置 ├── test_demo_api.py # 测试用例文件 └── requirements.txt # 依赖库列表 ``` #### 3. 编写第一个测试用例 ```python import requests def test_get_user(): url = "https://api.example.com/users/1" response = requests.get(url) assert response.status_code == 200 assert response.json()["username"] == "testuser" ``` #### 4. 使用Fixture管理资源 ```python import pytest import requests @pytest.fixture def auth_token(): # 获取认证令牌 login_url = "https://api.example.com/login" data = {"username": "admin", "password": "secret"} response = requests.post(login_url, json=data) return response.json()["token"] def test_create_post(auth_token): headers = {"Authorization": f"Bearer {auth_token}"} post_data = {"title": "Hello", "content": "World"} response = requests.post("https://api.example.com/posts", json=post_data, headers=headers) assert response.status_code == 201 ``` #### 5. 参数化测试 ```python import pytest test_data = [ ("case1", 200), ("invalid_case", 404) ] @pytest.mark.parametrize("scenario,expected_code", test_data) def test_scenarios(scenario, expected_code): response = requests.get(f"https://api.example.com/{scenario}") assert response.status_code == expected_code ``` #### 6. 断言增强 pytest支持丰富的断言表达式: ```python def test_response_validation(): response = requests.get("https://api.example.com/products") # 验证响应结构 assert isinstance(response.json(), list) # 验证响应时间 assert response.elapsed.total_seconds() < 1.0 ``` #### 7. 生成测试报告 执行命令生成HTML报告: ```bash pytest --html=report.html ``` #### 8. 持续集成集成 在`.github/workflows/tests.yml`中添加: ```yaml name: API Tests on: [push] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 - name: Install dependencies run: pip install -r requirements.txt - name: Run tests run: pytest --html=report.html ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码上开始

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

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

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

打赏作者

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

抵扣说明:

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

余额充值