一、Pytest 框架入门

(使用规范、命令选项、测试来源、环境变量)

1.   使用规范:

文件名以test_*.py文件和*_test.py

以test_开头的函数

以Test开头的类

以test_开头的方法

所有的包pakege必须要有__init__.py文件


2.   执行用例规则:

1.执行某个目录下所有的用例

pytest 目录名/

2.执行某一个py文件下用例

pytest 脚本名称.py

3.-k 按关键字匹配

pytest -k "MyClass and not method"

4.按节点运行

每个收集的测试都分配了一个唯一的nodeid,它由模块文件名和后跟说明符组成来自参数化的类名,函数名和参数,由:: characters分隔。

运行.py模块里面的某个函数

pytest test_mod.py::test_func

运行.py模块里面,测试类里面的某个方法

pytest test_mod.py::TestClass::test_method

5.标记表达式

pytest -m slow

将运行用@pytest.mark.slow装饰器修饰的所有测试。后面章节会讲自定义标记mark的功能

-x 遇到错误时停止测试

pytest -x test_class.py

--maxfail=num

当用例错误个数达到指定数量时,停止测试

pytest --maxfail=3


3.在python代码中使用pytest执行测试

1.    直接调用

Pytest.main()

2.    传参调用

Pytest.main("-s", "mytest.py")


4.常用的命令行选项详解

1. --collect-only选项

使用--collect-only选项可以展示在给定的配置下哪些测试用例会被运行。此选项可以让你在执行测试前,非常方便地查看选中的用例是否符合预期。

(venv) D:\PyLib\CodemaoApiTest>pytest --collect-only

============================================================================================= test session starts ==============================================================================================

platform win32 -- Python 3.6.5rc1, pytest-5.0.1, py-1.8.0, pluggy-0.12.0

rootdir: D:\PyLib\CodemaoApiTest

plugins: allure-pytest-2.7.1, forked-1.0.2, html-1.21.1, metadata-1.8.0, xdist-1.29.0

collected 12 items                                                                                                                                                                                             

 

   

   

 

   

   

 

   

   

   

   

 

   

 

   

 

   

   

========================================================================================= no tests ran in 0.27 seconds ========================================================================================


2.-k选项

-k选项允许你使用表达式指定希望运行的用例。如果某测试名是唯一的,或者多个测试名的前缀或后缀相同,那么可以使用表达式来快速定位。假设希望选中有关publish和comment的用例,那么

(venv) D:\PyLib\CodemaoApiTest>pytest -k "comment or publish" --collect-only

============================================================================================= test session starts ==============================================================================================

platform win32 -- Python 3.6.5rc1, pytest-5.0.1, py-1.8.0, pluggy-0.12.0

rootdir: D:\PyLib\CodemaoApiTest

plugins: allure-pytest-2.7.1, forked-1.0.2, html-1.21.1, metadata-1.8.0, xdist-1.29.0

collected 12 items / 3 deselected / 9 selected                                                                                                                                                                 

 

   

   

 

   

   

   

   

 

   

 

   

   

========================================================================================= 3 deselected in 0.12 seconds =========================================================================================


(venv) D:\PyLib\CodemaoApiTest>pytest -k "one and not ban" --collect-only

============================================================================================= test session starts ==============================================================================================

platform win32 -- Python 3.6.5rc1, pytest-5.0.1, py-1.8.0, pluggy-0.12.0

rootdir: D:\PyLib\CodemaoApiTest

plugins: allure-pytest-2.7.1, forked-1.0.2, html-1.21.1, metadata-1.8.0, xdist-1.29.0

collected 12 items / 9 deselected / 3 selected                                                                                                                                                                 

 

   

 

   

 

   

========================================================================================= 9 deselected in 0.12 seconds =========================================================================================



3.-m选项

标记(marker)用于标记测试并分组,以便快速选中并运行。

(venv) D:\PyLib\CodemaoApiTest>pytest -m smoke

============================================================================================= test session starts ==============================================================================================

platform win32 -- Python 3.6.5rc1, pytest-5.0.1, py-1.8.0, pluggy-0.12.0

rootdir: D:\PyLib\CodemaoApiTest, inifile: pytest.ini

plugins: allure-pytest-2.7.1, forked-1.0.2, html-1.21.1, metadata-1.8.0, xdist-1.29.0

collected 12 items / 11 deselected / 1 selected                                                                                                                                                               

tests\test_recover_comment.py .                                                                                                                                                                          [100%]

=================================================================================== 1 passed, 11 deselected in 13.47 seconds ==================================================================================


4.-x选项

首次失败后停止执行

5.-v(--verbose)选项

(venv) D:\PyLib\NemoDataFactory\tests>pytest -v test_add.py

============================================================================================= test session starts ==============================================================================================

