一 、基础使用

1、安装

pip install pytest

2、查看版本和获取帮助

 

3、指定允许失败的用例数

  • -x:遇到第一个失败退出执行

  •  --maxfail=num:遇到设定的失败数时退出执行

 

4、执行指定的测试用例

(1)用例命名

  • test_*.py   或者   *_test.py   的文件;
  • 以   test_   开头的函数名;
  • 以 Test  开头的测试类(没有   _init_  函数)当中,以  test_  开头的函数。

(2)执行顺序

  • 文件名称 按 ASCII 码排序;
  • 文件内部按代码先后顺序排序

(3)用例执行

  • pytest:默认执行当前目录下满足命名规则的用例;
  • pytest test_*.py:执行指定的用例
  • pytest path/:执行  指定目录下所有
  • pytest -k EXPRESSION:执行匹配的用例

  

  • pytest为每一个收集到的测试用例指定一个唯一的nodeid。其由模块名加说明符构成,中间以::间隔。

    其中,说明符可以是类名、函数名以及由parametrize标记赋予的参数

    • 指定函数名 

    

  • 指定类名+函数名

    

  • 指定parametrize标记赋予的参数执行,单个或多个参数的赋值形式类比,且指定能为[1-1]形式

    

  •  执行指定标记的用例

  

(4)常用插件

  • 用例依赖:pytest-dependency

  

  • 多重检验:pytest-assume

   

  • 执行顺序:pytest-ordering

  

  • 失败重跑:pytest-rerunfailures

  

  • 重复执行
    • 对整个文件的测试用例重复执行:pytest -v  test_case.py  --count=5

    • 直接标记某个用例执行多少次:@pytest.mark.repeat(2)

  • 标记

   

 

  • pytest-random:让测试用例的测试顺序随机;
  • pytest-xdist:支持分布式测试
  • pytest-instafail:测试出错立即返回,不用等全部测试完成。

 

(4)前置/后置操作

  • 方法级别:setup_method/teardown_method,开始于方法始末(在类中);
  • 类级别:setup_class/teardown_class,只在类中前后运行一次(在类中);
  • 模块级别:setup_module/teardown_module,开始于模块始末,全局的在类中不起作用;
  • 函数级别:setup_function/teardown_funciton,只对函数用例生效(在类中不生效)

 5、pytest回溯信息的输出一共有六种模式:auto/long/short/line/native/no,用--tb选项指定:

pytest -l, --showlocals         # 打印本地变量
pytest --tb=auto                # 默认模式
pytest --tb=long                # 尽可能详细的输出
pytest --tb=short               # 更简短的输出
pytest --tb=line                # 每个失败信息总结在一行中
pytest --tb=native              # python的标准输出
pytest --tb=no                  # 不打印失败信息

--full-trace是一种比--tb=long更详细的输出模式。它甚至能观察到用户打断执行(Ctrl+C)时的回溯信息,而上述六种模式默认是不输出此类信息的。

 

6、报告

-r选项可以在执行结束后,打印一个简短的总结报告。

 

所有有效的字符参数:

  • f:失败的
  • E:出错的
  • s:跳过执行的
  • x:跳过执行,并标记为xfailed的
  • X:跳过执行,并标记为xpassed的
  • p:测试通过的
  • P:测试通过,并且有输出信息的;即用例中有print
  • a:除了测试通过的,其他所有的;即除了pP
  • A:所有的

7、失败是加载PDB(Python Debugger)

PDBpython内建的诊断器,pytest允许通过以下命令在执行失败时进入这个诊断器模式:失败的信息存储在sys.last_value, sys.last_type, sys.last_traceback变量中,可以在交互环境中访问它们;使用exit命令,退出PDB环境;

 

 8、开始执行时加载PDB环境

 

9、设置断点

在测试用例代码中添加import pdb;pdb.set_trace(),当其被调用时,pytest会停止这条用例的输出:

  • 其他用例不受影响;
  • 通过continue命令,退出PDB环境,并继续执行用例;

 

 

10、内置breakpoint()函数。pytest可以在以下场景中支持使用:

  • breakpoint()被调用,并且PYTHONBREAKPOINTNone时,pytest会使用内部自定义的PDB代替系统的;
  • 测试执行结束时,自动切回系统自带的PDB
  • 当加上--pdb选项时,breakpoint()和测试发生错误时,都会调用内部自定义的PDB
  • --pdbcls选项允许指定一个用户自定义的PDB类;

11、分析用例执行时间

  • 查看执行最慢的10个用例

 

  •  默认情况下,pytest不会显示执行时间<0.01s的测试用例,可以使用-vv选项查看;

 

12、错误句柄

在测试执行中发生段错误或者超时的情况下,faulthandler标准模块可以转储python的回溯信息;它在pytest的执行中默认使能,使用-p no:faulthandler选项可以关闭它;同样,faulthandler_timeout=X配置项,可用于当测试用例的完成时间超过X秒时,转储所有线程的python回溯信息:

  • 默认使能

  • 去使能

 

13、创建测试报告

(1)创建JunitXML格式

 

 

 在pytest.ini设置junit_suit_name自定义testsuite根节点的name信息 

 

JUnit XML规定time属性应该表明测试用例执行的全部耗时,包含setupteardown中的操作,这也是pytest的默认行为;如果只想记录测试用例执行的时间,只需要做如下配置:

 

14、在报告中为用例附加子节点信息

(1)使用record_property fixture:

 

 

 (2)解析一个 自定义的@pytest.mark.test_id():修改pytest_collection_modifyitems钩子方法,添加对test_id标记的支持:

 

 

 

 

15、创建测试报告 的URL链接

只实现了在http://bpaste.net上的展示功能;

 

 

 

 

 16、尽早加载插件

可以在命令行中使用-p选项,来尽早的加载某一个插件:

pytest -p mypluginmodule

-p选项接收一个name参数,这个参数可以为:

  • 一个完整的本地插件引入,例如:myproject.plugins,其必须是可以import的。
  • 一个公共插件的名称,这是其注册时在setuptools中赋予的名字,例如:尽早的加载pytest-cov插件:
    bash pytest -p pytest_cov

17、去使能插件

可以在命令行中使用-p结合no:,来去使能一个插件的加载,例如:pytest -p no:doctest

 

18、python命令执行pytest

 

 











 

posted @ 2020-03-21 20:34  晨尛  阅读(281)  评论(0)    收藏  举报