欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Pytest框架的使用

程序员文章站 2022-03-11 16:16:31
...

Pytest框架的使用

1、Pytest介绍

        基于unittest之上的单元测试框架
        (1)、自动发现测试模块和测试方法;
        (2)、断言使用assert+表达式即可;
        (3)、可以设置会话(从运行所有用例开始-用例结束)级,模块(.py)级,类级(setupClass/teardownClass),
        函数(测试用例)级的fixtures,数据准备+清理工作
        (4)、有丰富的插件,300+以上。==allure
        (5)、测试用例不一定要放在测试类当中。
            安装命令:pip install pytest
            安装html报告插件:pip install pytest-html
            pytest插件地址:http://plugincompat.herokuapp.com/
        pytest收集测试用例的规则:
            (1)、默认从当前目录中收集测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索;
            (2)、搜索规则:
                a、符合命名规则,test_*.py 或者 *_test.py的文件;
                b、以test_开头的函数名;
                c、以Test开头的测试类,(没有__init__函数)当中,以test_开头的函数;
                d、断言使用基本的assert即可;
        Pytest的特点:
        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工具结合,例如jenkins

2、pytest之mark功能

        mark机制  4.6
        先注册  pytest.ini  [pytest] markers=标签名:说明
        去给用例打标签
             @pytest.mark.已注册的标签名

             测试类和模块: 类下面设置类属性值,模块下面设置全局变量。
             pytestmarker=pytest.mark.已注册的标签名
             多个标签:pytestmarker=[pytest.mark.已注册的标签名,pytest.mark.已注册的标签名]

3、pytest之命令运行用例

4、pytest之fixture功能

        (1)、定义fixture
            1.1 创建了一个conftest.py文件
            1.2 在conftest中,创建fixture
            1.3 定义函数,函数前面加上@pytest.fixture(scope=作用域)
                函数内部:yield 隔开前置后后置的代码,之前是前置,之后是后置
                        yield 返回值(后面跟上返回值用于调用)
        (2)、调用fixture
            在测试用例.测试类 前面加上(@pytest.mark.usefixtures("fixture对应的函数名称"));
            fixture对应的函数名称=它的返回值;
            fixture对应的函数名称作为测试用例的参数,将返回值传给测试用例;
            fixure  在conftest.py当中,定义的时候,就已经决定了他的用例域,决定了它的命运;
            fixture可以有很多个;
            无论在测试类、测试用例去主动调用fixture,都不能够改变它的命运;
            调用就是决定在哪儿去使用它。在哪个测试类?
            pytest的用例执行顺序:
               基本原则:按照搜索规则,先匹配到的先执行。
               1、文件名称:按名称名称顺序去搜索。先找到的,先去内部找用例。
               2、在py文件内部:按照代码顺序去找用例。先找到的先执行。
        (3)、fixture暂不支持与unittest同用,断言都用assert.
        (4)、pytest之fixture参数化-多运行,pytest层级覆盖。测试用例与其同级或者在其子目录
        (5)、fixture的scope参数
            scope参数有四种,分别是'function','module','class','session',默认为function。
            function:每个test都运行,默认是function的scope
            class:每个class的所有test只运行一次
            module:每个module的所有test只运行一次
            session:每个session只运行一次
        (6)、setup和teardown操作
            setup,在测试函数或类之前执行,完成准备工作,例如数据库链接、测试数据、打开文件等
            teardown,在测试函数或类之后执行,完成收尾工作,例如断开数据库链接、回收内存资源等
            备注:也可以通过在fixture函数中通过yield实现setup和teardown功能

        (7)、fixture定义与调用
            定义  == 定命运。session、modle、class、function
            调用  == 你准备把它在哪儿用?
                session:整个会话都有效。
                module:模块内有效。
                class:类内有效。
                function:测试用例内有效。
                conftest.py文件。 === 定义多个fixture.

5、pytest之参数化—ddt

        参数化  ddt   参数名 = 用例的参数名称
        在测试用例的前面加上:
        @pytest.mark.parametrize("参数名",列表)
        参数名:用来接收每一项数据,并作为测试用例的参数;
        @pytest.mark.parametrize("参数1,参数2",[(数1,数2),(数1,数2)]);
        排列组合。多个参数的值排列组合。在一个用例前面 ,使用多个@pytest.mark.parametrize
        示例:用例有4个:0,2/0,3/1,2/1,3
            @pytest.mark.parametrize("x", [0, 1])
            @pytest.mark.parametrize("y", [2, 3])
            def test_foo(x, y):
                pass

6、pytest之重运行

        插件名称:rerunfailures
        安装方法:pip install pytest-rerunfailures(失败case重复执行)
        使用方式:
        命令行参数形式:
        命令:pytest -reruns 重试次数
        比如:pytest --reruns 2 表示:运行失败的用例可以重新运行两次
        命令:pytest --reruns 重试次数 --reruns-delay 次数之间设置的延时(单位:秒)
        Pytest --reruns 2 --reruns-delay 5
        表示失败的用例可以重新运行2次,第一次和第二次的时间间隔为5秒;

7、pytest之HTML报告

        测试报告  = junitxml,html,allure
        1、先装插件
        2、命令行的参数:
           --html=相对路径/report.html   # 相对于pytest命令运行时,所在的根目录。
           --alluredir=相对路径
        3、安装allure命令行工具:下载,解压,配置环境变量
        4、生成allure文件之后,用命令:allure serve alluredir
        os.system("")
        allure与jenkins的集成、重运行机制、pytest中的失败截图。

        Pytest可以生成多种样式的结果: pytest plugin(下载插件用)
        1、生成JunitXML格式的测试报告:命令:--junitxml = path
        2、生成result log格式的测试报告:命令:--resultlog=report、log.txt
        3、生成Html格式的测试报告:命令:--html=report\test_one_func.html(相对路径)
            # pytest -v -s -m demo --html=Demo/PO_V6/Outputs/reports/pytest_run_reports.html

8、pytest之allure测试(allure测试报告)

         https://docs.qameta.io/allure/#_pytest
相关标签: Pytest