“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 中工作