pytest如何实现mark标记功能
这篇文章将为大家详细讲解有关pytest如何实现mark标记功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
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():# 标记函数 passclass 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标记功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341