Pytest

1.pytest简介

pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:

  • 1、简单灵活,容易上手,文档丰富;
  • 2、支持参数化,可以细粒度地控制要测试的测试用例;
  • 3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
  • 4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;
  • 5、测试用例的skip和xfail处理;
  • 6、可以很好的和CI工具结合,例如jenkins

2.安装

  • pip install pytest

3.编写规则

  • 测试文件以test_开头(以_test结尾也可以)
  • 测试类以Test开头,并且不能带有 init 方法
  • 测试函数以test_开头
  • 断言使用基本的assert即可

4.Console参数介绍

  • -v 用于显示每个测试函数的执行结果
  • -q 只显示整体测试结果
  • -s 用于显示测试函数中print()函数输出
  • -x, --exitfirst, exit instantly on first error or failed test
  • -h 帮助

5.Pytest标记

5.1Pytest查找测试策略

  • 默认情况下,pytest会递归查找当前目录下所有以test开始或结尾的python脚本
  • 并执行文件内的所有以test开始或结束的函数和方法

5.2标记测试函数

  • 由于某种原因(如test_func2的功能尚未开发完成),我们只想执行指定的测试函数。在pytest中有集中方式可解决
  • 第一种,显示指定函数名,通过 :: 标记   test_no_mark.py::test_func1
  • 第二种,使用模糊匹配,使用-k选项标识  pytest -k func1_no_mark.py
  • 第三种,使用pytest.mark在函数上进行标记

5.3给用例打标签 

  • 【pytest】
  • marketrs=
  • do:do
  • undo:undo

6.Pytest参数化处理

在pytest中,也可以使用参数化测试,即每组参数都独立执行一次测试,使用的工具:pytest.mark.paramterize(argnames,argvalues)

6.1数据格式

  • 列表
  • 元组
  • 字典

6.2增加可读性

  • 参数化装饰器有一个额外ide参数ids,可以标识每一个测试用例,自定义测试数据结果的显示,为了增加可读性
  • 可以标记每一个测试用例使用的测试数据是什么,适当的增加一些说明

6.3自定义id做标识

  • 除了使用ids参数增加输出可读性外,还可以在参数列表的参数旁边定义一个id值来做标识
  • 跟普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture()

6.4 Pytest fixture

  • 跟普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture()
  • fixture命名不要以test开头,跟用例区分开。fixture是有返回值的,没有返回值默认为None
  • 用例调用fixtue的返回值,直接就是吧fixture的函数名称当作变量名称

6.4.1fixture的scope参数

  • fixture命名不要以test开头,跟用例区分开。fixture是有返回值的,没有返回值默认为None
  • 用例调用fixtue的返回值,直接就是吧fixture的函数名称当作变量名称
  • function:每个test都运行,默认是function的scope
  • class:每个class的所有test只运行一次
  • module:每个module的所有test只运行一次
  • session:每个session只运行一次

6.4.2 setup和teardown操作

  • setup,在测试函数或类之前执行,完成准备工作,例如数据库链接、测试数据、打开文件等
  • teardown,在测试函数或类之后执行,完成收尾工作,例如断开数据库链接、回收内存资源等
  • 模块级(setup_module/teardown_moudle)开始于模块始末,全局的
  • 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
  • 类级(setup_class/teardown_class)只在类中前后云型一次(在类中)
  • 方法级(setup_method/teardown_method)开始于方法始末(在类中)
  • 类里面的(setup/teardown)运行在调用方法的前后
  • 备注:也可以通过在fixture函数中通过yield实现setup和teardown功能
上一篇:TsuNAME 是什么?DDoS 攻击向量威胁权威 DNS 服务器


下一篇:pytest.ini配置文件中文报错解决方法