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
​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/178521.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nodejs微信小程序+python+PHP-储能电站运营管理系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

SSM之Mybatis框架

1 概述 1.1 什么是Mybayis 它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低。 1.2 什么是ORM ORM(…

《C++ Primer》第9章 顺序容器(三)

参考资料: 《C Primer》第5版《C Primer 习题集》第5版 9.5 额外的string操作(P320) 9.5.1 构造string的其他方法 const char *cp "hello, world!"; char arr[] { h,\0,i,\0 }; string s1(cp); // s1 "hello, world!…

基于STM32的数字图像处理与模式识别算法优化

基于STM32的数字图像处理与模式识别算法优化是一项涉及图像处理和机器学习领域的研究任务,旨在实现高效的图像处理和模式识别算法在STM32微控制器上的运行。本文将介绍基于STM32的数字图像处理与模式识别算法优化的原理和实现步骤,并提供相应的代码示例。…

网络运维与网络安全 学习笔记2023.11.22

网络运维与网络安全 学习笔记 第二十三天 今日目标 VLAN间通信之交换机、VLAN间通信综合案例、浮动路由 VRRP原理与配置、VRRP链路跟踪、VRRP安全认证 VLAN间通信之交换机 单臂路由的缺陷 在内网的VLAN数量增多时,单臂链路容易成为网络瓶颈 三层交换机 具备…

Linux 进程等待

在2号手册里查wait()。wait()等待任意一个子进程的状态。 wait()等待成功会返回该子进程的id,返回失败会返回-1: 小实验 子进程的退出码 子进程执行work(),父进程wait子进程。 子进程跑完5秒之后就e…

AIGC前沿技术与数字创新应用合作交流和论坛发布活动圆满落幕

2023年11月17日下午,AIGC前沿技术与数字创新应用合作交流和论坛发布活动在北京市海淀区牡丹科技楼B座B1报告厅成功举办。 在这个以技术为驱动力的时代,AIGC等这些前沿技术正以惊人的速度改变着我们的生活和产业格局。利用新兴技术和数字化工具来解决问题…

《工程测量学》笔记/期末复习资料

水平角观测方法: ①测回法;②方向观测法(全圆观测法)。 比例尺精度: 图上0.1mm(肉眼能够识别的最小距离)所表示的实地距离称为“比例尺精度”。 ①尺寸小于比例尺精度的地物不需要测量&…

系列十、ThreadLocal的使用场景

一、ThreadLocal的使用场景 (1)使用日期工具类,当用到SimpleDateFormat时,使用ThreadLocal保证线程安全; (2)全局存储用户信息(用户信息存入ThreadLocal,那么当前线程在任…

Kubernetes(k8s)之Pod详解

文章目录 Kubernetes之Pod详解一、Pod介绍pod结构pod定义 二、Pod配置pod基本配置镜像拉取策略启动命令环境变量端口设置资源配额 三、Pod生命周期创建和终止初始化容器钩子函数容器探测重启策略 四、Pod调度定向调度NodeNameNodeSelector 亲和性调度NodeAffinityPodAffinityPo…

2014年6月18日 Go生态洞察:Go 1.3 版本发布

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

什么是应急演练脚本?其设计原则是什么?

应急演练脚本是一种系统性、有计划的模拟性文件,旨在测试和评估组织在紧急情况下的应对能力。这种脚本提供了一系列步骤和场景,以确保团队能够高效、协调地应对各种紧急事件。以下将详细探讨应急演练脚本的定义、设计原则以及实施过程。 一、应急演练脚本…

Leetcode2216. 美化数组的最少删除数

Every day a Leetcode 题目来源:2216. 美化数组的最少删除数 解法1:模拟 使用变量 count 代表已删除的元素个数,由于每次删除元素,剩余元素都会往前移动,因此当前下标为 i - count。 遍历一次数组 nums&#xff0…

Sleuth

Sleuth 一 引言 随着服务的越来越多,对调⽤链的分析会越来越复杂。它们之间的调⽤关系也许如下图: 问题: 1:微服务之间的调⽤错综复杂,⽤户发送的请求经历那些服务,调⽤链不清楚,没有⼀ 个⾃…

【Django使用】md文档10大模块第5期:Django数据库增删改查和Django视图

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展…

兼顾陪读|自由职业者赴美国加州大学尔湾分校访学

I老师出国访学除了提升自己的科研水平外,主要目标还是以陪伴孩子上学为主。最终我们为其落实了排名还不错的加州大学尔湾分校的职位,这对于已多年脱离科研工作岗位,学术背景非常薄弱的I老师来说相当不易。 I老师背景: 申请类型&a…

str转wstr的三种方法和从网站获取json数据到数据随机提取,返回拼接字符串和动态数组

库的设置 hv库 外部包含目录:…\include\libhv_new\hv; 库目录:…\include\libhv_new\lib\x86\Release; 附加依赖项:hv.lib; //Get请求 获取json数据,然后提取符合 条件的,time值大于自定义变量的值,然后取…

uview-plus u-picker的defaultIndexs修改后无效的问题

uniapp项目中使用了uview-plus组件库,在使用u-picker组件时,发现其默认的选中属性 defaultIndex是一次性的,修改后无法响应,解决办法就是在u-picker源码中修改这个属性的watch,源码位置在uni_modules/uview-plus/components/u-pi…

Uptime Kuma 企业微信群机器人告警

curl https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key693axxx6-7aoc-4bc4-97a0-0ec2sifa5aaa \-H Content-Type: application/json \-d {"msgtype": "text","text": {"content": "hello world"}}企业微信群机器人ke…

[autojs]autojs开关按钮的简单使用

"ui"; ui.layout(<vertical><Switch id"autoService" text"无障碍服务"checked"false"textSize"15sp"/><button text"第二个按钮"/></vertical> ); ui.autoService.on("check"…