前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Appium+django+redis+mysql实现UI自动化测试平台

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

作者头像
雷子
发布2022-09-29 20:02:13
6510
发布2022-09-29 20:02:13
举报
文章被收录于专栏:雷子说测试开发

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档