API Object

API Object Models,简称AOM,AOM是一种设计模式,它围绕着将API、路由或功能交互及其相关行为封装在结构良好的对象中。AOM旨在增强API测试和集成的直观性和弹性。在实践中,AOM需要精心设计专门的API对象,以有效地保护用户免受与API 请求、响应、端点交互和身份验证过程相关的复杂性的影响。

seldom 支持AOM, 并且提供了一些好用的功能,辅助你使用AOM.

  • 目录结构如下
mypro/
├── api/
│   ├── __init__.py
│   ├── auth_object.py
│   └── xxx_object.py
├── test_dir/
│   ├── test_auth.py
│   └── test_xxx.py
│  ...
  • 创建 API Object
# api/auth_object.py
from seldom.testdata import get_int
from seldom.request import HttpRequest
from seldom.request import check_response


class AuthAPIObject(HttpRequest):

    def __init__(self, api_key):
        self.api_key = api_key

    @check_response(ret="form.token")
    def get_token(self, user_id:str) -> str:
        """
        模拟:根据用户ID生成登录token
        :param user_id:
        :return:
        """
        data = {"user_id": user_id, "token": "t" + str(get_int(10000, 99999))}
        r = self.post("/post?key=" + self.api_key, data=data)
        return r

定义API接口,根据get_token()用于生成token,这里我们通过随机数模拟的生成的token。check_response()装饰器用于装饰接口,form.token 用于提取API的返回值。

  • 创建测试用例
# test_dir/test_auth.py
import seldom
from api.auth_object import AuthAPIObject


class TestAPI(seldom.TestCase):

    def test_case(self):
        auth_object = AuthAPIObject(api_key="abc123")
        token = auth_object.get_token(user_id="123")
        print("token", token)


if __name__ == '__main__':
    seldom.main(debug=True, base_url="https://httpbin.org")

在用例层调用AuthAPIObject类下面的对象,测试API。

  • AOM 原则

首先,API只允许通过的APIObject进行封装,那么在封装之前可以检索一下是否有封装了,如果有,进一步确认是否满足自己的调用需求,我们一般在测试API的时候一般各种参数验证,当API作为依赖接口调用的时候,一般参数比较少且固定,所以,API在封装的时候要兼顾到这两种情况。

其次,用例层只能通过APIObject的封装调用API,像登录token这种大部分API会用到的信息,可以通过类初始化时传入,后续调用类下面方法的时候就不需要关心的。如果是多个API组成一个场景,也可以再进行一层业务层的封装。