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 的学习曲线很陡峭,并且不会随着实验室的发展而趋于平稳。即使是小型实验室也涉及额外的硬件、基础设施和管理任务。

  1. 不要急于进行 LAVA 设置。
  2. 从小处着手
  3. 仔细考虑您要测试的内容
  4. 学习如何通过小型实验室用标准测试作业来调试 LAVA 。
  5. 投资额外的硬件 - 可能你桌上的设备并不是自动化的最佳候选。
  6. 在考虑真实设备之前,先使用模拟设备进行测试。
    • 集成一个全新的设备类型可能是 LAVA 中最复杂的事情。对于集成当前不支持的方法或引导加载程序的设备,可能需要几个月的时间
  1. 从添加已知设备开始,包括购买一些 LAVA 已经支持的低成本设备。

 

posted @ 2023-02-26 13:25  叶帅566  阅读(1124)  评论(0)    收藏  举报