Pytest为什么会成为目前最火的测试框架?

发布时间:2023年12月24日

Pytest为什么现在被更多的测试工程师所依赖广泛使用,我们从以下几个方面一一解析:

1.pytest身为一个第三方库集成了很多功能安装起来十分简单

使用pip install pytest 或者在pychram中搜索安装也是可以的

2.安装好pytest之后,在使用之前我们首先要了解这个库的使用规则,既然我们使用了pytest,那么它是如何在你的框架目录中发现你写的测试用例呢?

  • 你的测试文件是要以test_开头命名或者_test命令结尾都可以
  • 你的测试类的类名也是要以Test_开头类里面不要有init方法
  • 你的测试用例的命名也是要以test_开头

这样的话pytest这个框架会自动在你的这些命名中去搜寻你写的测试用例去执行

关于断言:在unittest中我们的断言基本是self.assertEqual(预期结果,实际结果)这样去进行断言的,而在pytest中只需要使用assert即可

写好用例之后,如何去运行用例?pytest提供了很多参数供我们去定制化的执行我们的用例

  • 直接pytest 意思是只要符合用例的命名规则那么我全都执行
  • 使用pytest -v 可以打印出详细的运行日志
  • 使用pytest -s 可以打印出你在代码中的print的输出
  • 使用pytest -k ”类名“ 除了这个类下面的用例其他都执行
  • 使用pytest -k ”函数名“ 除了这个函数名下面的用例其他都执行
  • 使用pytest -x 只要用例执行失败脚本立即停止后面的用例不再运行
  • 使用pytest --maxfail = [数量] 当用例执行失败的个数到达你设定的数量脚本停止不再运行
  • 使用pytest -m 运行所有@pytest.mark.[标记名] 标记的用例其他的用例不运行

怎么样?有了这些参数你是不是可以定制化去执行你的用例,对用例的管理及使用场景是十分方便的

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

3.不管是测试平台或者是unittest框架基本上都是支持前置条件,后置条件,但对于pytest而言,对于这种前置条件,后置条件是更加的灵活。因为更细化了,大致可分为以下几类:

  1. setup_module/teardown_module 在模块中使用,在模块的始末进行调用
  2. setup_class/teardown_class 在类里面使用,在类的始末进行调用
  3. setup_function/teardown_function 在函数里面使用,在函数的始末进行调用
  4. setup/teardown 在方法里面使用,在方法的始末进行调用

举例

首先在你的文件目录中创建conftest文件
import pytest
@pytest.fixture(scope='session',autouse=True)
def session():
    print("作用在session之前执行")
    yield
    print("作用在session之后执行")
@pytest.fixture(scope='module',autouse=True)
def module():
    print("作用在module之前执行")
    yield
    print("作用在module之后执行")
@pytest.fixture(scope='class',autouse=True)
def classdemmo():
    print("作用在class之前执行")
    yield
    print("作用在class之后执行")
@pytest.fixture(scope='function',autouse=True)
def func():
    print("作用在func之前执行")
    yield
    print("作用在func之后执行")

4. fixture(脚手架的使用)如果一个测试用例中你有一个参数是需要复杂的计算过程才能得到,那么fixture就很好的可以使用

import pytest
@pytest.fixture()
def bea():
    return "123"


def test_aa(bea): @Eleven11 
    assert bea == "123"


if __name__ == '__main__':
    pytest.main(['test_one.py'])

看到没有~在测试用例中如果想用一个参数用pytest中的fixture是不是很方便?

5.unittest框架中是使用ddt进行数据驱动的那么在pytest中是怎么进行用例驱动呢?那不得不用到pytest.mark.parametrize

拿账号密码登录举例

import pytest
@pytest.mark.parametrize('username,password',[('admin',123),('',123),('admin',"")])
def test_login(username,password):
    print("我的账号是%s我的密码是%s"%(username,password))
if __name__ == '__main__':
    pytest.main(['test_mydat.py'])

执行结果:

platform win32 -- Python 3.8.8, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: C:\Users\连志勇\PycharmProjects\pytestdemo\testdata
plugins: Faker-8.2.1
collected 3 items

test_mydat.py ...                                                        [100%]

============================== 3 passed in 0.14s ==============================

执行了三条用例是不是很叼?

6.fixture与parametrize联合起来如何使用?

废话不多说直接上代码

import pytest


@pytest.fixture
def my_order():
    return 10


@pytest.mark.parametrize('order', [10, 11, 12, 13, ])
def test_login(my_order, order):
    assert my_order > order


if __name__ == '__main__':
    pytest.main(['test_mydat.py'])

执行结果:

=========================== short test summary info ===========================
FAILED test_mydat.py::test_login[10] - assert 10 > 10
FAILED test_mydat.py::test_login[11] - assert 10 > 11
FAILED test_mydat.py::test_login[12] - assert 10 > 12
FAILED test_mydat.py::test_login[13] - assert 10 > 13
============================== 4 failed in 0.20s ==============================

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!?

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

?

文章来源:https://blog.csdn.net/m0_58026506/article/details/135173483
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。