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

当涉及到 Python 自动化车载地图测试用例时,你可以使用一些常用的测试框架和库来帮助你完成任务。以下是一个示例,使用了 Pytest 和 Selenium: 1. 首先,确保你已经安装了 Pytest 和 Selenium。你可以使用以下命令进行安装: ``` pip install pytest selenium ``` 2. 创建一个新的 Python 文件,命名为 `test_map.py`。 3. 导入所需的库和模块: ```python import pytest from selenium import webdriver from selenium.webdriver.common.keys import Keys ``` 4. 编写测试用例。下面是一个示例,展示了如何使用 Selenium 来自动化测试车载地图的功能: ```python @pytest.fixture def browser(): driver = webdriver.Chrome() # 这里使用了 Chrome 浏览器,你也可以选择其他浏览器 yield driver driver.quit() def test_search_location(browser): browser.get("https://maps.example.com") # 替换为你要测试的车载地图网站地址 search_box = browser.find_element_by_id("search-box") # 替换为搜索框的元素 ID search_box.send_keys("New York") # 替换为你要搜索的地点名称 search_box.send_keys(Keys.RETURN) assert "New York" in browser.title # 检查页面标题是否包含搜索的地点名称 ``` 在上面的示例中,`browser` 是一个 Pytest 的 fixture,它将在每个测试用例之前创建一个浏览器实例,并在测试用例完成后关闭浏览器。 `test_search_location` 是一个测试用例函数,它使用 Selenium 来模拟在搜索框中输入地点名称,并检查搜索结果页面的标题是否包含该地点名称。 5. 运行测试用例。在命令行中,进入到包含 `test_map.py` 文件的目录,并执行以下命令: ``` pytest ``` Pytest 将自动查找并执行所有以 `test_` 开头的测试用例函数。 这只是一个简单的示例,你可以根据具体需求编写更多的测试用例函数来覆盖车载地图的各项功能。同时,你还可以使用其他的 Python 库来辅助测试,如 Appium 用于移动端地图测试等。希望这能帮到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值