背景
我一直在使用Robot Framework和RequestsLibrary编写针对我通过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网关端点。如果是这样,你是怎么把它拉下来的?
更具体地说:
答案 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-auth
和RequestsLibrary
如何与新关键字一起使用的详细信息。
@the_mero提到了boto3
,这几乎可以肯定是你想用来实际编组凭证的。您不想像测试/拉取请求中的简单示例那样在测试中对它们进行硬编码。