首页 > 技术文章 > python-pytest

bonus_scene 2020-09-07 23:23 原文

 

 


 

pytest

一、介绍

  pytest是基于python的测试框架。特色:

  1. 按照约定自动收集用例
  2. 作用于测试对象的多种标记功能
  3. 自定义fixture
  4. 多种执行方式
  5. 可视化测试报告
  6. 控制台打印执行记录

  两个文件,conftest.py 和 pytest.ini

  1. conftest.py文件,conftest.py中定义的fixture,不用导入测试模块,可以直接在测试模块中以str或函数方法参数使用 
  2. pytest.ini文件,pytest执行方案配置。常用:addopts,markers,python_function等。

二、自动收集用例

1.依据

  1. 目录:默认为执行命令所在目录,可指定
  2. 关键字:默认为全部,可指定
  3. mark:默认为全部,可指定

2.命名约定

  测试模块名test_*.py,测试类名class Test*,测试函数名def test_*(),测试方法名def test_*(self)

3.自定义规则

  1. 指定目录:pytest /dir
  2. 指定文件:pytest /dir/test_case.py
  3. 指定类:pytest /dir/test_case.py::TestCase
  4. 指定方法:pytest /dir/test_case.py::TestCase::test_case
  5. 指定函数:pytest /dir/test_case.py::test_case
  6. 指定关键字:pytest -k "<express>"
  7. 指定mark:pytest -m "<express>"

二、mark

1.mark.usefixture

  为测试对象指定一个fixture,这是调用自定义fixture的一种方式。

  scope参数限定作用对象的等级。默认为函数方法级。可指定

2.mark.parametrize

  为测试函数方法对象执行parametrize可以实现参数化

  第一个参数为字符串,定义测试用例中引用参数的名称;

  第二个参数为列表嵌套元组,元组内的数据顺序和第一个参数顺序同步;

  ids参数为列表,定义用例名称,顺序和第二个参数元组的顺序同步。

3.其它

  xfail,skip,自定义mark

三、自定义fixture功能

1.前置处理和后置处理的fixture实现

  在def中包含yield实现。yield前的语句为前置处理操作,yield后的语句为后置处理操作。分别在作用对象执行前后执行。

2.fixture配置

  scope参数:定义fixture作用对象的等级,默认为函数方法级。可指定等级有:session,module,class,function

  autoure参数:定义fixture是否自动装配给测试对象。

3.带参数的fixture实现参数化

  fixture装饰的函数可以定义参数,通过这个参数接收数据,经过fixture功能处理后,返回需要的测试数据对象。参数来源有两种途径:

  1. fixture的param参数传参。
  2. 作用对象的parametrise中传参。

4.fixture的调用

  自定义的fixture功能需要装配到测试对象上。通常有三种方式。

  1. 定义fixture时,指定autoure参数,自动配置给所有测试对象;
  2. 测试对象用mark.usefixture指定装配fixture功能;
  3. 测试对象函数方法定义时,将需要装配的fixture定义到函数方法的参数中。会自动执行。(如果装配的fixture有参数,则还需要传入数据)

四、多种执行方式

  如何执行?给pytest配置执行方案。①pytest.ini中配置执行pytest命令默认带的配置参数数据;②pytest.main([**args]),使用main方法指定参数数据;③命令行直接指定参数数据;④os.system("command"),使用system方法执行命令行命令。

  常用的几种执行方案

  1. 执行全部:pytest
  2. 执行smoke test:pytest -m "smoke"
  3. 执行单个模块:pytest.main()
  4. 控制台打印配置:-s,-q,-v
  5. 测试结果配置:--alluredir ./result(需要安装allure,并执行allure generate ./result -o ./result.report --clean命令生成index.html报告文件)

  执行过程中控制台会打印执行记录以及是否通过的结果

  执行过程中没有抛出except,则视为pass。否则为fail并打印except的记录,如assert失败抛出异常,如数据驱动未找到数据文件(尽量避免脚本bug导致执行fail)

推荐阅读