基于Appium+django+redis+mysql实现UI自动化测试平台

2022-09-29 20:02:13 浏览数 (1)


本次分享,只是基于分享一些思路相关的。

很久以前,半开源了一个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 逐步引入更多的东西。

0 人点赞