【问题标题】:Translating from Python to Robot, how to import a library从 Python 翻译到机器人,如何导入库
【发布时间】:2021-07-15 03:52:22
【问题描述】:

我正在尝试编写一些需要专门包装器的 API 测试。我正在使用的库接受 API 请求,对其进行检查,并使用私钥,在将请求发送到服务器之前,根据请求的大小、时间戳和其他内容生成签名标头。

这是用python3编写的概念证明代码

import requests
from auth_client.requests_auth import Auth

APP_UUID = "redacted"
private_key = open("private_key", "r").read()

signature = Auth(APP_UUID, private_key)

uuid="redacted"
url = "https://www.example.com/v1/rest/{}/index".format(uuid)
headers = {'AdditionalHeader': 'redacted'}

result = requests.get(url, auth=signature, headers=headers)

print(result.text)

到目前为止,我已经尝试在机器人框架中编写它:


Library       requests
Library       auth_client.requests_auth

*** Variables ***
    ${additionalHeader}     redacted 
    ${APP_UUID}             redacted
    ${url}                  www.example.com/v1/rest
    ${PRIVATE_KEY}          redacted

*** Keywords ***
I am setup for API calls to the server
    [Arguments]    ${Excel File Path}  ${Sheet Name}   
    # Get values from Excel
    # log to console      APP_UUID= ${APP_UUID}, private key = ${PRIVATE_KEY}  
    ${auth}   Auth    ${APP_UUID}    ${PRIVATE_KEY}
    

When I call server with 'index'
    ${fullurl}     ${url}/${uuid}/index
    ${headers}    "{'additonalheaders': ${additionalHeader}}"

    ${result}      requests.get(${fullurl}, auth=${auth}, headers=${headers})

但我收到“导入的库 'auth_client.requests_auth' 不包含关键字” 而且我找不到Auth。

我尝试了其他几种变体,但都没有成功。

【问题讨论】:

    标签: python-3.x robotframework


    【解决方案1】:

    Robot 的设计并不是为了让您只导入一个随机的 Python 模块并使用它。可以,但这并不是它的设计初衷。

    相反,您应该在 python 中创建一个新的关键字库,在您要使用的库之上添加一个抽象层。

    例如

    class MyClient:
        def __init__(self):
            self.app_uuid = "redacted"
            self.private_key = open("private_key", "r").read()
            self.signature = Auth(APP_UUID, private_key)
    
            self.uuid="redacted"
            self.url = "https://www.example.com/v1/rest/{}/index".format(uuid)
            self.headers = {'AdditionalHeader': 'redacted'}
        
        def perform_get_request(self, path):
            """Example:  Perform GET request  /index"""
    
            result = requests.get(f"self.url{path}", auth=self.signature, headers=self.headers)
            return result
    

    然后,在测试中,您将 Client 作为库导入,以便您可以使用关键字。

    *** Settings ***
    Library  MyClient
          
    *** Test Cases ***
    Example
        ${result}=  perform GET request  /index
        ...
    
        
    

    【讨论】:

    • 是的 - 这就是我现在正在做的事情。谢谢!
    【解决方案2】:

    您的 python 代码中没有类或关键字。这是来自用户guide的示例

    from example import Connection
    
    class MyLibrary:
    
        def __init__(self, host, port=80):
            self._conn = Connection(host, int(port))
    
        def send_message(self, message):
            self._conn.send(message)
    

    您需要创建与类同名的库,在这种情况下 MyLibrary.py 然后您可以使用 send_message 机器人框架中的关键字。

    【讨论】:

    • 我不是在尝试调用python,我是在尝试用机器人语言重写python,但是在考虑了一夜之后,我开始考虑按照您的建议进行操作。在 python 中编写我自己的类,然后从机器人内部调用模块。
    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 2019-02-27
    • 2020-07-21
    • 2017-03-24
    • 1970-01-01
    • 2018-06-08
    • 2018-02-13
    • 2023-01-13
    相关资源
    最近更新 更多