pytest 参数化和allure注解(持续更新)

前提条件:我的用例是写在xlsx里面的。(接口和测试读取方法一样)

首先,读取xlsx用例文件

import xlrd,json

def getCase(filepath,index):
    try:
        file = xlrd.open_workbook(filepath)
        me = file.sheets()[index]
        nrows = me.nrows
        listdata = []
        for i in range(1, nrows):
            dict_canshu = {}
            if me.cell(i, 1).value=='Y':
                dict_canshu['id'] = me.cell(i, 0).value
                dict_canshu.setdefault('active',me.cell(i, 1).value)
                dict_canshu.setdefault('apiname', me.cell(i, 2).value)
                dict_canshu.setdefault('apihost',me.cell(i,3).value)
                dict_canshu.setdefault('url',me.cell(i, 4).value)
                dict_canshu.setdefault('method', me.cell(i, 5).value)
                dict_canshu.setdefault('redata', me.cell(i, 6).value)
                dict_canshu.setdefault('assert', me.cell(i, 7).value)
                dict_canshu.setdefault('sql', me.cell(i, 8).value)
                dict_canshu.setdefault('desc', me.cell(i, 9).value)
                listdata.append(dict_canshu)
        return listdata
    except Exception as e:
        log.error('获取测试用例数据失败,原因:%s'%e)

进入正题

import pytest,allure,Path,json
from interface.data.readCase import getCase
from interface.case.BaseThread import BaseThread
from common.httpHandle import httpHandle

class Test_api_case(object):
    @classmethod
    def setup_class(cls):
        cls.http=httpHandle()
        cls.req=None
        cls.result = None
    @pytest.mark.parametrize(('casedata'),getCase(Path.apicasPath(),0))
    def test_case(self,casedata):
        allure.dynamic.title(casedata['apiname'])
        allure.dynamic.description(casedata['apiname'])
        self.req=casedata
        self.thread = BaseThread(casedata,self.http)
        self.thread.start()

    def teardown(cls):
        cls.result = cls.thread.join()
        print('请求参数:', cls.req)
        print('响应结果:', cls.result)
        cls.j=json.loads(cls.result)
        cls.code=cls.j['statusCode']
        assert  cls.code==200

有不明白的,加群QQ 833077481交流

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
pytest是一个功能强大的Python测试框架,支持参数化测试和共享fixture。其中,参数化测试可以通过pytest.mark.parametrize装饰器实现,而共享fixture可以通过conftest.py文件实现。 参数化测试可以让我们在一次测试中运行多个测试用例,而不必编写多个测试函数。具体实现方法如下: 1.在测试函数上使用@pytest.mark.parametrize装饰器,指定参数名和参数值列表。 2.在测试函数中使用参数名作为参数,运行测试用例。 示例代码如下: ```python import pytest @pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 54)]) def test_eval(test_input, expected): assert eval(test_input) == expected ``` 上述代码中,我们使用@pytest.mark.parametrize装饰器指定了两个参数test_input和expected,并传入了三组参数值。在测试函数test_eval中,我们使用这两个参数运行了三个测试用例。 共享fixture可以让我们在多个测试函数中共享相同的测试数据和测试环境。具体实现方法如下: 1.在conftest.py文件中定义fixture函数。 2.在测试函数中使用@pytest.fixture装饰器,指定fixture函数名称。 示例代码如下: ```python # conftest.py import pytest @pytest.fixture def login(): username = "testuser" password = "123456" print("登录成功") return username, password # test_sample.py def test_case1(login): print(f"测试用例1使用账号{login[0]}登录") def test_case2(login): print(f"测试用例2使用账号{login[0]}登录") ``` 上述代码中,我们在conftest.py文件中定义了一个名为login的fixture函数,用于模拟用户登录操作。在测试函数test_case1和test_case2中,我们使用@pytest.fixture装饰器指定了login函数,并在测试函数中使用login参数获取登录账号信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值