首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于测试的夹具的参数

用于测试的夹具的参数
EN

Stack Overflow用户
提问于 2019-10-10 09:24:38
回答 1查看 12.2K关注 0票数 4

我已经参数化了我的夹具来调用API,使用不同的输入数据在每个调用上发布请求,其作用域为class。因为我需要用发送的数据检查API响应。我需要把这些装置的请求参数读入测试。

代码语言:javascript
复制
class Test_create_fixture():

@pytest.fixture(scope="class", params=[0, 1])
def my_fixture(self, request):
    "Call incident creation api."

    # POST request to API using params value in request data, get data from API      
    my_data = {'abc': 123, 'severity': 0} # this data is from API

    self.data = {'severity': request.param}

    return my_data

def test_incident_severity(self, my_fixture, request):
    print("self.data", self.data) # 'Test_create_fixture' object has no attribute 'data'
    assert my_fixture.get('severity', False) == request.param # AttributeError: 'FixtureRequest' object has no attribute 'param'

但是,当我运行这个程序时,我无法读取传递给治具测试的请求参数。还试图在实例变量中保存,但没有工作。我观察到,夹具中的id()特性与测试中的self特性不同。为甚麽这样呢?有办法做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2019-10-11 04:40:00

您可以将request.param从夹具传递到测试函数。您可以将它添加到my_data对象本身。

代码语言:javascript
复制
class Test_create_fixture():

    @pytest.fixture(scope="class", params=[0, 1])
    def my_fixture(self, request):
        "Call incident creation api."

        # POST request to API using params value in request data, get data from API      
        my_data = {'abc': 123, 'severity': 0, 'req_param': request.param} # this data is from API

        return my_data

    def test_incident_severity(self, my_fixture):
        assert my_fixture.get('severity', False) == my_fixture.get('req_param')

更新:

由于您正在将夹具参数化,因此request.param只在定义参数化的夹具函数中可用。

另一种可能是引入另一个参数化并返回参数的夹具。当前的夹具和测试函数使用这个新的夹具来获得param。

代码语言:javascript
复制
class Test_create_fixture():

    @pytest.fixture(scope="class", params=[0,1])
    def req_param(self, request):
        return request.param

    @pytest.fixture(scope="class")
    def my_fixture(self, req_param):
        "Call incident creation api."

        # POST request to API using req_param in request data, get data from API      
        my_data = {'abc': 123, 'severity': 0} # this data is from API

        return my_data

    def test_incident_severity(self, my_fixture, req_param):
        assert my_fixture.get('severity', False) == req_param
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58319619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档