• 在线客服

  • 扫描二维码
    下载博学谷APP

  • 扫描二维码
    关注博学谷微信公众号

  • 意见反馈

原创 Pytest快速入门使用说明手册

发布时间:2020-07-15 11:04:09 浏览 4904 来源:博学谷 作者:照照

    Pytest作为一个Python测试框架,不仅简单灵活,新手也可以快速入门,而且具有很多的第三方插件,功能十分强大。因此,Pytest可以说是测试行业从业者必学的工具。本文将为大家介绍Pytest的安装、基本操作、运行时设置,以及参数化,下面一起来拿看看Pytest快速入门使用说明手册吧!

     

    Pytest使用说明

     

    1、安装

     

    1)全局安装

     

    使用pip 进行安装

     

    pip install -U pytest

     

    检查安装版本

     

    $ pip install -U pytest

    This is pytest version 4.4.0, imported from xxxx

     

    2)项目目录下安装

     

    如果只是将pytest安装到当前项目中,不与其它的版本混淆,使用 virtualenv进行安装

     

    mkdir pytest_project

    cd pytest_project

    virtualenv .venv

     

    这将会在项目目录下创建pytest-env目录存放虚拟环境。

    激活虚拟环境

     

    source .venv/bin/activate

     

    再次使用pip进行安装,安装文件将存放在当前项目目录下,而不再是全局环境变量下

    $ pip install pytest

     

    3)区别

     

    全局安装方式适合所有项目,在项目目录下虚拟化安装只适合当前项目。

     

    2、基本操作

     

    1)主要内容

     

    基本使用方式:我们将从一个简单的测试开始,Pytest命名规范文件名以test_开头或以_test.py结尾。首先创建一个名为test_capitalize.py的文件,在此文件中编写一个名为capital_case的函数,以字符串作为参数,将参数转化为大写返回。另外编写一个test_capital_case参数函数,主要验证capital_case函数完成它所说的内容,我们用test_作为测试函数名称的前缀。

     

    # test_capitalize.py

     

    def capital_case(x):

        return x.capitalize()

     

    def test_capital_case():

        assert capital_case('semaphore') == 'Semaphore'

     

    在命令行运行 pytest ,   将自动执行 test_capitalize.py 文件中的 test_capital_case 测试方法;

     

    collected 1 item

                                                                                                test_capitalize.py .                                                  [100%]

     

    ========================================= 1 passed in 0.01 seconds ==========================================

     

    测试用例执行通过。

     

    3Pytest 运行时设置

     

    1xunit 格式

     

    函数级别设置运行时

     

    setup_module

    setup

    teardown

    teardown_module

     

    如下代码

     

    def setup_module():

        print("module --setup-- ")

     

    def teardown_module():

        print('module --teardown--')

     

    def setup():

        print("function --setup--")

     

    def teardown():

        print("function --teardown--")

     

    def test_01():

        print("---test01---")def test_02():    print('-----test02------')

     

    运行文件 pytest -s -v tmp.py

     

    testcases/tmp.py::test_01

    module --setup-- 

     

    function --setup

    -----test01---

    PASSED function --teardown--

     

    testcases/tmp.py::test_02 

    function --setup--

    -----test02------

    PASSED 

    function --teardown--

     

    module --teardown--

     

    Class 类级别

    tmp2.py

     

    class TestTmp2:

        @classmethod

        def setup_class(cls):

            print('- class setup -')

     

        @classmethod

        def teardown_class(cls):

            print('- class teardown - ')

     

        def setup(self):

            print('- method setup -')

     

        def teardown(self):

            print("- method teardown -")

     

        def test_01(self):

            print("-- test01 --")

     

        def test_02(self):

            print('-- test02 --')

     

    pytest -s -v tmp2.py

     

    tmp2.py::TestTmp2::test_01 - class setup 

    -- method setup -

    -- test01 --

    PASSED- method teardown -

     

    testcases/tmp/tmp2.py::TestTmp2::test_02 - method setup -

    -- test02 --

    PASSED- method teardown -

    - class teardown -

     

    2fixture

     

    函数级别

    tmp.py

     

    import pytest

     

    @pytest.fixture(scope='module')

    def fix_module():

        print('-- module setup --')

        yield

        print('-- module teardown --')

     

     

    @pytest.fixture()def fix_func(fix_module):

        print('-- func setup --')

        yield

        print('-- func teardown --')

     

     

    @pytest.fixture()def fix_func2():

        print('-- func2 setup --')

        yield

        print('-- func2 teardown --')

     

    def test_01(fix_func):

        print('-- test 01 --')

     

    def test_02(fix_func2):

        print('-- test 02 --')

     

    scope="module", module 级别

    yeild 关键字

     

    class 类级别

     

    import pytest

     

    @pytest.fixture(scope='module')

    def fix_module():

        print('-- module setup --')

        yield

        print('-- module teardown --')

     

     

     

     

    class TestTmp2:

        @pytest.fixture()

        def fix_func(self, fix_module):

            print('-- func setup --')

            yield

            print('-- func teardown --')

     

        def test_01(self,fix_func):

            print('-- test 01 --')

     

        def test_02(self,fix_func):

            print('-- test 02 --')

     

    pytes -s -v tmp2.py

     

    tmp2.py::TestTmp2::test_01 -- module setup --

    -- func setup --

    -- test 01 --

    PASSED-- func teardown --

     

    tmp2.py::TestTmp2::test_02 -- func setup --

    -- test 02 --

    PASSED-- func teardown --

    -- module teardown --

     

    tmp2.py

     

    import pytest

     

    @pytest.fixture(scope='module')

    def fix_module():

        print('-- module setup --')

        yield

        print('-- module teardown --')

     

     

    @pytest.fixture(scope='session')

    def fix_session():

        print('-- session set up --')

        yield

        print('--  session teardown --')

     

     

    @pytest.fixture(scope='class')

    def fix_class():

        print('-- class set up --')

        yield

        print('-- class tear down --')

     

     

    @pytest.fixture(scope='function')

    def fix_function():

        print('-- function set up --')

        yield

        print('-- function tear down --')

     

    @pytest.mark.usefixtures('fix_session','fix_module','fix_class' ,'fix_function')

    class TestTmp2:

     

        def test_01(self):

            print('-- test 01 --')

     

        def test_02(self):

            print('-- test 02 --')

     

    ● session: 所有

    ● module: 整个文件

    ● class:类

    ● function:方法

     

    testcases/testfixture/tmp2.py::TestTmp2::test_01 

    -- session set up --

    -- module setup --

    -- class set up --

    -- function set up --

    -- test 01 --

    PASSED-- function tear down --

     

    testcases/testfixture/tmp2.py::TestTmp2::test_02 

    -- function set up --

    -- test 02 --

    PASSED-- function tear down --

    -- class tear down --

    -- module teardown --

    --  session teardown --

     

    conftest.py 多个文件共享

     

    4、参数化

     

    1mark.parametrize


    import pytest

     

    a = [

        ('share','title1','conent1'),

        ('share','title2','conent2'),

    ]

     

    @pytest.mark.parametrize('tab,title,content',a)

    def test_a(tab,title,content):

        print('----',tab,title,content,'-----')

     

    2fixture 级别的参数化


    import pytest

     

    @pytest.fixture(params=[0,1],ids=['spam','ham'])

    def a(request):

        return request.param

     

    def test_a(a):

        print(f'--{a}--')

        # assert a

     

    def test_b(a):

    print(f'=={a}==')

     

    以上就是Pytest快速入门使用说明手册的全部内容,大家如果觉得本文对你有帮助,不妨把文章分享出去,让更多的人看到~

    申请免费试学名额    

在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!

上一篇: 自动化测试工程师的发展前景怎么样?好不好? 下一篇: 自动化测试的测试模型有哪些?优缺点分别是什么?

相关推荐 更多

热门文章

  • 前端是什么
  • 前端开发的工作职责
  • 前端开发需要会什么?先掌握这三大核心关键技术
  • 前端开发的工作方向有哪些?
  • 简历加分-4步写出HR想要的简历
  • 程序员如何突击面试?两大招带你拿下面试官
  • 程序员面试技巧
  • 架构师的厉害之处竟然是这……
  • 架构师书籍推荐
  • 懂了这些,才能成为架构师
  • 查看更多

扫描二维码,了解更多信息

博学谷二维码