python - 最佳实践 : automated web API testing

标签 python testing ckan web-api-testing

我用 Python 编写了一个程序,它使用两个不同的 API 从两个不同的服务(CKAN 和 MediaWiki)获取数据。 特别地,有一个 Resource 类,它从上述服务请求数据并进行处理。

在某些时候我得出结论,需要对我的应用程序进行测试。 问题是我在网上和书中找到的所有示例都不处理此类情况。

例如,在 Resource 类中我有一个方法:

def load_from_ckan(self):
    """
        Get the resource
        specified by self.id
        from config.ckan_api_url 
    """
    data = json.dumps({'id': self.id})
    headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
    url = config.ckan_api_url + '/action/resource_show'
    r = requests.post(url, timeout=config.ckan_request_timeout, data=data, headers=headers)
    assert r.ok, r
    resource = json.loads(r.content)
    resource = resource["result"]
    for key in resource:
        setattr(self, key, resource[key])

load_from_ckan 方法从 CKAN API 获取有关资源的数据并将其分配给对象。这很简单,但是......

我的问题是:如何测试这样的方法?或者我应该在这里测试什么?

我考虑过将结果腌制(保存)到 HDD 的可能性。然后我可以在测试中加载它并与使用 load_from_ckan() 初始化的对象进行比较。但 CKAN 是社区驱动的平台,此类测试的行为将无法预测。

如果有任何关于自动化测试哲学的书籍(比如测试什么,不测试什么,如何使测试有意义等),请给我一个链接。

最佳答案

对于任何测试,真正的关键问题是 - 哪些可能出错?

在您的情况下,这三种风险似乎是:

  • 有问题的网络 API 可能会停止工作。但是您已经使用 assert r.ok 对此进行了检查。
  • 您或其他人将来可能会对代码进行错误更改(例如输入错误的变量),从而破坏代码。
  • API 可能会发生变化,因此它不再返回您需要的字段或格式。

感觉你可以为后两者编写一个相当简单的测试,具体取决于你实际依赖的 API 中的哪些数据:例如,如果你希望 JSON 有一个名为“temperature”的字段,它是一个浮点摄氏数,你可以编写一个调用你的函数的测试,然后检查 self.temperature 是'float'的一个实例并且在合理的值范围内(-30到50?)。这应该让您确信 API 和您的函数都按设计工作。

关于python - 最佳实践 : automated web API testing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14740892/

相关文章:

python - matplotlib x 标签放置

haskell - 如何指定 Travis 应该用来测试我的 Haskell 包的解析器(和 GHC)?

macos - 在 Mac 上安装 DataPusher 后,ckan 网站出现不可逆、可重现的崩溃

python - 测试类的 PEP8 命名约定

dataset - 目前无法预览此资源。 - 康康

redis - 使用 CKAN 的异步后台作业可以做什么?

python - 如何避免 Python 中日志文件臃肿?

python - Pyramid 设置 mako.imports 不工作

python - 字符串作为具有多处理访问的发送缓冲区

.net - 在 WCF 服务中测试异常处理