详解pytest实现mark标记功能详细介绍
作者:miki的测试笔记 发布时间:2022-01-16 23:59:48
mark标记
在实际工作中,我们要写的自动化用例会比较多,也不会都放在一个py文件中,如果有几十个py文件,上百个方法,而我们只想运行当中部分的用例时怎么办?
pytest提供了一个非常好用的mark功能,可以给测试用例打上各种各样的标签,运行用例时可以指定运行某个标签。mark功能作用就是灵活的管理和运行测试用例。
标签既可以打到方法上,也可以打到类上,标记的两种方式:
直接标记类或方法或函数:
@pytest.mark.标签名
类属性:
pytestmark = [pytest.mark.标签名, pytest.mark.标签名]
,需要注意的是属性名称是固定的
import pytest
@pytest.mark.beta# 可以给类打标签
class TestLogin:# 标记类
@pytest.mark.qc
@pytest.mark.beta# 也可以多个标签
def test_login(self):# 标记方法
pass
@pytest.mark.smoke# 单个标签
def test_register():# 标记函数
pass
class TestClass:
# 加一个 pytestmark的类属性
pytestmark = [pytest.mark.qc, pytest.mark.beta]# 标签存放在一个列表
pytest.main()
注册标签名
我们要想运行已经打好标记的函数,还需要对标签名进行注册,告诉pytest有哪些标签,如果不进行注册运行时(pytest的高级版本)可能会报警告让你进行注册。
我们只需要在项目根目录下创建一个文件,注意文件名是不可修改的,否则pytest会找不到。内容格式如下:
# pytest.ini
# 只能修改=右边的值
[pytest]
python_files = demo_*.py# 模块名以demo_开头
python_functions = demo_*# 方法名以demo_开头
python_classes = Demo*# 类名名以Demo开头
# 注册标签
markers =
qc
beta
smoke
运行指定的标签
通过命令行执行
单个标签:pytest -m "标签名"
(-m意思是执行标签mark),不想执行某个标签可以用not来取反,即pytest -m "not 标签名"
多个标签:可以加上判断,pytest -m "qc and beta"
或者 pytest -m "qc or beta"
效果是一样的
注意:标签名一定要加双引号,单引号是会报错的。
通过代码执行
这里普及一下,main()方法是可以接收不定长参数的,因此可以把要执行的命令放在一个列表中
if __name__ == '__main__':
pytest.main(['-m qc and beta', '-s'])# 标签名不需要加引号
关于pytest的指令,可以通过控制台执行pytest --help
查看,上面举例中-s
命令是指打印更加详细的信息,如果程序运行过程当中的print()
信息打印不出来,可以加上-s
可选参数,它是-- capture=no的缩写。
skip跳过标记
在维护测试用例的过程中,可能在一个阶段某些用例已经不需要了,或者在指定条件下是不需要运行的,那么我们就可以通过mark.skip
跳过这些函数或者类,两种跳过方式:
直接跳过:
@pytest.mark.skip(reason = “原因”)
,这里原因是可选参数条件跳过,即满足某个条件才跳过:
@pytest.mark.skipif(a == 1, reason = “原因”)
db_host = 'localhost'
@pytest.mark.skip("和现在的需求不符合")# 不满足当下了,或别人编写的暂时不能删的
def test_yuz(self):
pass
@pytest.mark.skipif(db_host == 'localhost', reason='只测试线上环境,不测试本地环境')
def test_develop_env(self):
pass
来源:https://www.cnblogs.com/miki-peng/p/14644650.html
猜你喜欢
- 目录一、基本用法二、计数循环三、字符串遍历循环四、列表遍历循环五、文件遍历循环六、遍历循环的扩展模式一、基本用法for <循环变量&g
- 本文实例讲述了Django框架表单操作。分享给大家供大家参考,具体如下:HTML表单是网站交互性的经典方式。 开始学习如何用Django对用
- 许多网站缺乏针对性和友好的导航设计,难以找到连接到相关网页的路径,也没有提供有助于让访客/用户找到所需信息的帮助,用户体验非常糟糕。本期薯片
- 申明本博客不提供任何服务器端程序,也不提供任何收费抢购软件。该博客仅用于学习selenium自动化工具。如有侵犯到任何公司的合法权益,请私信
- 本文会介绍一些Python大神用的贼溜的技巧,让一探究竟吧!欢迎收藏学习,喜欢点赞支持,欢迎畅聊。整理字符串输入整理用户输入的问题在编程过程
- 本期我们将展示一种对路面类型和质量进行分类的方法及其步骤。为了测试这种方法,我们使用了我们制作的RTK数据集。路面分类该数据集[1]包含用低
- 有时候在测试django中一些模块时,不想重新跑一整个django项目,只想跑单个文件,正好写在if __name__ == '__
- 和单选框一样,许多新手在用 Javascript 验证表单(form)中多选框(checkbox)的值时,都会遇到问题,原因是 checkb
- 近日,有关微软Open XML标准的问题又引发了某些业内人士的关注。其一是因为日前ISO(国际标准组织)成员南非和巴西相继就ISO批准微软的
- Pynimate介绍Pynimate是python第三方用于动态可视化的数据模块。安装pip install pynimate实验示例fro
- 基于Ubuntu16.04 + Python3 + nginx + mysql + Django接下来先安装这些必要的环境,这些操作都是在你
- 简介想看看你最近一年都在干嘛?看看你平时上网是在摸鱼还是认真工作?想写年度汇报总结,但是苦于没有数据?现在,它来了。这是一个能让你了解自己的
- IPython + ptpython,完美体验首先是安装pip install ipython ptpython然后使用ptipython有
- Pandas中根据列的值选取多行数据 # 选取等于某些值的行记录 用 == df.loc[df['column_name']
- 用VBS语言实现的一个简单网页计算器,功能:可以进行加法、减法、乘法、除法、取反、开根号、及指数运算。虽然简单但是比起windows xp自
- 数据库(DataBase,DB)是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。通俗地说,数据库就是一个按照数据结构来组
- 前言加密技术在数据安全存储,数据传输中发挥着重要作用,能够保护用户隐私数据安全,防止信息窃取。RSA是一种非对称加密技术,在软件、网页中已得
- delattr 函数用于删除属性。delattr(x, 'foobar') 相等于 del x.foobar。语法setat
- 本章给大家在项目使用时候,常见的一种情况解决案例,即是当我们调用多个线程,使用了同一个函数去处理数据的时候,有些用函数已经处理完成,但是有些
- 密码强度是一个很普遍的功能,比较简单,主要是怎么制定这个强度规则。现在需要升级密码强度的验证,以前的验证比较简单,现在已经不能满足需求了,现