Python 自动化测试如何动态的选择用例执行

 

 

问题

在做自动化测试时,往往需要根据任务的不同选择不同的用例集来执行。怎么优雅的来解决这个问题呢?

答案就是:pytest 框架的标记功能。

使用方法如下:

1. 注册标记

在项目根目录下创建 pytest.ini,在其中注册标记如下:

  [pytest]
markers =
    success: marks success tests
    fail: marks fail tests

定义了 success,fail 两个标记,冒号后面是标记的注释,可以省略。

2.标记测试

1. 标记方法

标记测试方法,我们在前面进行参数化时已经使用过非常简单。

在要标记的测试方法上应用装饰器

  @pytest.mark.mark_name
def some_test_function()
    pass

这里的 mark_name 就是你自己定义的标记名称,例如上面定义的 success,就可以写成

  @pytest.mark.success
def some_test_function()
    pass

2. 标记测试类

与标记方法一致,在要标记的类定义语句上方应用装饰器

  @pytest.mark.mark_name
class TestClass:
    pass

3. 标记测试模块

标记模块需要在模块顶部创建全局变量 pytestmark,如下:

  import pytest
pytestmark = pytest.mark.mark_name
# 或者多个标记
pytestmark = [pytest.mark.mark_name1, pytest.mark.mark_name2]

4.分开标记使用了参数化的用例

  import pytest


@pytest.mark.foo
@pytest.mark.parametrize(
    ("n", "expected"), [(1, 2), pytest.param(1, 3, marks=pytest.mark.bar), (2, 3)]
)
def test_increment(n, expected):
    assert n + 1 == expected

在上面的案例中,标记 foo 会应用到每个用例,标记 bar 只会应用在第二个用例上。

3. 运行指定标记

当使用自定义的标记对测试做好标记后,在 pytest 命令中使用 -m 参数即可选择指定的标记运行。

  pytest -v -m success
# 多个标记可以用 and or进行组合
pytest -v -m "mark1 and mark2"  # 选取同时被mark1和mark2标记的测试
pytest -v -m "mark1 or mark2"   # 选取被mark1或mark2标记的测试

4. 通过命令行动态指定标记

实际运行项目时,需要根据测试任务的不同,动态执行对应的用例,所以我们需要能够动态的接收命令行参数。

1. 参数解析模块

在 common 目录下创建 tools.py 模块,编写如下函数:

  import sys


def get_opts(name):
    args = sys.argv[1:]
    if name in args:
        return args[args.index(name)+1]
    else:
        return ''

2. main.py 模块代码

修改 main.py 模块代码如下:

  import pytest

import settings
from common.tools import get_opts


if __name__ == '__main__':
    args = ['-s', '-v', '--clean-alluredir', '--alluredir=./reports', settings.TEST_CASE_DIR]
    arg = get_opts('-m')
    if arg:
        args.insert(0, '-m {}'.format(arg))
    pytest.main(args)

那么接下来就可以通过命令来动态指定参数了:

  python main.py -m mark1

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值