Appium 服务器运行时会产生很多日志,但是很多人并不了解其中的意义,也无法掌握有用的信息。本文将详细解读如何读懂 Appium 日志,并让你的测试效率翻倍。
在普通的接口自动化测试中,如果接口的参数,比如 url,headers等传参改变,或者测试用例的逻辑、断言改变,那么整个测试代码都需要改变。apiobject设计模式借鉴了pageobject的设计模式,可以实现一个优雅、强大的接口测试框架。
apiobject设计模式可以简单分为6个模块,分别是API对象、接口测试框架、配置模块、数据封装、Utils、测试用例。
- 接口测试框架:base_api,完成对api的驱动
-
- API对象:继承base_api后,完成对接口的封装
-
- 配置模块:完成配置文件的读取
-
- 数据封装:数据构造与测试用例的数据封装
-
- Utils:其他功能封装,改进原生框架不足
-
- 测试用例:调用Page/API对象实现业务并断言
- 枯燥的讲述概念可能难以理解,后面的章节都会围绕这些模块进行理论的拆解和实例的演示。
在这里将会结合企业微信的部门管理,获取部门列表接口作为一个接口测试用例,从没有封装到使用apiobject设计模式进行封装改造。将实战与理论结合,更深入理解apiobject设计模式。
企业微信服务端API:https://work.weixin.qq.com/api/doc/90000/90135/90664。不加任何封装和改造的企业微信,获取部门列表接口测试用例
import requests
class TestDemo:
def test_get_token(self):
r = requests.get(url="https://qyapi.weixin.qq.com/cgi-bin/gettoken",
params={"corpid": "ww93348658d7c66ef4", "corpsecret": "T0TFrXmGYel167lnkzEydsjl6bcDDeXVmkUnEYugKIw"})
return r.json()["access_token"]
def test_department_list(self):
r = requests.get(url="https://qyapi.weixin.qq.com/cgi-bin/department/list",
params={"access_token": self.test_get_token(), "id": 1})
assert r.json()["errcode"] == 0
return print(r.json())
- api
-
- base_api.py是用来封装所有api的通用方法,比如打印log、对断言工具做二次封装等,不牵涉和业务相关的操作
-
- wework.py继承base_api并实现基本业务,之后所有的具体的业务资源继承自wework,比如token的获取等;
-
- department继承自wework,用来实现对应模块具体的业务逻辑,比如发送请求,请求内有什么参数等等。
-
- testcases文件夹内统一存放所有的测试用例,调用API对象实现业务并断言
-
- utils文件夹内存放对其他功能封装,改进原生框架不足
-
- data文件夹数据构造与测试用例的数据封装此外,还有配置模块与数据封装会在后面的章节进行具体的介绍
https://ceshiren.com/uploads/default/original/3X/4/f/4f048d64cff9b605ae45769134d0c2ccf56506fd.png)
- data文件夹数据构造与测试用例的数据封装此外,还有配置模块与数据封装会在后面的章节进行具体的介绍
utils.py,在此文件中封装一个jsonpath方法。
import json
from jsonpath import jsonpath
class Utils:
@classmethod
def jsonpath(cls, json_object, expr):
return jsonpath(json_object, expr)