1.mark标签
如果在每一个模块,每一个类,每一个方法和用例之前都加上mark标签,那么在pytest运行时就可以只运行带有该mark标签的模块、类、接口。
这样可以方便我们执行自动化时,自主选择执行全部用例、某个模块用例、某个流程用例
2.-m 选择对应的标签
一个:'-m','lesson_add(标签名)'
多个:'-m','lesson_add or lesson_list(标签名)'
排除法:'-m','not lesson_add(标签名)'
排除法多个:'-m','not (lesson_add or lesson_list(标签名))'
eg:只执行shop_list接口的相关用例
import pytest,allure,os
from libs.login import Login
from utils.handle_excel import get_excel_data
from utils.handle_path import report_path
from utils.handle_path import data_path
from common.baseApi import BaseAssert
#TestLogin继承BaseAssert
class TestShop(BaseAssert):
@pytest.mark.parametrize('inBody,expData', get_excel_data('商铺模块', 'Listshop','请求参数','响应预期结果'))
@pytest.mark.shop_list
def test_shop_list(self,inBody,expData,shop_init):#shop_init初始化操作
# 1.调用业务层封装的接口代码
res=shop_init.query(inBody)
# 2.断言实际返回结果与预期结果
self.define_assert(res['code'],expData['code'])
if __name__ == '__main__':
pytest.main([__file__,'-sv','-m','shop_list','--alluredir',report_path,'--clean-alluredir'])
os.system(f'allure serve {report_path}')
如果出现如下图的警告,说明我们自己取得标签名系统不承认,则需要在ini文件中进行配置,在pycharm中安装ini插件
pytest.ini—去除警告
[pytest]
markers=
login: Run login case
shop: Run shop case
shop_list:Run shop_list case
shop_update:Run shop_update case
3.pytest其他用法
-k:匹配用例名称
pytest -k shop #带有shop的接口用例都会执行
- 匹配:可全名,也可以模糊
若有lesson1.py lesson2.py - pytest -k lesson
会运行两个文件
-v:节点(多层化)
pytest -v test_shop.py::TestShop::test_shop_list
- ::代表层级,上述命令表示执行test_shop模块下的TestShop类里的test_shop_list中的全部用例
- 示例:test_lesson.py::TestLesson::test_lesson_add
- pytest -v test_lesson.py::TestLesson::test_lesson_add
-sq:简化打印信息
- -s:输出打印
- -q:简化打印信息
跳过/条件跳过
- 当功能未实现、功能阻塞等因素导致一些用例暂时不能执行,就可以金属跳过skip用例,相当于注释的效果
- 写法应用
import pytest,allure,os
from common.baseApi import BaseAssert
@pytest.mark.skip(reason='该模块暂时不要运行')
class TestShop(BaseAssert):
@pytest.mark.parametrize('inBody,expData', get_excel_data('商铺模块', 'Listshop','请求参数','响应预期结果'))
def test_shop_list(self,inBody,expData,shop_init):#shop_init初始化操作
# 1.调用业务层封装的接口代码
res=shop_init.query(inBody)
# 2.断言实际返回结果与预期结果
self.define_assert(res['code'],expData['code'])
@pytest.mark.parametrize('inBody,expData', get_excel_data('商铺模块', 'Updateshop','请求参数','响应预期结果'))
if __name__ == '__main__':
pytest.main([__file__,'-sv','--alluredir',report_path,'--clean-alluredir'])
os.system(f'allure serve {report_path}')
- 有条件的跳过 -skipif,if条件为真,就跳过该用例
eg:当运行环境为Windows 版本为2.2.2跳过 - 写法
@pytest.mark.skipif(1==2,reason='条件满足就跳过')