【pytest系列】- mark标记功能详细介绍
如果想从头学起pytest,可以去看看这个系列的文章!
https://www.cnblogs.com/miki-peng/category/1960108.html
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.ini文件,注意文件名是不可修改的,否则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
												
											【pytest系列】- mark标记功能详细介绍的更多相关文章
- Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例
		
概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Ha ...
 - 【转】Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例
		
概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Ha ...
 - Java 集合系列07之 Stack详细介绍(源码解析)和使用示例
		
概要 学完Vector了之后,接下来我们开始学习Stack.Stack很简单,它继承于Vector.学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. ...
 - Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例
		
概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...
 - 【转】 Java 集合系列07之 Stack详细介绍(源码解析)和使用示例
		
概要 学完Vector了之后,接下来我们开始学习Stack.Stack很简单,它继承于Vector.学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. ...
 - Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
		
概要 前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对Linked ...
 - Java 集合系列12之 TreeMap详细介绍(源码解析)和使用示例
		
概要 这一章,我们对TreeMap进行学习.我们先对TreeMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeMap.内容包括:第1部分 TreeMap介绍第2部分 TreeMa ...
 - 【转】Java 集合系列12之 TreeMap详细介绍(源码解析)和使用示例
		
概要 这一章,我们对TreeMap进行学习.我们先对TreeMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeMap.内容包括:第1部分 TreeMap介绍第2部分 TreeMa ...
 - Ubuntu根目录下各文件夹的功能详细介绍
		
Ubuntu的根目录下存在着很多的文件夹,但你知道他们都存放着哪些文件呢?这些是深入了解Ubuntu系统必不缺少的知识,本文就关于此做一下介绍吧. /bin/ 用以存储二进制可执行命令文件. / ...
 
随机推荐
- rest framework renderers
			
渲染器 前TemplateResponse实例可以被返回给客户端,它必须被渲染.渲染过程需要模板和上下文的中间表示,并把它变成能够提供给客户端的最后一个字节流. - Django文档 REST框架包含 ...
 - LNMP配置——Nginx配置 ——域名重定向
			
一.配置 #vi /usr/local/nginx/conf/vhost/test.com.conf 写入: server { listen 80; server_name test.com test ...
 - 【docker】删除docker中的运行日志
			
docker inspect --format='{{.LogPath}}' 容器名称 |sudo xargs -i rm {}
 - windows如何上传ios app到appstore
			
我们在hbuilderx这些开发工具打包好ios app后,需要将这个app提交appstore才能让用户下载安装. 上传IOS APP主要是通过苹果开发者中心来上传,然后借助香蕉云编上传工具来上传就 ...
 - Java并发编程之基础理论
			
内存模型 主内存.工作内存与Java堆.栈.方法区并不是同一个层次的内存划分 勉强对应起来 从定义来看,主内存对应Java堆中对象实例数据部分,工作内存对应虚拟机栈中部分区域 从更低层次来说,主内 ...
 - python3使用cv2对图像进行基本操作
			
技术背景 在机器视觉等领域,最基本的图像处理处理操作,可以通过opencv这个库来实现.opencv提供了python的接口,所需安装的库为opencv-python,但是在库的导入的时候一般用的是i ...
 - vue-cli2 生成的项目打包优化(持续学习中)
			
1.昨天看到自己的项目每次打包后都是30M左右,就觉得这个打包后的dist文件太大了,能不能小点呢, 然后就看网上的资料,提供了好多优化的办法,但是我只用了一个,后期再不断的优化吧. 打开工程项目文件 ...
 - JS基础学习第四天
			
对象(Object) 对象是JS中的引用数据类型对象是一种复合数据类型,在对象中可以保存多个不同数据类型的属性使用typeof检查一个对象时,会返回object 对象的分类: 1.内建对象- 由ES标 ...
 - BUAAOO第一单元代码分析
			
1.HomeWork1 思路 一个主类用于字符串得操作, 一个Poly类用于对一个多项式进行抽象,用Arraylist来对term进行封装.内部含有求导方法,添加并合并同类项的方法,toString方 ...
 - Git分支及其协同开发
			
目录 Git分支 Git是如何保存数据的 Git分支的本质 Git分支的操作 远程仓库与本地仓库分支开发 一个项目多个远程仓库 远程仓库操作命令 协同开发 Git flow工作流 GitLub安装搭建 ...