当前位置:   article > 正文

Python测试框架pytest的基本用法_python pytest命令

python pytest命令

什么是pytest

pytest是一个用于编写和运行Python测试的工具,它可以帮助你编写更好的程序。pytest有以下特点:

  • 对失败的断言提供详细的信息,无需记住self.assert*的名称
  • 自动发现test_.py或_test.py的测试文件和函数
  • 提供模块化的fixture,用于管理小型或参数化的长期测试资源
  • 可以运行unittest(包括trial)和nose测试套件
  • 支持Python 3.7+或PyPy3
  • 丰富的插件架构,有800+的外部插件和活跃的社区

如何安装和使用pytest

要安装pytest,你可以在命令行中运行以下命令:

pip install -U pytest

要检查你安装的版本,你可以运行:

pytest --version

要编写你的第一个测试,你可以创建一个名为test_sample.py的文件,包含一个函数和一个测试:

  1. # content of test_sample.py
  2. def func(x):
  3. return x + 1
  4. def test_answer():
  5. assert func(3) == 5

要执行它,你可以运行:

pytest

你可以使用assert语句来验证测试的期望。pytest的高级断言内省会智能地报告断言表达式的中间值,这样你就可以避免使用JUnit遗留方法的多个名称。

pytest的命名规范

pytest遵循一些简单的命名规范,以便自动发现和执行测试。以下是一些常见的规则:

  • 测试文件的名称应该以test_开头或以_test结尾。
  • 测试类的名称应该以Test开头,并且不能包含__init__方法。
  • 测试函数的名称应该以test_开头。
  • 测试方法的名称应该以test_开头,并且应该在测试类中定义。
  • 测试模块的名称应该以test_开头。

pytest的setup和teardown

pytest提供了一些方法来设置和清理测试的环境,例如打开和关闭数据库连接,创建和删除临时文件等。这些方法称为fixture,可以在测试函数或测试类中使用@pytest.fixture装饰器来定义。

fixture有以下特点:

  • 可以使用return语句返回一个值,该值将作为测试函数的参数传递。
  • 可以使用yield语句返回一个值,该值将作为测试函数的参数传递,同时在测试函数执行后执行yield之后的代码。
  • 可以使用scope参数指定fixture的作用范围,例如module,class,function等。
  • 可以使用autouse参数指定fixture是否自动应用于测试,而不需要作为参数传递。
  • 可以使用params参数指定fixture的参数化,即为每个参数值运行一次测试。

以下是一个使用fixture的例子:

  1. # content of conftest.py
  2. import pytest
  3. import smtplib
  4. @pytest.fixture(scope="module")
  5. def smtp_connection():
  6. return smtplib.SMTP("smtp.gmail.com", 587, timeout=5)
  7. # content of test_module.py
  8. def test_ehlo(smtp_connection):
  9. response, msg = smtp_connection.ehlo()
  10. assert response == 250
  11. assert b"smtp.gmail.com" in msg
  12. assert 0 # for demo purposes

pytest的fixture

fixture是pytest的一个强大特性,它可以让你定义一些函数,这些函数可以作为测试函数的参数,提供一些共享的对象或值,例如数据库连接,配置选项,临时文件等。fixture还可以用来设置和清理测试的环境,例如打开和关闭数据库连接,创建和删除临时文件等。fixture可以在不同的层级和范围内使用,例如模块级,类级,函数级等。fixture还可以参数化,即为每个参数值运行一次测试。fixture还可以依赖于其他的fixture,形成一个fixture的图。

以下是一个使用fixture的例子:

  1. # content of test_db_transact.py
  2. import pytest
  3. @pytest.fixture(scope="module")
  4. def db():
  5. # setup code
  6. db = DB()
  7. db.connect()
  8. yield db
  9. # teardown code
  10. db.close()
  11. @pytest.fixture
  12. def cursor(db):
  13. # setup code
  14. cursor = db.cursor()
  15. yield cursor
  16. # teardown code
  17. cursor.close()
  18. def test_foo(cursor):
  19. # use cursor to test foo
  20. assert foo(cursor) == 42

这个例子中,定义了两个fixture,db和cursor。db的作用范围是模块级,即在整个模块中只执行一次。cursor的作用范围是函数级,即在每个测试函数中执行一次。cursor依赖于db,即在执行cursor之前,会先执行db。test_foo函数使用cursor作为参数,即在执行test_foo之前,会先执行cursor,从而也会执行db。这样,就可以在测试函数中使用db和cursor对象,而不需要关心它们的创建和销毁。

总结

pytest是一个非常强大和灵活的Python测试框架,它可以让你编写更简洁和可读的测试代码,同时提供了丰富的功能和插件,让你的测试过程更高效和有趣。本文介绍了pytest的基本用法,包括安装和使用,命名规范,setup和teardown,fixture等。希望对你有所帮助。如果你想了解更多关于pytest的使用和定制的信息,你可以参考官方文档。

PythonTestingToolsTaxonomy - Python Wiki

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/739908
推荐阅读
相关标签
  

闽ICP备14008679号