10.接口自动化测试学习-Pytest框架(2)

发布于:2024-04-27 ⋅ 阅读:(26) ⋅ 点赞:(0)

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插件
直接写mark标签,会有警告

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='条件满足就跳过')