设备跟主控以及平台之间怎么通信的,多设备怎么管理的,用例执行前初始化怎么做的,用例执行完测试报告怎么出的,定时任务怎么做的,这些怎么回答,可能还会问其他的问题,但我目前想不到,你也可以补充一些问题)这两个问题结合一下,说明一下各个问题这个框架是如何处理的,市面上常用的框架比如Jenkins、pytest、allure又是怎么处理的,做个对比,并且给出细节要求
- 设备与主控、平台之间的通信
本项目实现
通信方式:设备端(ControlSystem)与主控平台(Dashboard)通过HTTP API进行数据交互(如任务拉取、结果上报),通过WebSocket实现实时消息推送(如任务进度、状态变更)。
数据流:设备定时向平台拉取任务,执行后将结果、日志、截图等通过API上传,平台负责存储和展示。
市面主流方案
Jenkins:通常通过Jenkins的API或插件触发测试任务,结果回传Jenkins并展示在Web界面。
pytest:本身不负责通信,但可通过插件(如pytest-xdist)实现分布式执行,或与CI工具结合。
allure:不负责通信,专注于本地收集和展示测试报告。
细节要求
通信协议要稳定、可扩展,支持断点续传和异常重试。
数据格式建议统一(如JSON),便于平台解析和后续扩展。 - 多设备管理
本项目实现
设备实例化:每台设备对应一个LocalDevice对象,独立管理。
Appium服务:每台设备分配独立Appium Server进程和端口,互不干扰。
动态管理:设备连接/断开自动注册和清理,支持多设备并发执行。
市面主流方案
Jenkins:可通过节点(agent)管理多台测试机,分布式执行任务。
pytest:配合pytest-xdist等插件实现多进程/多机并发。
allure:不涉及设备管理,仅负责报告。
细节要求
设备状态要实时监控,异常自动重连或报警。
端口分配要避免冲突,进程隔离防止互相影响。 - 用例执行前的初始化
本项目实现
自动初始化:用例执行前自动唤醒设备、解锁、清理环境、启动Appium、登录等。
前置钩子:通过before_case等回调统一管理初始化流程。
市面主流方案
pytest:通过fixture机制实现用例前置/后置操作,灵活可复用。
Jenkins:可在流水线中配置前置脚本(如环境准备、依赖安装)。
allure:可通过step装饰器记录初始化步骤。
细节要求
初始化流程要可配置、可扩展,支持不同用例/设备差异化处理。
初始化失败要有详细日志,便于排查。 - 用例执行完后的测试报告
本项目实现
数据收集:执行完毕后自动收集截图、日志、性能数据等。
结果上传:通过API上传到平台,平台Web端自动生成和展示测试报告。
报告内容:包括用例通过/失败、错误信息、截图、日志等。
市面主流方案
pytest:支持junitxml、html等多种报告格式,便于集成。
allure:与pytest等集成后,自动生成美观的HTML报告,支持趋势分析、历史对比、步骤还原。
Jenkins:可归档测试报告,集成allure/HTML/JUnit等插件展示。
细节要求
报告要结构清晰、内容丰富,支持失败重跑和历史对比。
支持报告导出和分享,便于团队协作。 - 定时任务
本项目实现
平台端:通过Django的management/commands机制实现定时任务(如定时分发任务、设备健康检查)。
设备端:定时线程拉取任务、同步状态。
市面主流方案
Jenkins:内置定时任务(cron),可定时触发构建和测试。
pytest/allure:本身不负责定时任务,通常由CI工具(如Jenkins)调度。
细节要求
定时任务要有日志和报警机制,异常时能自动恢复或通知。
支持灵活配置任务周期和内容。 - 其他常见面试问题补充
如何保证用例的可维护性和复用性?
本项目:用例模块化,公共操作封装,支持参数化。
pytest:fixture、参数化、插件机制。
如何处理设备异常和用例失败?
本项目:自动重连、失败截图、详细日志。
pytest/allure:失败自动收集trace、截图,报告中高亮显示。
如何与CI/CD集成?
本项目:可通过命令行触发主控脚本,易于Jenkins等集成。
Jenkins:流水线自动拉取代码、执行测试、收集报告。 - 面试答题建议
先说“我们项目是怎么做的”,再补充“市面主流工具怎么做”,最后说“如果要集成,可以怎么迁移/优化”。
强调你对主流工具的理解和落地能力,即使项目没用过,也能说出集成思路。
细节上突出“自动化、可扩展、可维护、易集成、异常处理、报告丰富”等关键词。