十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。
Pytest - 使用介绍 ...
上一篇 /
下一篇 2021-06-27 13:50:49
/ 个人分类:python
1. 概述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工具结合,例如jenkins2. 使用介绍2.1. 安装pip install pytest2.2. 示例代码编写规则编写pytest测试样例非常简单,只需要按照下面的规则: 测试文件以test_开头(以_test结尾也可以) 测试类以Test开头,并且不能带有 init 方法 测试函数以test_开头 断言使用基本的assert即可pytest1.py# -*- coding:utf-8 -*-import pytest@pytest.fixture(scope='function')def setup_function(request): def teardown_function(): print("teardown_function called.") request.addfinalizer(teardown_function) # 此内嵌函数做teardown工作 print('setup_function called.')@pytest.fixture(scope='module')def setup_module(request): def teardown_module(): print("teardown_module called.") request.addfinalizer(teardown_module) print('setup_module called.')@pytest.mark.websitedef test_1(setup_function): print('Test_1 called.')def test_2(setup_module): print('Test_2 called.')def test_3(setup_module): print('Test_3 called.') assert 2==1+1 # 通过assert断言确认测试结果是否符合预期fixture的scope参数scope参数有四种,分别是'function','module','class','session',默认为function。 function:每个test都运行,默认是function的scope class:每个class的所有test只运行一次 module:每个module的所有test只运行一次 session:每个session只运行一次setup和teardown操作 setup,在测试函数或类之前执行,完成准备工作,例如数据库链接、测试数据、打开文件等 teardown,在测试函数或类之后执行,完成收尾工作,例如断开数据库链接、回收内存资源等 备注:也可以通过在fixture函数中通过yield实现setup和teardown功能2.3. 测试结果如何执行 pytest # run all tests below current dir pytest test_mod.py # run tests in module file test_mod.py pytest somepath # run all tests below somepath like ./tests/ pytest -k stringexpr # only run tests with names that match the # the "string expression", e.g. "MyClass and not method" # will select TestMyClass.test_something # but not TestMyClass.test_method_simple pytest test_mod.py::test_func # only run tests that match the "node ID", # e.g "test_mod.py::test_func" will be selected # only run test_func in test_mod.py通过pytest.mark对test方法分类执行通过@pytest.mark控制需要执行哪些feature的test,例如在执行test前增加修饰@pytest.mark.website 通过 -m "website" 执行有website标记的test方法$ pytest -v -m "website" pytest1.py==============================================================================
51Testing软件测试网$B%H ~$D;J4J;Y\6N0C+no
test session starts ===============================================================================
Pvf,R8y0platform. linux2 -- Python 2.7.14, pytest-3.0.0, py-1.5.2, pluggy-0.3.1 -- /home/kevin/soft/anaconda2/bin/pythoncachedir: .cacheUsing --randomly-seed=1522925202rootdir: /home/kevin/learn/python-web/tox/case2, inifile:plugins: randomly-1.0.0, mock-1.2, cov-2.0.0collected 3 itemspytest1.py::test_1 PASSED=============================================================================
51Testing软件测试网H2L}$BI
f
pytest-warning summary =============================================================================51Testing软件测试网/p
WlJ P
x
Q6T7P
WC1 None pytest_funcarg__cov: declaring fixtures using "pytest_funcarg__" prefix is deprecated and scheduled to be removed in pytest 4.0. Please remove the prefix and use the @pytest.fixture decorator instead.===============================================================================
51Testing软件测试网l:HkrD
qo&Z5YYI
2 tests deselected ===============================================================================
,\0q\#TkA/g.}{0===========================================================
G m2mDg d;r,y&S01 passed, 2 deselected, 1 pytest-warnings in 0.00 seconds ============================================================51Testing软件测试网mq\&]2a
通过 -m "not website" 执行没有website标记的test方法$ pytest -v -m "not website" pytest1.py==============================================================================
51Testing软件测试网fb(R @)c6Yqa
test session starts ===============================================================================51Testing软件测试网1NE'D2@/p7nK
platform. linux2 -- Python 2.7.14, pytest-3.0.0, py-1.5.2, pluggy-0.3.1 -- /home/kevin/soft/anaconda2/bin/pythoncachedir: .cacheUsing --randomly-seed=1522925192rootdir: /home/kevin/learn/python-web/tox/case2, inifile:plugins: randomly-1.0.0, mock-1.2, cov-2.0.0collected 3 itemspytest1.py::test_3 PASSEDpytest1.py::test_2 PASSED=============================================================================
[-tAH)F0L0pytest-warning summary =============================================================================
c9| X.i%po&k5OH0WC1 None pytest_funcarg__cov: declaring fixtures using "pytest_funcarg__" prefix is deprecated and scheduled to be removed in pytest 4.0. Please remove the prefix and use the @pytest.fixture decorator instead.===============================================================================
4I!P_,FFP
t7f2R0
相关阅读:
- 用例之间如何建立依赖关系?需要这个工具 (liqianqian1116, 2021-2-02)
- python测试框架-unittest & pytest (wphisme, 2021-3-25)
- Pytest参数化-你不知道的使用技巧(一) (大椿菜, 2021-5-11)
- Pytest参数化-你不知道的使用技巧(二) (大椿菜, 2021-5-11)
- Pytest参数化-你不知道的使用技巧(三) (大椿菜, 2021-5-12)
- pytest+yaml实现接口自动化框架之用例参数关联(二) (liqianqian1116, 2021-5-27)
- Pytest参数化-你不知道的使用技巧(四) (大椿菜, 2021-5-13)
- Pytest中断言失败后,也可以继续执行其他用例 (liqianqian1116, 2021-6-01)
- pytest小练 (huidandan, 2021-6-10)
- 全功能Python测试框架:Pytest的基本使用 (大椿菜, 2021-6-21)
收藏
举报
TAG:
pytest