iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Pytest自动化测试框架如何使用
  • 764
分享到

Pytest自动化测试框架如何使用

2023-07-05 12:07:40 764人浏览 独家记忆
摘要

这篇文章主要讲解了“Pytest自动化测试框架如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pytest自动化测试框架如何使用”吧!Pytest和Unittest测试框架的区别?如何

这篇文章主要讲解了“Pytest自动化测试框架如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pytest自动化测试框架如何使用”吧!

    Pytest和Unittest测试框架的区别?

    如何区分这两者,很简单unittest作为官方的测试框架,在测试方面更加基础,并且可以再次基础上进行二次开发,同时在用法上格式会更加复杂;而pytest框架作为第三方框架,方便的地方就在于使用更加灵活,并且能够对原有unittest风格的测试用例有很好的兼容性,同时在扩展上更加丰富,可通过扩展的插件增加使用的场景,比如一些并发测试等;

    Pytest 安装

    pip安装:

    pip install pytest

    测试安装成功:

    pytest --helppy.test --help

    检查安装版本:

    pytest --version

    Pytest 示例

    Pytest编写规则:

    • 测试文件以test_开头(以_test为结尾)

    • 测试的类以Test开头;

    • 测试的方法以test_开头

    • 断言使用基本的assert

    test_example.py

    def count_num(a: list) -> int:    return len(a)  def test_count():    assert count_num([1, 2, 3]) != 3

    执行测试:

    pytest test_example.py

    执行结果:

    C:\Users\libuliduobuqiuqiu\Desktop\gitProjects\pythonDemo\pytest>pytest test_example.py -v
    ================================================================= test session starts =================================================================
    platfORM win32 -- Python 3.6.8, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 -- d:\coding\python3.6\python.exe
    cachedir: .pytest_cache
    rootdir: C:\Users\libuliduobuqiuqiu\Desktop\GitProjects\PythonDemo\pytest
    plugins: Faker-8.11.0
    collected 1 item                                                                                                                                       
     
    test_example.py::test_count FaiLED                                                                                                               [100%]
     
    ====================================================================== FAILURES =======================================================================
    _____________________________________________________________________ test_count ______________________________________________________________________
     
        def test_count():
    >       assert count_num([1, 2, 3]) != 3
    E       assert 3 != 3
    E        +  where 3 = count_num([1, 2, 3])
     
    test_example.py:11: AssertionError
    =============================================================== short test summary info ===============================================================
    FAILED test_example.py::test_count - assert 3 != 3
    ================================================================== 1 failed in 0.16s ==================================================================

    备注:

    • .代表测试通过,F代表测试失败;

    • -v显示详细的测试信息, -h显示pytest命令详细的帮助信息;

    标记

    默认情况下,pytest会在当前目录下寻找以test_为开头(以_test结尾)的测试文件,并且执行文件内所有以test_为开头(以_test为结尾)的所有函数和方法;

    指定运行测试用例,可以通过::显示标记(文件名::类名::方法名)(文件名::函数名)

    pytest test_example3.py::test_odd

    指定一些测试用例测试运行,可以使用-k模糊匹配

    pytest -k example

    通过pytest.mark.skip()或者pytest.makr.skipif()条件表达式,跳过指定的测试用例

    import pytest test_flag = False @pytest.mark.skip()def test_odd():    num = random.randint(0, 100)    assert num % 2 == 1  @pytest.mark.skipif(test_flag is False, reason="test_flag is False")def test_even():    num = random.randint(0, 1000)    assert num % 2 == 0

    通过pytest.raises()捕获测试用例可能抛出的异常

    def test_zero():    num = 0    with pytest.raises(ZeroDivisionError) as e:        num = 1/0    exc_msg = e.value.args[0]    print(exc_msg)    assert num == 0

    预先知道测试用例会失败,但是不想跳过,需要显示提示信息,使用pytest.mark.xfail()

    @pytest.mark.xfail()def test_sum():    random_list = [random.randint(0, 100)  for x in range(10)]    num = sum(random_list)    assert num < 20

    对测试用例进行多组数据测试,每组参数都能够独立执行一次(可以避免测试用例内部执行单组数据测试不通过后停止测试)

    @pytest.mark.parametrize('num,num2', [(1,2),(3,4)])def test_many_odd(num: int, num2: int):    assert num % 2 == 1    assert num2 % 2 == 0

    固件(Fixture)

    固件就是一些预处理的函数,pytest会在执行测试函数前(或者执行后)加载运行这些固件,常见的应用场景就有数据库的连接和关闭(设备连接和关闭)

    简单使用

    import pytest @pytest.fixture()def postcode():    return "hello"def test_count(postcode):    assert postcode == "hello"

    按照官方的解释就是当运行测试函数,会首先检测运行函数的参数,搜索与参数同名的fixture,一旦pytest找到,就会运行这些固件,获取这些固件的返回值(如果有),并将这些返回值作为参数传递给测试函数;

    预处理和后处理

    接下来进一步验证关于官方的说法:

    import pytest @pytest.fixture()def connect_db():    print("Connect Database in .......")    yield    print("Close Database out .......") def read_database(key: str):    p_info = {        "name": "zhangsan",        "address": "China Guangzhou",        "age": 99    }    return p_info[key] def test_count(connect_db):    assert read_database("name") == "zhangsan"

    执行测试函数结果:

    ============================= test session starts =============================
    platform win32 -- Python 3.6.8, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 -- D:\Coding\Python3.6\python.exe
    cachedir: .pytest_cache
    rootdir: C:\Users\libuliduobuqiuqiu\Desktop\GitProjects\PythonDemo\pytest
    plugins: Faker-8.11.0
    collecting ... collected 1 item
     
    test_example.py::test_count Connect Database in .......
    PASSED                                       [100%]Close Database out .......
     
     
    ============================== 1 passed in 0.07s ==============================

    备注:

    • 首先从结果上看验证了官方的解释,pytest执行测试函数前会寻找同名的固件加载运行;

    • connect_db固件中有yield,这里pytest默认会判断yield关键词之前的代码属于预处理,会在测试前执行,yield之后的代码则是属于后处理,将在测试后执行;

    作用域

    从前面大致了解了固件的作用,抽离出一些重复的工作方便复用,同时pytest框架中为了更加精细化控制固件,会使用作用域来进行指定固件的使用范围,(比如在这一模块中的测试函数执行一次即可,不需要模块中的函数重复执行)更加具体的例子就是数据库的连接,这一连接的操作可能是耗时的,我只需要在这一模块的测试函数运行一次即可,不需要每次都运行。

    而定义固件是,一般通过scop参数来声明作用,常用的有:

    • function: 函数级,每个测试函数都会执行一次固件;

    • class: 类级别,每个测试类执行一次,所有方法都可以使用;

    • module: 模块级,每个模块执行一次,模块内函数和方法都可使用;

    • session: 会话级,一次测试只执行一次,所有被找到的函数和方法都可用。

    import pytest  @pytest.fixture(scope="function")def func_scope():    print("func_scope")  @pytest.fixture(scope="module")def mod_scope():    print("mod_scope") @pytest.fixture(scope="session")def sess_scope():    print("session_scope")  def test_scope(sess_scope, mod_scope, func_scope):    pass def test_scope2(sess_scope, mod_scope, func_scope):    pass

    执行结果:

    ============================= test session starts =============================
    platform win32 -- Python 3.6.8, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 -- D:\Coding\Python3.6\python.exe
    cachedir: .pytest_cache
    rootdir: C:\Users\libuliduobuqiuqiu\Desktop\GitProjects\PythonDemo\pytest
    plugins: Faker-8.11.0
    collecting ... collected 2 items
     
    test_example2.py::test_scope session_scope
    mod_scope
    func_scope
    PASSED                                      [ 50%]
    test_example2.py::test_scope2 func_scope
    PASSED                                     [100%]
     
    ============================== 2 passed in 0.07s ==============================

    从这里可以看出module,session作用域的固件只执行了一次,可以验证官方的使用介绍

    自动执行

    有人可能会说,这样子怎么那么麻烦,unittest框架中直接定义setUp就能自动执行预处理,同样的pytest框架也有类似的自动执行; pytest框架中固件一般通过参数autouse控制自动运行。

    import pytest @pytest.fixture(scope='session', autouse=True)def connect_db():   print("Connect Database in .......")   yield   print("Close Database out .......")  def test1():   print("test1")  def test2():   print("test")

    执行结果:

    ============================= test session starts =============================
    platform win32 -- Python 3.6.8, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 -- D:\Coding\Python3.6\python.exe
    cachedir: .pytest_cache
    rootdir: C:\Users\libuliduobuqiuqiu\Desktop\GitProjects\PythonDemo\pytest
    plugins: Faker-8.11.0
    collecting ... collected 2 items
     
    test_example.py::test1 Connect Database in .......
    PASSED                                            [ 50%]test1
     
    test_example.py::test2 PASSED                                            [100%]test
    Close Database out .......
     
     
    ============================== 2 passed in 0.07s ==============================

    从结果看到,测试函数运行前后自动执行了connect_db固件;

    参数化

    前面简单的提到过了@pytest.mark.parametrize通过参数化测试,而关于固件传入参数时则需要通过pytest框架中内置的固件request,并且通过request.param获取参数

    import pytest @pytest.fixture(params=[    ('redis', '6379'),    ('elasticsearch', '9200')])def param(request):    return request.param  @pytest.fixture(autouse=True)def db(param):    print('\nSucceed to connect %s:%s' % param)     yield     print('\nSucceed to close %s:%s' % param) def test_api():    assert 1 == 1

    执行结果:

    ============================= test session starts =============================
    platform win32 -- Python 3.6.8, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 -- D:\Coding\Python3.6\python.exe
    cachedir: .pytest_cache
    rootdir: C:\Users\libuliduobuqiuqiu\Desktop\GitProjects\PythonDemo\pytest
    plugins: Faker-8.11.0
    collecting ... collected 2 items
     
    test_example.py::test_api[param0] 
    Succeed to connect Redis:6379
    PASSED                                 [ 50%]
    Succeed to close redis:6379
     
    test_example.py::test_api[param1] 
    Succeed to connect elasticsearch:9200
    PASSED                                 [100%]
    Succeed to close elasticsearch:9200
     
     
    ============================== 2 passed in 0.07s ==============================

    这里模拟连接redis和elasticsearch,加载固件自动执行连接然后执行测试函数再断开连接。

    感谢各位的阅读,以上就是“Pytest自动化测试框架如何使用”的内容了,经过本文的学习后,相信大家对Pytest自动化测试框架如何使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: Pytest自动化测试框架如何使用

    本文链接: https://www.lsjlt.com/news/351795.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Pytest自动化测试框架如何使用
      这篇文章主要讲解了“Pytest自动化测试框架如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pytest自动化测试框架如何使用”吧!Pytest和Unittest测试框架的区别?如何...
      99+
      2023-07-05
    • Pytest自动化测试框架的使用
      目录Pytest和Unittest测试框架的区别?Pytest 安装Pytest 示例标记固件(Fixture)预处理和后处理作用域自动执行参数化总结Pytest和Unittest测...
      99+
      2023-03-19
      Pytest 自动化测试框架 Pytest 自动化
    • Appium+Python+pytest自动化测试框架的实战
      菜鸟一枚,写的不好勿喷,大家一起学习 先简单介绍一下目录,再贴一些代码,代码里有注释 Basic目录下写的是一些公共的方法,Data目录下写的是测试数据,image存的是测试失败...
      99+
      2024-04-02
    • Python测试框架pytest如何使用
      本文小编为大家详细介绍“Python测试框架pytest如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python测试框架pytest如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言pytes...
      99+
      2023-06-30
    • 自动化测试Pytest单元测试框架的基本介绍
      目录一、Pytest概念二、Pytest特点三、Pytest安装安装pytest命令:查看pytest版本:安装生成测试结果的HTML报告pytest-html四、Pycharm配置...
      99+
      2024-04-02
    • Pytest接口自动化测试框架搭建模板
      auto_api_test 开发环境: Pycharm 开发语言&版本: python3.7.8 测试框架: Pytest、测试报告: Allure 项目源码Git地址 项...
      99+
      2024-04-02
    • 自动化测试框架pytest的Fixture固件怎么调用
      本篇内容介绍了“自动化测试框架pytest的Fixture固件怎么调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是固件Fixture...
      99+
      2023-07-05
    • 第三代api自动化测试框架使用教程(pytest+allure+sql+yaml)
      使用教程 一、配置1、环境配置2、框架配置3、启动入口 二、用例编写1、用例模板2、参数依赖写法2、函数(方法插件)写法3、接口上传文件和表单参数4、接口上传json参数5、接口无数据填写...
      99+
      2023-09-07
      sql 自动化 python
    • pytest接口自动化测试框架搭建的全过程
      目录一. 背景二. 基础环境三. 项目结构四、框架解析4.1 接口数据文件处理4.2 封装测试工具类4.3 测试用例代码编写4.4 测试用例运行生成报告 ​​​​​​​总结一. 背景...
      99+
      2024-04-02
    • C#中如何使用单元测试框架进行自动化测试
      C#中如何使用单元测试框架进行自动化测试引言:在软件开发过程中,自动化测试是一个非常重要的环节。通过编写和运行测试代码,可以帮助我们验证和确保代码的正确性和稳定性。在C#开发中,我们可以使用单元测试框架来实现自动化测试。本文将介绍C#中常用...
      99+
      2023-10-22
      自动化测试 C# 单元测试
    • Python测试框架pytest怎么使用
      这篇文章主要介绍了Python测试框架pytest怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python测试框架pytest怎么使用文章都会有所收获,下面我们一起来看看吧。一、Pytest简介Pyt...
      99+
      2023-06-29
    • Pytest+Yaml+Excel 接口自动化测试框架的实现示例
      目录一、框架架构二、项目目录结构三、框架功能说明四、核心逻辑说明配置文件输出目录请求工具类代码编写case程序主入口执行记录一、框架架构 二、项目目录结构 三、框架功能说明 解决...
      99+
      2024-04-02
    • python自动化测试框架pytest和unittest的区别是什么
      这篇文章给大家介绍python自动化测试框架pytest和unittest的区别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、用例设计规则unittest(1)测试类必须继承unittest.TestCase...
      99+
      2023-06-02
    • 浅谈基于Pytest框架的自动化测试开发实践
      目录01 — Pytest核心功能02 — 创建测试项目03 — 编写测试用例04 — 执行测试用例05 — 数据与脚本分离06 — 参数化07 — 测试配置管理08 — 测试的准备...
      99+
      2024-04-02
    • Python自动化测试框架pytest的详解安装与运行
      目录1. pytest的介绍2. pytest的安装1. 使用以下命令进行安装2. 检查是否成功安装正确版本3. pytest识别测试的条件4. pytest的运行4.1 Pycha...
      99+
      2024-04-02
    • python使用pytest接口自动化测试的使用
      简单的设计思路 利用pytest对一个接口进行各种场景测试并且断言验证 配置文件独立开来(conf文件),实现不同环境下只需要改环境配置即可 测试的场景读...
      99+
      2024-04-02
    • Python 测试框架:自动化测试的革命
      随着软件开发的复杂度不断增加,自动化测试已成为确保应用程序质量和可靠性的关键步骤。Python 因其灵活性、可扩展性和广泛的库而成为自动化测试的首选语言之一。本文将深入探讨 Python 测试框架,了解它们如何彻底改变了自动化测试的格局。...
      99+
      2024-04-02
    • Python 测试框架:自动化测试的利器
      Unittest Unittest 是 Python 内置的单元测试框架。它提供了一组全面的断言方法,用于比较实际结果和预期结果。Unittest 还可以轻松分组和组织测试用例,并生成详细的测试报告。 Pytest Pytest 是一个功...
      99+
      2024-04-02
    • Python自动化测试框架之unittest使用详解
      目录1 unittest框架2 批量执行脚本2.1 构建测试套件2.2 用例的执行顺序2.3 忽略用例执行3 unittest断言4 HTML报告生成5 异常捕捉与错误截图6 数据驱...
      99+
      2023-05-18
      Python unittest Python 自动化测试框架 Python unittest框架
    • Pytest接口自动化测试框架搭建模板的示例分析
      小编给大家分享一下Pytest接口自动化测试框架搭建模板的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!auto_api_test开发环境: Pychar...
      99+
      2023-06-14
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作