“GET”请求在 Python 中工作,但在机器人框架中不起作用

Posted

技术标签:

【中文标题】“GET”请求在 Python 中工作,但在机器人框架中不起作用【英文标题】:"GET" request working in Python but doesn't work in Robot Framework 【发布时间】:2021-05-16 09:27:30 【问题描述】:

我有以下 python 方法,它是导入机器人框架测试套件的库的一部分:


    def check_activation_status(self):
        '''
        A simple keyword to check if my app has been activated not. Returns boolean value from the API response.  
                *Arguments*
        '''

        url = os.path.join(self.url, "api/activation")
        print_to_log(url)     # a custom keyword that prints the url to the RF log.html file, just for info purpose
        r = requests.get(url, verify=False)
        activated = r.json()["activated"]
        return activated

调用检查激活状态关键字时出现以下错误:


15:45:11.446    DEBUG   Starting new HTTPS connection (1): localhost:8001   
15:45:11.448    FAIL    ConnectionError: HTTPSConnectionPool(host='localhost', port=8001): Max retries exceeded with url: /api/activation (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7efdcb718a30>: Failed to establish a new connection: [Errno 111] Connection refused')) 

    我不确定为什么它会“启动新的 HTTPS 连接”,因为 https://localhost:8001 在套件设置后成功运行,这是测试需要在 /api/activation 端点进行的后续检查。

    当我在 Python 控制台中运行以下命令时,它运行良好,并为我提供了我期望的 json 值(真或假)

import requests

r = requests.get("https://localhost:8001/api/activation", verify=False)
activated = r.json()['activated']

有什么理由可以在 Python 中而不是在 Robot Framework 中工作?

我熟悉 Robot Framework Requests 库,但是,这种导入我自己的库的方法允许存储在 Python 库中的可读关键字 - 也可以在 Robot Framework 之外使用。

【问题讨论】:

分享机器人文件。我相信您使用不同的实例打开 HTTPS 连接,而 Python 文件中的实例没有打开连接。 self.url 的值是多少,例如print_to_log(url) 的输出?并且不要使用os.path.join() 来构造 URL,这在 Windows 上会非常失败。 【参考方案1】:

在机器人框架中使用 RequestLibrray。您可以直接使用 GET 方法。 Refer the library here

pip install robotframework-requests

机器人框架库本身就是一个python库,可以直接导入到python文件中——不限于机器人框架。您可以直接在python文件中使用机器人框架请求库。

【讨论】:

让我知道你的发现,我会进一步帮助你

以上是关于“GET”请求在 Python 中工作,但在机器人框架中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

请求 REST POST API 在 Postman 中工作,但在 Alamofire 中不起作用

简单的 get/post 请求在 python 3 中被阻止,但在 python 2 中没有

PHP Curl 请求不起作用,但在 POSTMAN 中工作正常

GET API 在浏览器中显示 KeyError,但在 Postman 中工作

为啥“docker login”在 Docker 快速启动终端中失败,但在默认机器中工作?

无法设置未定义的属性“区域设置”,不能在 replit 中工作,但在我的电脑上