Python测试框架pytest(23)插件 - pytest-picked、pytest-lazy-fixture

2022-07-26 14:34:33 浏览数 (1)

Python测试框架pytest(23)

插件

pytest-picked、pytest-lazy-fixture

目录

  • 1、pytest-picked(运行未提交的git用例)
    • 1.1、安装
    • 1.2、参数
    • 1.3、用法
    • 1.4、示例
  • 2、pytest-lazy-fixture(在pytest.mark.parametrize中使用fixture)
    • 2.1、安装
    • 2.2、示例

1、pytest-picked

自动化测试用例一般编写完后且又执行通过,都会提交到 git 仓库里。但是每次新增用例后,希望只执行未提交到 git 仓库里的用例。

pytest-picked 插件可以实现只执行未提交到 git 仓库里的测试用例。

1.1、安装

在命令行中运行以下命令进行安装:

代码语言:javascript复制
pip install pytest-picked

或者(使用国内的豆瓣源,数据会定期同步国外官网,速度快。)

代码语言:javascript复制
pip install pytest-picked -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

1.2、参数

  • --picked=[{only,first}] 单独或首先运行与更改的文件相关的测试
  • --mode=PICKED_MODE Options: unstaged, branch
  • --parent-branch=PARENT_BRANCH 回购的主要分支(master、main、trunk等)

1.3、用法

代码语言:javascript复制
pytest --picked
 
pytest --picked=first
 
pytest --picked --mode=branch
 
pytest --picked --mode=unstaged # 默认
 
pytest --picked --mode=branch --parent-branch=main # 如果你的父分支与主分支"master"不同

1.4、示例

以gitlab为例,首先要创建gitlab账号

访问官网并注册账号

https://gitlab.com/

使用git前,要先安装git

访问官网下载并安装即可

https://git-scm.com/

创建项目,项目目录结构:

创建test_case1.py文件

脚本代码:

代码语言:javascript复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

class TestDemo():
    def test_case1(self):
        print("执行用例1")

    def test_case2(self):
        print("执行用例2")

    def test_case3(self):
        print("执行用例3")

创建test_case2.py文件

脚本代码:

代码语言:javascript复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

class TestClass():
    def test_case4(self):
        print("执行用例4")

    def test_case5(self):
        print("执行用例5")

    def test_case6(self):
        print("执行用例6")

在gitlab上创建相关项目,例如My_Demo

PyCharm上创建本地git仓库

配置gitlab上所创建的项目(My_Demo)地址

提交

push到远程仓库里

已将项目同步到gitlab上

之后再新增2个文件,添加用例

创建test_case3.py文件

脚本代码:

代码语言:javascript复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

class TestAdd1():
    def test_case7(self):
        print("执行用例7")

    def test_case8(self):
        print("执行用例8")

    def test_case9(self):
        print("执行用例9")

创建test_case4.py文件

脚本代码:

代码语言:javascript复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

class TestAdd2():
    def test_case10(self):
        print("执行用例10")

    def test_case11(self):
        print("执行用例11")

    def test_case12(self):
        print("执行用例12")

创建完成后的目录结构

命令行跳转到项目的根目录,输入命令查看当前分支状态

代码语言:javascript复制
git status

新增的2个文件没有提交到git仓库里

1、使用参数(--picked)

命令行输入执行命令

代码语言:javascript复制
pytest --picked

运行结果:只运行新增的2个文件用例

2、使用参数(--picked=first)

命令行输入执行命令

代码语言:javascript复制
pytest --picked=first

运行结果:首先运行修改后的测试文件,之后运行所有未修改的测试文件。

2、pytest-lazy-fixture

pytest-lazy-fixture 插件,解决在测试用例中使用 @pytest.mark.parametrize 参数化时调用 fixture。

2.1、安装

在命令行中运行以下命令进行安装:

代码语言:javascript复制
pip install pytest-lazy-fixture

或者(使用国内的豆瓣源,数据会定期同步国外官网,速度快。)

代码语言:javascript复制
pip install pytest-lazy-fixture -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

2.2、示例

示例一:@pytest.mark.parametrize 参数化

创建test_lazy_fixture.py文件

脚本代码:

代码语言:javascript复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

import pytest

@pytest.fixture(params=["admin", "123456"])
def my_fixture(request):
    return request.param

@pytest.mark.parametrize("param1, param2", [("login", pytest.lazy_fixture("my_fixture"))])
def test_case(param1, param2):
    print("n参数param1:"   param1)
    print("n参数param2:"   param2)
    assert param2 in ["admin", "123456"]

打开命令行,输入执行命令:

代码语言:javascript复制
pytest -s -v test_lazy_fixture.py

运行结果:

示例二:@pytest.fixture 参数化

创建test_lazy_fixture2.py文件

脚本代码:

代码语言:javascript复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

import pytest

@pytest.fixture
def my_fixture_1():
    one = "admin"
    return one

@pytest.fixture
def my_fixture_2():
    two = "123456"
    return two

@pytest.fixture(params=[pytest.lazy_fixture("my_fixture_1"), pytest.lazy_fixture("my_fixture_2")])
def my_fixture_all(request):
    return request.param

def test_case(my_fixture_all):
    print("n参数:"   my_fixture_all)
    assert my_fixture_all in ["admin", "123456"]

打开命令行,输入执行命令:

代码语言:javascript复制
pytest -s -v test_lazy_fixture2.py

运行结果:

0 人点赞