platform win32 -- Python 3.6.5rc1, pytest-5.0.1, py-1.8.0, pluggy-0.12.0 -- d:\pylib\nemodatafactory\venv\scripts\python.exe

cachedir: .pytest_cache

metadata: {'Python': '3.6.5rc1', 'Platform': 'Windows-10-10.0.17763-SP0', 'Packages': {'pytest': '5.0.1', 'py': '1.8.0', 'pluggy': '0.12.0'}, 'Plugins': {'allure-pytest': '2.7.1', 'html': '1.21.1', 'metadata':

'1.8.0'}, 'JAVA_HOME': 'D:\\software\\Java'}

rootdir: D:\PyLib\NemoDataFactory\tests

plugins: allure-pytest-2.7.1, html-1.21.1, metadata-1.8.0

collected 24 items                                                                                                                                                                                             

test_add.py::test_add_bcm[{'name': 测试所有声音播放}] PASSED                                                                                                                                              [  4%]

test_add.py::test_add_bcm[{'name': 重构后得声音模块}] PASSED                                                                                                                                              [  8%]

test_add.py::test_add_bcm[{'name': 测试说你好}] PASSED                                                                                                                                                    [ 12%]

test_add.py::test_add_bcm[{'name': 测试侦测颜色}] PASSED                                                                                                                                                  [ 16%]

test_add.py::test_add_bcm[{'name': 测试侦测屏幕边缘}] PASSED                                                                                                                                              [ 20%]

test_add.py::test_add_bcm[{'name': 测试计时器}] PASSED                                                                                                                                  #                  [ 25%]

test_add.py::test_add_bcm[{'name': 测试手指}] PASSED                                                                                                                                                      [ 29%]

test_add.py::test_add_bcm[{'name': 测试画笔}] PASSED                                                                                                                                                      [ 33%]

test_add.py::test_add_bcm[{'name': 测试变量运算}] PASSED                                                                                                                                                  [ 37%]

test_add.py::test_add_bcm[{'name': 音乐播放器嘟嘟}] PASSED                                                                                                                                                [ 41%]

test_add.py::test_add_bcm[{'name': 追击飞电鼠}] PASSED                                                                                                                                                    [ 45%]

test_add.py::test_add_bcm[{'name': 5000积木数}] PASSED                                                                                                                                                    [ 50%]

test_add.py::test_add_bcm[{'name': 测试克隆类积木}] PASSED                                                                                                                                                [ 54%]

test_add.py::test_add_bcm[{'name': 测试控制类积木}] PASSED                                                                                                                                                [ 58%]

test_add.py::test_add_bcm[{'name': 测试动作类积木}] PASSED                                                                                                                                                [ 62%]

test_add.py::test_add_bcm[{'name': 编程猫快跑}] PASSED                                                                                                                                                    [ 66%]

test_add.py::test_add_bcm[{'name': 测试侦测类}] PASSED                                                                                                                                                    [ 70%]

test_add.py::test_add_bcm[{'name': 测试水平和重力}] PASSED                                                                                                                                                [ 75%]

test_add.py::test_add_bcm[{'name': 外观积木汇总}] PASSED                                                                                                                                                  [ 79%]

test_add.py::test_add_bcm[{'name': 测试当角色被点击}] PASSED                                                                                                                                              [ 83%]

test_add.py::test_add_bcm[{'name': 测试外观类}] PASSED                                                                                                                                                    [ 87%]

test_add.py::test_add_bcm[{'name': 测试x分量}] PASSED                                                                                                                                                    [ 91%]

test_add.py::test_add_bcm[{'name': 测试当积木}] PASSED                                                                                                                                                    [ 95%]

test_add.py::test_add_bcm[{'name': (创作页内运行)测试复制积木能否克隆}] PASSED                                                                                                                            [100%]

========================================================================================== 24 passed in 32.01 seconds =========================================================================================




6.-q(--quiet)选项

与-v相反,会简化输出信息。

(venv) D:\PyLib\NemoDataFactory\tests>pytest -q test_add.py

........................                                                                                                                                                                                  [100%]

24 passed in 31.47 seconds


7.-s选项

允许终端在测试时输出任何符合标准输出流信息(例如print语句)

8.-l(--showlocals)选项

使用-l选项,失败的测试用例由于被堆栈追踪,所以局部变量及其值都会显示出来。

(venv) D:\PyLib\NemoDataFactory\tests>pytest -l test_add.py

============================================================================================= test session starts ==============================================================================================

platform win32 -- Python 3.6.5rc1, pytest-5.0.1, py-1.8.0, pluggy-0.12.0

rootdir: D:\PyLib\NemoDataFactory\tests

plugins: allure-pytest-2.7.1, html-1.21.1, metadata-1.8.0

collected 24 items                                                                                                                                                                                             

