【问题标题】:Robot Framework RequestsLibrary - What about this cookie is causing a Type Error?Robot Framework RequestsLibrary - 这个 cookie 会导致类型错误怎么办?
【发布时间】:2016-03-18 23:02:09
【问题描述】:

我有一个使用 RequestsLibrary 的 Robot Framework 测试套件,用于测试 RESTful API。测试效果很好。一个简单的示例调用:

*** Test Cases ***
Test API
    Create API Session
    ${resp} =    Get Request    api_session    /foo/bar
    BlahBlah test the ${resp} etc.


*** Keywords ***
Create API Session
    ${headers_str} =    Evaluate   str('application/json')
    &{headers} =    Create Dictionary    Content-Type=${headers_str}
    Create Session    api_session    ${BASE_URL}    headers=${headers}    verify=True

现在我需要开始为这个测试套件的所有调用添加一些代码接收代码覆盖率跟踪的 cookie。所以我修改了上面的工作代码,如下所示:

*** Test Cases ***
Test API
    Create API Session
    ${resp} =    Get Request    api_session    /foo/bar
    BlahBlah test the ${resp} etc.

*** Keywords ***
Create API Session
    ${headers_str} =    Evaluate   str('application/json')
    &{headers} =    Create Dictionary    Content-Type=${headers_str}
    ${cookies_str} =    Evaluate   str('{"CodeCoverage":"Test Name","CodeCoverage_Suite":null,"CodeCoverage_Config":null}')
    &{cookies} =    Create Dictionary    CODECEPTION_CODECOVERAGE=${cookies_str}
    Create Session    api_session    ${BASE_URL}    headers=${headers}    cookies=${cookies}   verify=True

但现在Test API 测试在Get Request 关键字处失败,并带有令人困惑的TypeError: string indices must be integers。这里发生了什么?我想我误解了我的 cookie,但文档让我比开始时更加困惑。

【问题讨论】:

    标签: cookies python-requests robotframework


    【解决方案1】:

    这不是针对您的具体问题的答案,但它确实意味着您尝试做的事情将不起作用,即使您确实获得了正确的语法等。 RequestsLibrary 无法再处理 cookie。检查https://github.com/bulkan/robotframework-requests/blob/master/src/RequestsLibrary/RequestsKeywords.py

    具体来说:

    # cant pass these into the Session anymore
        self.timeout = float(timeout) if timeout is not None else None
        self.cookies = cookies
        self.verify = verify
    

    我一度把自己逼疯了,因为我需要传入的 cookie 来做某事,当我发现这条评论时,我差点把显示器扔出窗外。我通过推特联系了作者,但从未收到关于为什么这是一个问题的回复。也许我自己什至完全误解了这种情况,我只是抛弃了我正在做的事情,因为它是一个 POC。

    【讨论】:

    • 你确定请求不能处理cookies吗?我认为所有评论都在说它不能将 cookie 传递给 session。它仍然可以通过每个单独的 request 传递 cookie。这就是代码保存 cookie (self.cookies) 并在执行实际请求时使用它们的原因。
    • 不,我完全不确定@BryanOakley,因此我建议我可能会误解一些事情,听起来我从你的评论中得到了。在我的场景中,我需要将 cookie 传递给会话,所以我被打脸了。
    • Bryan 有一个很好的观点。我记得当我在源代码中挖掘以试图理解这一点时看到了这一点,但我想我会以这种方式发布问题,因为也许有人会知道,事实上,你可以将它传递给会话。我将尝试将 cookie 传递给各个调用,并用我的发现报告这个问题。
    • 所以到目前为止,您的经验证实无法通过会话?根据我对 Bryan 的回答/cmets 的经验,祝您每次通话都好运,他通常是正确的。
    • 终于有机会试一试。在将 cookie 传递给特定请求时遇到其他问题,但我认为一旦我弄清楚它就会起作用。不过,我会为此提出一个单独的问题。这是该问题的正确答案。谢谢,shicky!
    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 2019-04-10
    • 2016-12-16
    相关资源
    最近更新 更多