本次分享,只是基于分享一些思路相关的。
很久以前,半开源了一个Ui自动化测试平台,当时考虑到执行的方便呢,就拆成了服务端和pc端,服务端配置任务,pc端去请求任务下载即可执行对应的任务,然后汇总测试报告和性能测试数据。这时候一切都是基于配置化来操作的,即每次执行都要重新run,需要配置的东西太多,也不方便,近期优化呢,就着重对这里进行了优化,支持了monkey,UI遍历,Ui自动化三种不同的功能。
目的:基于后台下发,执行不同的任务,动态获取可执行参数,支持不同类型的任务。
思考问题:后台下发的任务可以分为哪些类型?可以下来的case类型有哪些?如何通知Agent执行不同类型的任务,不同的case,任务的状态如何更新?测试数据如何上传,性能数据如何上传?多机如何并行?多任务如何有序下发执行?
方案:
任务类型:普通任务和定时任务
case类型:monkey,UI遍历,UI自动化
如何通知Agent执行不同类型的任务:考虑用消息队列。
任务的状态如何更新:redis队列下发
测试数据上传:测试报告通过上传文件
性能数据上传:实时上传
多机器如何并行:采用多进程方式
多任务如何有序执行:本地获取任务后,采用队列方式,也可以用redis的队列来控制。
这是我对于这些的思考,在实际开发中,考虑到包要保持最新,测试我们想要测试的版本的包,在创建任务的时候,在平台执行普通任务和创建定时任务的时候,我们都需要上传apk到服务器,这样做的目的,其实很简单。我们每次执行任务都取任务关联的apk进行安装。
在前后端通信,选择了接口或者redis消息队列的方式来实现。目前考虑用redis来实现就满足了现在的需求。所以在之前的基础上,对现有的框架进行了改造。满足了涉及的需求。
如何在服务端来实现redis队列消息监听的在启动项目就启动呢?
在项目的url配置一个线程去启动实现队列消息的监听。
代码语言:javascript复制t = threading.Thread(
target=RedisTaskOpear) # 一般把此代码放在 apps.py ready方法中 在django启动时自动启动 也可以放在 url 等其他地方,这样无论uwsgi开启多少个进程,都会有订阅者
t.daemon = True # 设置为守护线程 因为django 在启动时会执行检查代码和启动程序,当主进程杀死时,该线程结束
t.start()
定时任务使用了apscheduler来完成定时任务。简单的代码如下
代码语言:javascript复制from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore
scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(),"default")
如何启动呢,在URL配置如下
代码语言:javascript复制try:
scheduler.start()
except Exception as e:
scheduler.shutdown()
这样就完成了定时任务配置,接下来就是在实际的代码中的开发了。
代码语言:javascript复制scheduler.add_job(send, 'cron', day_of_week=str(task.taskstart).split(" ")[0],
hour=str(task.taskstart).split(" ")[1], minute=str(task.taskstart).split(" ")[2],
args=(task.prject.name, task.casetype, task.id,task.apkfilepath,
"task",task.tesevent.name,task.name),
id=str(task.id))
添加任务我们采用了cron表达式,在创建的任务的时候,配置后,都是可以直接选择时间来执行的。
大致的代码就演示到这里,平台端已经开源到了github,地址
代码语言:javascript复制https://github.com/liwanlei/UFATestPlan
目前客户端暂时没有开源,提供了付费购买的方式。
项目后续还会持续迭代开发,增加更多的东西。
后续计划方向:
代码语言:javascript复制1.安装弹窗处理
2.启动后权限的处理
3.UI界面的diff
4.相似度等断言的引入
5.UIcase支持不同的类型的应用
6.支持不同的键盘事件的执行,系统事件的执行
7.全部配置平台配置化,通用配置 项目个性化配置
8.日志分析处理能力。识别不同类型崩溃日志
9.功能覆盖率统计,UI遍历页面遍历情况分析
持续开发迭代,从1.0到2.0,到3.0 逐步引入更多的东西。