事件起因:
- 业务:最近有一批APP需要进行持续的兼容性测试,估计要疯!
- 我:兼容性测试要求高吗?
- 业务:暂时不高,安装、运行、随便点点没问题就行。
- 我:那搞个兼容自动化测试服务吧,刚好你们有个内部系统,对接就行。
- 业务:来、来、来,咱们细聊。
分析需求:
需求:
- 最好一次性能够测几台手机。
- 异常情况需要分类:无法安装,启动失败,兼容失败。
思路:
- 基础框架:flask+uiautomator2.0+logging
- 搞个队列:任务下发后排队处理。只管调,反正我每次只能测一个。
- 主动回调:不用做状态管理,搞好了通知你!
- 证据保存:日志+截图,用来定位问题
基础框架:
- 准备数据:
app = Flask(__name__) # 定义flask
testQueue = Queue(maxsize=0) # 定义任务迭代
log = Logger().getlog() # 定义公共日志模块,见历史文章
- 循环迭代,做任务:
def runNum():
"""
单独线程持续运行队列中的任务,间隔10秒
:return:
"""
while True:
if testQueue.empty():
pass
else:
data = testQueue.get()
oldApp = data["oldApp"]
callBackUrl = data["callBackUrl"]
log.info("运行任务队列:{}".format(str(callBackUrl)))
apptest1.run(oldApp, callBackUrl).runCase() # 运行任务(APP下载地址、回调地址)
log.info("完成任务队列:{}".format(str(callBackUrl)))
testQueue.task_done()
time.sleep(10)
- 准备新增任务接口:
@app.route("/runCase", methods=['POST'])
def runCase():
data = json.loads(request.get_data(as_text=True))["cases"]
for case in data:
testQueue.put(case)
log.info("新增任务队列:{}".format(str(case["callBackUrl"])))
return jsonify(msgs())
- 做个主入口:
if __name__ == '__main__':
t = threading.Thread(target=runNum)
t.start()
host = socket.gethostbyname(socket.getfqdn(socket.gethostname()))
port = '8080'
app.run(host=host, port=port, debug=False, threaded=True)
基础服务框架就好了,后面需要开始具体对runCase()的实现。