• 从小白到测试专家:掌握Pytest的实用技巧和优秀实践


      pytest是一个功能丰富且易于使用的Python测试框架,它建立在Python标准库的unittest模块之上,提供了更简洁、灵活和可读性强的测试代码编写方式。下面,我将按照步骤引导您学习pytest。

      步骤1:安装pytest

      首先,您需要安装pytest。您可以使用pip包管理器来安装它。打开终端(或命令提示符)并执行以下命令:

      pip install pytest

      步骤2:编写测试函数

      在学习如何编写测试之前,让我们先了解一下pytest测试的基本结构。

      在pytest中,测试函数以test_开头,例如test_addition()。这些函数是用来测试代码的不同部分,每个测试函数应该只关注一个特定的功能或行为。

      让我们创建一个简单的示例来说明。在您的项目目录下,创建一个名为test_calculator.py的文件,并在其中编写以下代码:

      def add(a, b):

          return a + b

      def test_addition():

          result = add(3, 5)

          assert result == 8

      在上面的示例中,我们定义了一个add()函数来执行加法运算,并编写了一个test_addition()函数来测试这个加法函数。在测试函数中,我们调用add(3, 5)并使用assert语句来验证结果是否等于8。

      步骤3:运行测试

      现在,我们已经编写了一个简单的测试函数,让我们运行它并查看结果。在终端中,导航到项目目录,并执行以下命令:

      pytest

      pytest将会自动查找项目中以test_开头的测试函数,并执行它们。您应该会看到一个类似于以下内容的输出:

      ============================= test session starts ==============================

      platform linux -- Python 3.x.y, pytest-x.y.z, py-x.y.z, pluggy-x.y.z

      rootdir: /path/to/your/project

      collected 1 item                                                               

      test_calculator.py .                                                      [100%]

      ============================== 1 passed in 0.01s ===============================

      从上面的输出中,我们可以看到测试会话开始并显示了平台信息,然后显示了一个进度条,最后显示了测试结果。在这种情况下,一个测试通过,没有任何错误或失败。

      步骤4:使用更多的断言

      在步骤2中的示例中,我们只使用了一个简单的assert语句来断言测试结果。然而,pytest提供了许多其他有用的断言函数,让我们可以编写更复杂的断言逻辑。

      例如,我们可以使用assert语句来检查值是否相等、不相等、大于、小于等等。此外,pytest还提供了许多其他的断言函数,如assert_raises()用于检查异常,assert_in()用于检查元素是否在集合中等等。

      以下是一些常用的断言函数示例:

      def test_assertions():

          assert 5 == 5  # 检查相等

          assert 10 != 5  # 检查不相等

          assert 3 < 10  # 检查小于

          assert 20 > 10  # 检查大于

          assert 5 <= 5  # 检查小于等于

          assert 10 >= 5  # 检查大于等于

          assert_raises(ValueError, int, 'string')  # 检查是否引发特定异常

          assert 'hello' in 'hello world'  # 检查子字符串是否在字符串中

          assert_in(3, [1, 2, 3, 4, 5])  # 检查元素是否在列表中

      步骤5:测试夹具(Fixtures)

      测试夹具是pytest中非常强大且常用的概念。它们提供了一种方便的方式来准备测试环境、共享测试数据和执行重复的操作。

      在pytest中,使用@pytest.fixture装饰器来定义测试夹具。然后,在测试函数中通过参数来使用这些夹具。

      以下是一个简单的夹具示例:

      import pytest

      @pytest.fixture

      def setup():

          # 在测试之前的准备工作

          data = [1, 2, 3, 4, 5]

          return data

      def test_fixture_example(setup):

          # 使用setup夹具

          assert len(setup) == 5

          assert 3 in setup

      在上面的示例中,我们定义了一个名为setup的夹具。该夹具返回一个包含5个元素的列表。然后,我们在test_fixture_example()测试函数中使用了这个夹具,并编写了一些断言来验证夹具的功能。

      步骤6:使用参数化测试

      参数化测试是pytest的另一个强大功能。它允许您以一种简洁的方式运行多个测试用例,只需在测试函数上应用一个装饰器。

      使用@pytest.mark.parametrize装饰器,您可以为测试函数提供一个或多个参数组合,并定义每个参数的值。

      以下是一个参数化测试的示例:

      import pytest

      def add(a, b):

          return a + b

      @pytest.mark.parametrize('a, b, expected', [

          (2, 3, 5),

          (4, 5, 9),

          (-1, 1, 0),

      ])

      def test_addition(a, b, expected):

          result = add(a, b)

          assert result == expected

      在上面的示例中,我们使用@pytest.mark.parametrize装饰器为test_addition()测试函数提供了三个参数组合。每个参数组合都包含两个输入参数a和b,以及预期结果expected。pytest将自动为每个参数组合运行测试,并使用断言验证结果。

      步骤7:其他pytest功能

      除了上述步骤中提到的功能外,pytest还提供了许多其他强大的功能和插件,以帮助您更好地编写和组织测试代码。

      ·标记(Markers):您可以使用标记来选择性地运行测试集合,例如只运行特定的标记测试。

      · 测试跳过和跳过失败:您可以使用@pytest.mark.skip装饰器来跳过某些测试,以及使用@pytest.mark.xfail装饰器来标记预期失败的测试。

      · 测试覆盖率:pytest可以与覆盖率工具集成,以帮助您评估代码的测试覆盖率。

      · 测试重试:有时测试可能会因为外部因素而失败,例如网络故障。pytest可以通过使用@pytest.mark.flaky装饰器来自动重试测试,以提高稳定性。

    这只是pytest的一小部分功能,它还有许多其他功能可以探索和学习。通过阅读pytest的官方文档和参考资料,您可以进一步了解这些功能并在实际项目中应用它们。

    感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

    这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

  • 相关阅读:
    2022跨境电商新战场:海外社交电商发展前景分析
    Docker的优势和应用场景
    JDBC详解
    Web自动化测试-Selenium语法入门到精通
    领导:谁再用redis过期监听实现关闭订单,立马滚蛋!
    ICCV 2023|Occ2Net,一种基于3D 占据估计的有效且稳健的带有遮挡区域的图像匹配方法...
    (标签-zabbix|关键词-ping ip)
    测试人生 | (汇总篇)从小团队的业务到独角兽的测开,涨薪超过60%,90后小哥哥凤凰涅槃了
    【4】c++设计模式——>UML表示类之间的聚合关系
    联想笔记本win10无法启动vmware虚拟机
  • 原文地址:https://blog.csdn.net/OKCRoss/article/details/134332274