Pytest单元测试框架——Pytest简介

发表于:2021-1-04 10:11

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:wuwei丶    来源:博客园

  一、简介
  pytestpython的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。
  二、安装
  安装方法:
  安装成功,查询安装的版本号
  pytest常用的插件
  pytest-selenium集成selenium
  pipinstallallure-pytest生成漂亮的allure测试报告
  pipinstallpytest-sugar优化运行效果
  pipinstallpytest-rerunfailures执行用例失败后重新运行
  pipinstallpytest-xdist多线程并行与分布式执行
  pipinstallpytest-assume多条断言前面报错后面依然执行
  pipinstallpytest-cover测试覆盖率
  三、demo
  新建test_one.py,输入以下代码,cmd至文件目录下,输入pytest运行
  运行pytest命令,或py.test命令,或python–mpytest命令。(pytest的三种运行方式)
  用例不通过与用例通过的结果展示,如下图所示。
  四、用例设计原则
  文件名以test_*.py文件*_test.py
  测试类以Test开头,并且不能带有init方法
  以test_开头的函数
  以Test开头的类
  以test_开头的方法
  所有的包pakege必须要有__init__.py文件
  五、断言
  pytest允许你使用标准Python断言来验证Python测试中的期望值。
  断言使用assert
  常用断言
  pytest里面断言实际上就是python里面的assert断言方法,常用的有以下几种:
  assertxx判断xx为真
  assertnotxx判断xx不为真
  assertainb判断b包含a
  asserta==b判断a等于b
  asserta!=b判断a不等于b
  六、装饰器
  pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者希望失败的测试功能。
  skipif意味着在不满足某些条件时才希望测试通过,否则pytest应该跳过运行测试。常见示例是在非Windows平台上跳过仅限Windows的测试,或跳过测试依赖于当前不可用的外部资源。
  跳过测试函数的最简单方法是使用跳过装饰器标记它,可以传递一个可选的原因。
  例:
  @pytest.mark.skip(reason=“本轮测试不执行此用例")
  deftest_the_unknown():
  xfail意味着你希望测试由于某种原因而失败。一个常见的例子是对功能的测试尚未实施,或尚未修复的错误。
  skip
  跳过测试函数的最简单方法是使用跳过装饰器标记它,可以传递一个可选的原因。
  例:
  @pytest.mark.skip(reason=“本轮测试不执行此用例")
  skipif
  如果你希望有条件地跳过某些内容,则可以使用skipif代替。
  例:
  importsys
  @pytest.mark.skipif(sys.version_info<(3,6),
  reason="requirespython3.6orhigher")
  自定义标记Mark
  pytest可以支持自定义标记,自定义标记可以把一个web项目划分多个模块,然后指定模块名称执行。
  @pytest.mark.webtest
  deftest_send_http():
  如果不想执行标记webtest的用例,那就用”notwebtest”
  deftest_the_unknown():
  七、Fixture
  unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次。
  setupClass和teardownClass,需配合@classmethod装饰器一起使用。
  用例运行级别
  模块级(setup_module/teardown_module)开始于模块始末,全局的
  函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
  类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
  方法级(setup_method/teardown_method)开始于方法始末(在类中)
  类里面的(setup/teardown)运行在调用方法的前后
  运行的优先级
  setup_class>setup_method>setup>用例>teardown>teardown_method>teardown_class
  函数和类混合
  如果一个.py的文件里面既有函数用例又有类和方法用例,运行顺序如下:
  setup_module/teardown_module的优先级是最大的。
  函数里面用到的setup_function/teardown_function和类里面的setup_class/teardown_class互不干涉
  Fixture优势
  命名方式灵活,不局限于setup和teardown这几个命名
  conftest.py配置里可以实现数据共享,不需要import就能自动找到一些配置
  scope=”module”可以实现多个.py跨文件共享前置
  scope=”session”以实现多个.py跨文件使用一个session来完成多个用例
  参数解析
  fixture(scope="function",params=None,autouse=False,ids=None,name=None):
  scope有四个级别参数:function,class、Module、session
  params:一个可选的参数列表,它将导致多个参数调用fixture功能和所有测试使用它。
  autouse:如果为True,则为所有测试激活fixturefunc可以看到它。如果为False(默认值)则显式需要参考来激活fixture
  每个字符串id的列表,每个字符串对应于params这样他们就是测试ID的一部分。如果没有提供ID它们将从params自动生成。
  name:fixture的名称。这默认为装饰函数的名称。
  conftest.py配置
  conftest.py配置脚本名称是固定的,不能改名称
  conftest.py和运行的用例要在同一个pakage下,并且有__init__.py文件
  不需要import导入conftest.py,pytest用例会自动查找
  yield执行teardown
  yield:提供fixture里面的teardown功能,用yield来唤醒teardown的执行
  yield遇到异常
  1.如果其中一个用例出现异常,不影响yield后面的teardown执行,运行结果互不影响,并且全部用例执行完成后,yield呼唤teardown操作。
  2.如果在setup就异常了,那么是不会去执行yield后面的teardown内容了。
  3.yield也可以配合with语句使用。
  Fixture参数化
  pytest.mark.parametrize装饰器可以实现测试用例参数化它也可以标记单个测试实例在参数化参数组合若要获得多个参数化参数的所有组合,可以堆叠参数化装饰器

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号