机器人框架 - 由IAM保护的AWS API网关

时间:2017-10-21 22:24:24

标签: python amazon-web-services python-requests robotframework aws-api-gateway

背景

我一直在使用Robot FrameworkRequestsLibrary编写针对我通过AWS API Gateway公开的RESTful端点的自动化测试。所以我写的测试看起来大致如下:

*** Settings ***                
Library Collections
Library RequestsLibrary

*** Test Cases ***              
Get Requests
    Create Session  Sess    https://<api-gateway-url>   
    ${resp}=    Get Request Sess    /path/to/my/api?param=value 
    Should Be Equal As Strings  ${resp.status_code} 200 
    Dictionary Should Contain Value ${resp.json()}  someValueIwantToVerify  

现在,我正在尝试使用IAM保护这些API网关端点。因此,请求必须为sig4 signed

使用这些服务的应用程序是用javascript编写的,并使用aws-api-gateway-client来签署请求。使用AWS Signature授权类型,在Postman中进行测试(手动)也很容易。但是,我正在努力制定机器人框架的策略。

问题(S)

从最广泛的意义上讲,我想知道是否有其他人正在使用Robot Framework来测试IAM安全的API网关端点。如果是这样,你是怎么把它拉下来的?

更具体地说:

  • 是否存在解决此用例的现有Robot Framework库?
  • 如果没有,写我自己的图书馆是唯一的选择吗?
  • 如果我不能写一个库(this looks promising),我会定义哪种关键字,以及如何使用它们?

2 个答案:

答案 0 :(得分:1)

我不知道一个RF库可以做你想要的,但我的第一直觉是使用亚马逊自己的AWS SDK for Python(boto3),并围绕它编写一个瘦的关键字包装库。我已经为使用AWS S3的测试用例做了这个,但是boto3也支持API网关:http://boto3.readthedocs.io/en/latest/reference/services/apigateway.html

答案 1 :(得分:0)

requests库接受auth参数,该参数应为AuthBase的子类。

事实证明,修改RequestsLibrary以利用这一现有功能总共需要两行代码(不计入注释,测试和空白以便于阅读):

def create_custom_session(self, alias, url, auth, headers={}, cookies=None, timeout=None, proxies=None, verify=False, debug=0, max_retries=3, backoff_factor=0.10, disable_warnings=0):
    return self._create_session(alias, url, headers, cookies, auth, timeout, max_retries, backoff_factor, proxies, verify, debug, disable_warnings)

有时答案只是issue your own pull request

新的Create Custom Session关键字将接受任意auth个对象,包括library I'm using生成的对象(我强烈推荐)。

original issue现在包含aws-requests-authRequestsLibrary如何与新关键字一起使用的详细信息。

@the_mero提到了boto3,这几乎可以肯定是你想用来实际编组凭证的。您不想像测试/拉取请求中的简单示例那样在测试中对它们进行硬编码。