LAVA学习笔记 - (一)LAVA概述
What is LAVA?
- LAVA:全称 Linaro Automation and Validation Architecture。
- LAVA 是一个持续集成系统,用于将操作系统部署到物理或虚拟硬件上以运行测试。测试可以是简单的引导测试( boot testing)、引导加载测试(bootloader testing)和系统级测试(system level testing),但某些系统测试可能需要额外的硬件。测试结果可被跟踪,数据也可以导出以进一步分析。
- LAVA 是不断发展的架构集合中的一部分组件。 LAVA 旨在使各种规模的项目更易于进行系统、自动和手动的质量控制。
- LAVA 是为开发过程中的验证而设计的 - 对工程师正在开发的代码是否“有效”进行测试,例如:
- 测试Linux内核的变化是否可以编译和启动
- 测试由gcc产生的代码是否更小或更快
- 测试内核调度器的改变是否降低了某一工作负载的耗电量
- 其他
- LAVA 非常适合自动验证。 LAVA 每天都会在一系列支持的板子上测试 Linux 内核。 LAVA在gerrit合入Android修改之前进行测试,对其他项目也是如此,比如gcc。 Linaro 在剑桥经营着一个中央验证实验室,里面装满了 Linaro 成员提供的计算机和控制它们的必要基础设施(服务器、串行控制台服务器、网络交换机等)。
- LAVA善于为开发者提供在各种不同类型的硬件上运行定制测试的能力,其中一些硬件可能难以获得或集成。尽管LAVA支持仿真(基于QEMU),但LAVA最擅长为真实硬件设备提供测试支持。
- LAVA 的主要目的是测试开发人员在多个硬件平台上所做的更改,以帮助可移植性并鼓励多平台开发。已经独立于平台或已针对生产进行优化的系统可能不一定能够在 LAVA 中进行测试,或者可能没有整体收益。
What is LAVA not?
- LAVA不是一套测试 - 它是让用户能够运行自己的测试的基础设施。LAVA专注于提供一系列的部署方法和一系列的启动方法。登录之后,将执行由测试者选择在该环境中执行的任何脚本。
- LAVA不是一个测试实验室 - 它是可以在测试实验室中用于控制测试设备的软件。
- LAVA不是一个完整的CI系统 - 它是可以构成CI loop的一部分的软件。LAVA支持数据提取,以便更轻松地生成与特定开发人员直接相关的前端。
- LAVA不是构建农场 - 需要使用其他工具来准备二进制文件,这些二进制可以通过LAVA传递到设备上。
- LAVA不是硬件的生产测试环境 - LAVA 主要针对开发人员,可能需要对设备或软件进行修改,以实现自动化。这些改变往往不适合生产单位。LAVA还期望大多数设备仍可用于重复测试,而不是用一套不断变化的硬件来测试软件。
Features
- 自动验证 - 为自动化流程而设计,用于创建、提交和处理测试作业(test jobs)的结果,以验证开发过程。
- 并行调度 - 多个测试作业同时在多个设备上运行。
- 多节点(MultiNode )测试作业 - 测试作业可以作为一个组(group),分发到多个设备上进行运行。
- 硬件共享 - 不同的硬件可以在不同的组之间共享,以最大限度地提高使用率。
- 广泛的设备覆盖 - 可以支持大量的设备类型,实例范围从 1 到 100 多个可用于测试作业的设备。
- 可定制化数据输出 - 使用自定义接口转换数据,使验证输出与特定团队直接相关。
- 隐私支持 - 测试作业或设备类型可以对选定的小组、个人或团队保密。
- 实时结果报告 - 如果一个测试任务失败了,则保留失败点之前的所有结果。
- UNIX和Android测试支持 - 测试工作可以在各种UNIX风格的系统上运行,或使用ADB(Android Debug Bridge)与移动设备对接。
- 复杂的网络测试 - 可以使用多种网络接口跨多个设备重新配置网络。
Architecture

一个 LAVA 实例(instance)由两个主要组件组成 - 一个server和一个worker。最简单的配置是在单台机器上运行 master 和 worker 组件,但也可以配置更大的实例来支持多个 worker 控制更多的连接设备。
Elements of the Master
- Web interface - 这是使用Apache Web服务器,uWSGI应用服务器和Django Web框架构建的。它还提供XML-RPC访问和REST API。
- Database - 这是在master上本地使用的PostgreSQL,没有外部访问。
- Scheduler - 这是触发作业运行的部分 - 定期扫描数据库以检查排队的测试作业和可用的测试设备,在需要的资源可用时启动作业。
- lava-server-gunicorn daemon - 使用HTTP与worker(s)进行通信。
Elements of the Worker
- lava-worker daemon - 接收来自server的控制消息。
- Dispatcher - 根据master发送的作业和设备参数,管理被测设备上的所有操作。
- Device Under Test (DUT)
Note
尽管 Dispatcher 直接与 DUT 交互,但所有设备配置都是从服务器发送的。
Preparation
LAVA 的学习曲线很陡峭,并且不会随着实验室的发展而趋于平稳。即使是小型实验室也涉及额外的硬件、基础设施和管理任务。
- 不要急于进行 LAVA 设置。
- 从小处着手。
- 仔细考虑您要测试的内容。
- 学习如何通过小型实验室用标准测试作业来调试 LAVA 。
- 投资额外的硬件 - 可能你桌上的设备并不是自动化的最佳候选。
- 在考虑真实设备之前,先使用模拟设备进行测试。
- 集成一个全新的设备类型可能是 LAVA 中最复杂的事情。对于集成当前不支持的方法或引导加载程序的设备,可能需要几个月的时间。
- 从添加已知设备开始,包括购买一些 LAVA 已经支持的低成本设备。

浙公网安备 33010602011771号