test_add.py ........................                                                                                                                                                                      [100%]

========================================================================================== 24 passed in 30.74 seconds =========================================================================================


9.--tb=style选项

--tb=no屏蔽全部回溯信息

--tb=line可以告诉我们错误的位置

--tb=short显示的回溯信息比上面两种模式更详细

--tb=long输出最为详尽的回溯信息

--tb=auto默认值,如果有多个测试用例失败,仅打印第一个和最后一个用例的回溯信息(格式与long模式的一致)

--tb=native只输出python标准库的回溯信息,不显示额外信息


10.--duratioins=N选项

--durations=N会显示最慢的N个阶段(包括每个测试用例的call、setup、teardown),耗时越长越靠前。如果使用--durations=0,则会将所以阶段按耗时从长到短排序后显示。

(venv) D:\PyLib\CodemaoApiTest>pytest tests --durations=0

============================================================================================= test session starts ==============================================================================================

platform win32 -- Python 3.6.5rc1, pytest-5.0.1, py-1.8.0, pluggy-0.12.0

rootdir: D:\PyLib\CodemaoApiTest, inifile: pytest.ini

plugins: allure-pytest-2.7.1, forked-1.0.2, html-1.21.1, metadata-1.8.0, xdist-1.29.0

collected 12 items                                                                                                                                                                                             

tests\test_ban_and_recover_login.py ..                                                                                                                                                                    [ 16%]

tests\test_ban_and_recover_publish.py ..                                                                                                                                                                  [ 33%]

tests\test_ban_comment.py ....                                                                                                                                                                            [ 66%]

tests\test_delete_comments.py .                                                                                                                                                                          [ 75%]

tests\test_delete_works.py .                                                                                                                                                                              [ 83%]

tests\test_recover_comment.py ..                                                                                                                                                                          [100%]

============================================================================================ slowest test durations ============================================================================================

37.84s call    tests/test_delete_comments.py::test_delete_comments_one

15.91s call    tests/test_delete_works.py::test_delete_works_one

12.94s call    tests/test_recover_comment.py::test_recover_one

9.03s call    tests/test_ban_and_recover_login.py::test_ban_and_recover_login_two

8.56s call    tests/test_recover_comment.py::test_recover_two

6.10s call    tests/test_ban_comment.py::test_ban_two

6.05s call    tests/test_ban_comment.py::test_ban_four

5.21s teardown tests/test_ban_and_recover_login.py::test_ban_and_recover_login_two

3.92s call    tests/test_ban_and_recover_publish.py::test_ban_two

3.75s setup    tests/test_ban_and_recover_login.py::test_ban_and_recover_login_two

3.32s setup    tests/test_ban_and_recover_login.py::test_ban_login_one

2.74s setup    tests/test_ban_comment.py::test_ban_two

2.71s setup    tests/test_recover_comment.py::test_recover_one

2.62s setup    tests/test_delete_works.py::test_delete_works_one

2.50s setup    tests/test_ban_comment.py::test_ban_four

2.46s teardown tests/test_recover_comment.py::test_recover_one

2.45s setup    tests/test_ban_comment.py::test_ban_three

2.44s setup    tests/test_delete_comments.py::test_delete_comments_one

2.42s setup    tests/test_ban_comment.py::test_ban_one

2.41s teardown tests/test_ban_comment.py::test_ban_one

2.37s setup    tests/test_recover_comment.py::test_recover_two

2.31s teardown tests/test_ban_and_recover_publish.py::test_ban_two

2.30s teardown tests/test_delete_comments.py::test_delete_comments_one

2.29s teardown tests/test_ban_comment.py::test_ban_two

2.28s teardown tests/test_delete_works.py::test_delete_works_one

2.25s teardown tests/test_ban_and_recover_login.py::test_ban_login_one

2.24s teardown tests/test_recover_comment.py::test_recover_two

2.22s teardown tests/test_ban_comment.py::test_ban_three

2.20s teardown tests/test_ban_comment.py::test_ban_four

2.03s teardown tests/test_ban_and_recover_publish.py::test_ban_one

1.54s call    tests/test_ban_and_recover_login.py::test_ban_login_one

1.52s setup    tests/test_ban_and_recover_publish.py::test_ban_two

1.47s setup    tests/test_ban_and_recover_publish.py::test_ban_one

1.31s call    tests/test_ban_and_recover_publish.py::test_ban_one

0.70s call    tests/test_ban_comment.py::test_ban_one

0.66s call    tests/test_ban_comment.py::test_ban_three

========================================================================================= 12 passed in 165.19 seconds =========================================================================================


11.帮助选项

pytest --version 查看pytest版本

pytest --fixtures 查看内置参数

pytest -h| --help 帮助文档

你可能感兴趣的:(一、Pytest 框架入门)