一、固件Fixture

        1.Fixture使用

                需要将哪一个方法作为fixture使用,就在该方法前添加装饰器@pytest.fixture(),

                @pytest.fixture(scope='function',params=None,autouse=False,ids=None,name=None)

                调用Fixture:

                        当测试用例需要调用Fixture时可以通过直接在用例里加Fixture参数;

                        如果一个测试类中所有的测试用例都需要用到Fixture,每个用例需要传参很麻烦,这时候选择在类上添加装饰器@pytest.mark.userfixtures(),使整个类都调用Fixture

                注意: 如果Fixture有返回值,那就不能适用usefixtures,因为usefixtures调用的是代码逻辑

import pytest

#test_01.py
@pytest.fixture()
def fixture_prepare():
    print('this is fixture prepare')

def test_fixture1(fixture_prepare):
    print('test_fixture1')

def test_fixture2(fixture_prepare):
    print('test_fixture2')

if __name == '__main__':
    pytest.main(['-vs','test_01.py'])

        2.Fixture的作用域

                指定固件的使用范围,可通过scope参数声明

                        function: 函数级别,默认级别,每个测试方法执行前都会执行一次

                        class: 类级别,每个测试类执行前执行一次

                        module: 模块级别,每个模块执行前执行一次,即每个.py文件执行前执行一次

                        session:会话级别,一次测试只执行一次,即多个文件调用一次

        3.autouser自动使用

                提供两个布尔值,True和False(默认),当autouse=True时可以自动就爱那个测试固件Fixture自动添加到测试用例上,这样就不需要每次必须传参即可使用测试固件。

        4.yield的使用

                使用yield关键字可以把同一组的准备、销毁工作编写在一起,yield后面的内容相当于测试框架中的tearDown的收尾工作。

                使用yield关键字注意一下几点:

                        (1)如果测试用例中的代码出现异常或者断言失败,并不会影响固件中yield后面代码的执行

                        (2)如果固件中yield之前的代码出现异常,那么测试方法不会继续执行,关键字yield后面的代码也不会再执行

                        (3)yield后面或前面的代码执行几次取决于Fixture装饰器给出的参数作用域

        5.共享Fixture功能

                如果每执行一个测试用例都要复写一遍登录显然是不合理的,因此需要将登录写成一个方法,然后共享给所有需要使用的测试用例即可达到复用的目的,在Pytest框架下提供一个共享Fixture的功能,只需要创建一个名为conftest.py的文件,将需要共享的功能在此定义,其他测试文件会自动查找

                使用conftest.py文件需要注意以下几点:

                        (1)conftest.py文件名称固定,不能更改

                       (2)conftest.py需要与运行的用例文件在同一个package下,并且存在__init__.py文件

                      (3)使用conftest.py时不需要import导入,pytest用例会自动识别

                     (4)如果conftest.py放在项目的根目录下,则对全局生效。如果放在某个package下则只对package下的用例文件有效,允许存在多个conftest.py文件

                     (5)conftest.py文件不能被其他文件导入

                       (6)  所有同目录测试文件运行前都会执行conftest.py文件

二、Mark标记

        1.@pytest.mark.skip(reason=None)

@pytest.mark.skip(reason="功能暂未实现")
def test_unimplemented():
    assert False  # 不会执行

        2.@pytest.mark.skipIf(condition)

@pytest.mark.skipif(sys.version_info < (3, 8), reason="需 Python 3.8+")
def test_python38_feature():
    assert sys.version_info >= (3, 8)

        3.@pytest.mark.xfail(condition,reason=None,...)

                x标识预期断言结果为错误,执行后结果是失败的;X表示预期断言结果为错误,执行后结果是成功的 

        4.@pytest.mark.parametrize(argnames,argvalues)

        5.@pytest.mark.usefixtures(fixturename1,fixtruename2,...)

@pytest.fixture
def db_conn():
    return Database()

@pytest.mark.usefixtures("db_conn")  # 自动应用 db_conn fixture
class TestDB:
    def test_query(self):
        assert self.db_conn.query("SELECT 1") is not None

        6.@pytest.mark.tryfirst

        7.@pytest.mark.trllast

        8.@pytest.mark.filterwarnings(warning)

        9.mark自定义标记

                需要再pytest.ini中预先声明标记,避免运行时警告

[pytest]
markers =
    slow: 标记为慢速测试(可添加描述)
    smoke: 冒烟测试
    windows_only: 仅限 Windows 平台运行
    linux_only: 仅限 Linux 平台运行

         命令行运行特定标记的测试

        pytest -m smoke  # 只运行标记为 smoke 的测试

        pytest -m "slow and not windows_only"  # 慢速且非 Windows 专属测试
        pytest -m "smoke or linux_only"        # 冒烟测试或 Linux 专属测试

        pytest --markers  查看所有标记

三、pytest插件

        1.插件的安装与卸载

                pip install pytest-NAME  NAME为插件名

                pip uninstall pytest-NAME  卸载

        2.查看活动插件

                pytest --trace-config

        3.插件注销

                pytest -p no: NAME  NAME为插件名

        4.实用的插件

                pytest-sugar  增加进度条并立即显示失败的测试

                pytest-xdist  允许开启多个进程,同时执行多个测试用例

                pytest-allure-adaptor  生成漂亮的测试报告

                pytest-instafail 在测试运行期间报告失败

                pytest-rerunfailures  失败用例重跑

                pytest-ordering  可以指定一个测试套中的所有用例执行顺序

                pytest-cov  覆盖率报告

四、Allure测试报告

        1.安装allure,网站https://github.com/allure-framework/allure2/release进行下载,下载allure2.10.0

        2.命令行运行pip install pytest-allure-adaptor命令

        3.命令行中运行pytest --alluredir ./result/  报告数据生成,在result文件夹中存放运行后产生的测试数据json文件

        4.命令行运行 allure generate ./result/ -output ./report/ --clean  生成HTML格式的测试报告,--clean清除allure报告路径后再生成一个新的报告,-output生成报告的路径

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