用于刷新、重置和监督启用mbed的设备的测试执行的mbed工具
mbed-host-tests的Python项目详细描述
开发已移动
htrun的开发已经转移到了mbed os tools包中。出于传统原因,您可以继续使用此模块,但所有进一步的开发都应在新软件包中继续进行。
htrun(mbed主机测试)
htrun
有大量的命令行。在大多数情况下,htrun(或其命令行avatarmbedhtrun
)将在后台运行:
- 驾驶测试二进制闪烁,
- 设备重置和
- 测试执行。
默认的二进制刷新方法受启用MBED的设备支持:二进制文件复制到启用MBED的DUT(正在测试的设备)安装驱动器(MSD)上。此过程将使用给定的二进制文件内容自动刷新设备。
默认的DUT重置方法受启用MBED的设备:串行端口(CDC)"sendbreak"命令重置启用MBED平台上的目标MCU支持。
测试执行阶段包括:
- 打开主机和被测设备之间的连接,
- DUT将向主机发送带有测试运行器信息的前导码,如:
- 测试环境版本,
- 测试超时,
- 首选主机测试脚本(用于监督/检测测试执行的python脚本),
- 主机将生成主机测试脚本,测试执行将被检测
- 在主机和被测设备之间交换数据(大多数情况下为文本),
命令行概述
本章将介绍如何使用mbedhtrun
命令行执行测试的几个示例。在大多数情况下,测试自动化工具,如greentea将隐式执行mbedhtrun
。有时我们希望独立执行mbedhtrun
。大多数情况下,当我们想:
- 调试代码并启用二进制+主机测试工具,
- 原型或
- 只想用与支持MBED的设备兼容的操作系统替换另一个操作系统中的测试运行程序。
所有需要闪现的二进制文件名和闪现方法!
有用的命令行端到端示例
闪蒸阶段操作
flash binary file/path/to/file/binary.bin使用装入点
d:
。使用串行端口com4
与被测设备通信:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4
flash(使用shell命令copy
)二进制文件/path/to/file/binary.bin
使用装入点d:
。使用串行端口com4
与被测设备通信:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 -c copy
跳过闪烁阶段(例如,您已经用/path/to/file/binary.bin
binary刷新了此设备)。使用串行端口com4
与被测设备通信:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --skip-flashing
DUT主机通信和复位阶段
flash binary file/path/to/file/binary.bin使用装入点
d:
。使用串行端口com4
和波特率115200
与被测设备通信:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4:115200
如上所述,但我们将跳过重置阶段(不常见,但在某些情况下,由于某些原因可用于抑制重置阶段):
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4:115200 --skip-reset
flash binary file/path/to/file/binary.bin使用装入点
d:
。使用具有默认波特率的串行端口com4
与DUT通信。之前不要向DUT发送\u sync
键值协议同步数据包序言如下:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --sync=0
注意:同步数据包管理允许您操作将数据包发送到DUT的方式。使用当前设置,我们可以强制htrun
以这种方式发送\u sync
数据包:
--sync=0
-不会向DUT发送同步数据包。--sync=-1
-\u sync
数据包将被发送,除非我们达到超时或DUT发送正确的响应。--sync=n
-其中n是整数>;0。向目标平台发送最多n个同步数据包。除非我们从目标平台获得响应或发生超时,否则将发送响应。
全局资源管理器连接
flash local file/path/to/file/binary.bin
到远程设备资源(平台k64f
),由remote_client
GRM服务提供,IP地址10.2.203.31
和端口:8000
。强制串行端口连接到远程设备9600
波特率:
$ mbedhtrun -p :9600 -f /path/to/file/binary.bin -m K64F --grm remote_client:10.2.203.31:8000
命令行开关--grm
的格式为:<;模块名>;:<;IP地址>;:<;端口号>;
<;module\u name>;
-要作为远程资源管理器加载的python模块的名称。<;IP地址>;
和<;端口号>;
-远程资源管理器的IP地址和端口。
注意:switch-m<;platform_name>;需要告诉全局资源管理部门要请求哪个平台。
注意:命令行开关--grm
隐式强制--跳过闪烁
和--跳过重置
,因为这两个标志都用于本地可用的DUT。
快速模型连接
此选项专为htrun设计,以使用arm fast型号。
"--fm"选项仅在安装了mbed fastmodel agent模块时可用:
将本地文件/path/to/file/binary.elf
加载到fastmodel fvp_mps2_m3模拟器:
$ mbedhtrun -f /path/to/file/binary.elf -m FVP_MPS2_M3 --fm DEFAULT
命令行开关格式
<;配置名称>;
-mbedfm中的ether预定义配置名称或fast模型的本地配置文件。
注意:switch-m<;platform_name>;需要告诉此fastmodel连接要请求哪个fastmodel。
注意:命令行开关--fm
隐式强制--跳过闪烁
和--跳过重置
,因为这两个标志都用于本地可用的DUT。
其他
列出可用的主机测试名称、类名和来源:
$ mbedhtrun --list
列出可用的主机测试名称、类名和源。从/path/to/host_tests加载其他主机测试
目录:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4
0
列出可用的重置和闪烁插件:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4
1
flash binary file/path/to/file/binary.bin
使用pluginstlink
。使用串行端口com4
和波特率115200
与被测设备通信:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4
2
安装
htrun
与源代码一起重新分发,因为与python 2.7兼容的模块名为mbed host tests
和命令行工具名为mbedhtrun
从pypi安装(python包索引)
mbed主机测试
模块通过pypi重新分发。我们建议您使用应用程序pip
注意:Python2.7.9以后的版本默认包含pip
,因此您可能已经有了pip
。
注意:mbed主机测试
模块是用mbed greenttea
模块作为依赖项重新分发的。因此,如果您已经安装了greenteambed主机测试,那么哎呀!
若要从pypi安装mbed ls,请使用命令:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4
3
从python源安装
要安装MBED测试套件,请首先克隆MBED OS工具库:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4
4
将目录更改为mbed os tools/packages/mbed host tests
目录:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4
5
现在您可以安装htrun了
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4
6
检查安装
要检查安装是否成功,请尝试运行mbedgt--help
命令并检查它是否返回信息(您可能需要首先重新启动终端):
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4
7
MBED主机测试
MBED的测试套件(代号greentea
)支持测试主管的概念。这个概念是通过这个模块实现的。mbed主机测试
是主机测试的集合。主机测试是用python编写的脚本,它与测试套件运行程序(在被测目标硬件/设备上运行的二进制文件)并行执行,以监视测试执行的进度或控制测试流(与被测mbed设备的交互)。宿主测试还负责获取测试结果,或从测试运行者的行为中推断结果。
开发了密钥值协议,用于提供被测设备与主机之间的通信层。密钥值协议将主机定义为主机,将DUT定义为从机。
- 从端API和键值协议实现封装在greentea client模块中。
- 主端api和键值协议封装在
mbed主机测试中
mbed主机测试
职责是:
- 具有给定二进制文件的闪存MBED设备。
- 闪烁后重置MBED设备以开始执行测试套件。
- 使用键值协议与设备握手,并确保执行正确的主机测试脚本以监督测试套件的执行。
- 运行密钥值协议状态机并执行事件回调。
- 监视串行端口通信以分析有效的密钥值协议事件。
- 决定测试套件是否通过/失败/返回错误。
- 提供命令行工具界面,命令:
mbedhtrun
模块安装后(主机上)。 - 提供一些基本的主机测试实现,这些实现可以用于测试开发的开箱即用。例如,基本主机测试(称为
default
或default_auto
)只分析来自dut的事件,并在接收到end
事件时完成主机测试执行。本模块中包含的其他主机测试可以帮助您测试计时器或RTC。
密钥值协议概述
- 基于文本的协议,格式
{{{key;value}}
- 主从模式,其中主机为主,DUT从。
设计草图
- 介绍了简单密钥值协议。它用于被测设备和主机之间的通信。协议主要功能:
- 引入的协议是主从协议,主从是主机,从是被测设备。
- 传输层由slave(dut)发送的简单文本消息组成。键和值都是具有允许的字符集限制的字符串(以简化解析和协议解析器本身)。消息以dut k-v parser所需的字符结束
- DUT始终(握手阶段除外)通过向主机发送键值消息来初始化通信。
- 为了避免主从机之间的错误通信,引入了简单的握手协议:
- 主机发送同步包:
{{{uuid-string}}
消息值包含随机uuid字符串。 - DUT等待<在输入流中输入{{uu sync;..}消息,并用相同的打包程序回复{{{uu sync;..}
- 主服务器接收到正确的同步数据包后,将需要消息
{{{uu timeout;%d}
和{{{uu host}test{u name}
。 - 主机解析DUTS发送流并生成发送到主机测试的事件。
- 每个事件都是
(key,value,timestamp)
的元组,其中key和value是从消息和 中提取的
- 主机发送同步包:
- 主机测试现在由简单的异步特性驱动。主端的事件状态机用于处理来自DUT的事件。每个主机测试都能够注册回调函数,这些函数将在事件发生时执行。事件名称与作为事件从/发送到DUT的密钥-值对中的密钥相同。
- dut从端使用简单的解析器解析流中的键值对。将忽略所有非键值数据。提供了阻塞等待事件api:这意味着dut和主机之间使用主从交换,其中dut使用非阻塞发送事件api发送到主机(主)事件并可以等待响应。master在接收到事件并处理数据后实现相应的响应。
- 消息分析按以下顺序将键值字符串消息转换为python事件:
{{key;value}
在DUT输出上捕获的字符串。
- 键值数据变成一条可识别的消息,其中包含键(字符串)和值(字符串)有效负载。
- 事件在主机测试中形成,由
键
(字符串)、值
(字符串)、时间戳
组成的元组,其中时间戳
是python中消息接收的时间time.time()格式(float,从纪元开始以秒为单位的时间,作为浮点数。)。
- 消息分析按以下顺序将键值字符串消息转换为python事件:
- 每个主机测试都会为可用事件注册回调。
- 密钥值消息传递协议中很少有密钥的名称被提升为"系统事件"。事件循环机制使用它们的名称在dut、主机和各种内部组件之间进行通信。请不要在自己的私人活动中使用受限制的偶数名称。另外:
- 用户无法注册对"系统事件"的回调,只有少数例外。
- 保留的事件/消息键在名称中有前导
\u
:\u sync
-同步消息,由主设备和被测设备用来握手。\u通知同步失败
-当未从DUT接收到同步响应时由主机发送。{u timeout
-在接收到{{sync;uuid}
之后,由dut发送的超时(秒)。\u版本
-绿茶客户端
从DUT发送到主机的版本。\u主机测试名称
-主机测试名称,由DUT在接收到{{sync;uuid}
后发送。\u notify\u prn
-由主机测试发送以打印日志消息。\u notify\u conn\u lost
-由主机测试的连接过程发送以通知串行端口连接丢失。\u通知完成
-由DUT发送,关于测试用例结果的异步通知(真、假、无)。\u覆盖范围开始
-由DUT发送,覆盖范围数据。\u测试用例启动
-由DUT发送,测试用例启动数据。\u测试用例完成
-由DUT发送,测试用例结果。\u退出
-由DUT发送,测试套件执行完成。\u退出事件队列
-由主机测试发送,表示不再需要事件。
- 非保留事件/消息键的名称中有前导
\uu
:u rxd_line
-在DUT rxd通道上发现\n
时触发的事件。它可以被重写(self.register_callback(''uu rxd_line',<;callback_function>;)
)并由用户使用。主机测试发送事件以通知在RXD通道上接收到新的文本行。\uu rxd\u行
事件通过RXD从DUT接收的一行文本中的有效载荷(值)。
- 每个主机测试(主端)有四个异步框架使用的函数:
setup()
用于初始化主机测试和注册回调。result()
用于在未调用notify_complete()
时返回测试用例结果。teardown()
用于完成和释放资源。可以保证teardown()
总是在超时或异步测试完成后调用。notify_complete(result:bool)
主机测试用来通知测试用例结果。此结果将在测试套件超时
s后或在DUT发送\u退出
消息(测试套件执行完成事件)后读取。self.发送千伏(键:字符串,值:字符串)
-向被测设备发送键值信息。self.log(文本:字符串)
-发送事件\u notify\u prn
并将文本作为负载(值)。您的信息将在日志中打印。
- 从主机测试返回的结果是测试套件结果。测试用例结果由dut报告,通常使用修改的utest框架。
Greentea客户端API
dut测试api首先在mbedmicro/mbed
项目中引入。在重构之后,这个功能被复制并在greentea client模块中得到改进。
- 从端键值协议API,请参见此处了解详细信息。
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4
8
函数用于向master发送键字符串或键整数值消息。这个函数应该用负载/控制数据来代替典型的printf()调用。
- 阻塞等待输入流中的键值对消息:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4
9
此函数应替换用于检查来自主机的传入消息的scanf()
。
函数分析输入,如果发现键值消息,则加载到键值对。使用"输出键大小"和"输出值大小"定义输出缓冲区的最大大小(包括尾随的零)。
密钥值传输协议序列
密钥值协议有几个部分:
- 握手-同步主设备和从设备。
- 前导交换-dut通知主机有关测试参数,如客户端版本、测试套件超时、请求的主机测试名称等。此部分完成后,主机将创建请求的主机测试并将回调附加到用户事件。
- 事件交换-从机和主机之间的键值事件交换。在这种交换中,一般从机(dut)将初始化通信。此部分可以以事件的结束对结束,其中
end
事件携带由dut返回的测试套件结果,并且\u exit
事件标记测试套件结束和退出。接收到事件后,DUT和主机测试之间将不再通信。
握手
dut和主机之间的hanshake是主机(主)和dut(从)之间发送的一系列同步事件。这是目前唯一的情况下,主启动通信第一。握手应提供同步点,主会话和从会话在该点启动。
复位后:
- DUT调用函数
greentea_setup(timeout,"host test name");
which - 立即调用
greentea\u parse千伏
(阻止分析事件的输入串行端口{code>{{{uu sync;uuid})。理> - 当
\u sync
数据包在流中被解析时,dut发送回(回显)\u sync
事件,并将其作为有效负载。uuid是一个随机值,例如5f8dbbd2-199a-449c-b286-343a57da7a37
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 -c copy
0
来自htrun
log:
DUT代码:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 -c copy
1
相应日志:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 -c copy
2
前导码交换
这个阶段是在握手阶段之后。DUT将测试参数(如客户端版本、超时、请求的主机测试名称等)通知主机。此部分完成后,主机将创建请求的主机测试并将回调附加到用户事件。
此阶段结束时,主机将接收到\u host\u test\u name
。接收到\u主机测试名称
事件后
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 -c copy
3
来自htrun
log:
- DUT代码:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 -c copy
4
- 对应日志:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 -c copy
5
事件交换
在此阶段,dut和主机交换事件,主机端调用注册到dut发送的每个事件的回调。DUT可以使用函数greentea_parse_kv
来解析下一个传入键值事件的输入流。
在接收到\u host\u test\u name
事件之后以及在此阶段中使用任何事件之前:
- 主机状态机按有效负载中提供的名称加载主机测试对象
- 主机状态机加载用户在主机测试设置阶段注册的回调,并将其挂接到事件机。 现在主机已经准备好处理测试套件测试执行。从这一刻起,从dut发送的每个事件都将由用户在主机测试设置中注册的相应回调来处理。将不处理未知事件,并在日志中打印警告。
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 -c copy
6
- 在dut send
\u exit
之后或超时之后,保证将调用host testteardown()
函数。此呼叫被阻塞,请确保您的拆卸功能完成。
DUT-主机测试用例工作流
DUT实现
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 -c copy
7
相应主机测试示例
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 -c copy
8
log
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 -c copy
9
主机测试示例
退出后返回结果
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --skip-flashing
0
相应日志:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --skip-flashing
1
编写DUT测试套件(从机侧)
带单个测试用例的DUT测试套件
我们可以使用很少的方法来构造测试套件和测试用例。最简单的方法是使用greentea client
api并将一个测试用例封装在测试套件中。当您希望:
- 在测试套件中只编写一个测试用例,
- 制作示例应用程序(示例作为测试)或
- 当您的测试套件调用blocking forever函数时。例如,在forever循环中运行的所有类型的udp/tcp服务器都属于此类。在这种情况下,我们根本不期望dut的退出事件,而主机测试的设计应该确保它总是返回结果。
DUT始终完成执行
在本例中,dut code使用greentea client
同步(greentea_setup
)并将结果(greentea_testsuite_result
)传递到greentea
。这是关于如何编写测试的非常简单的示例。注意,在这个例子中,测试套件只实现了一个测试用例。实际上,测试套件同时也是测试用例。传递到greentea\u testsuite\u result的结果将同时是测试用例结果。
- DUT实现:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --skip-flashing
2
DUT测试套件从未完成执行
测试套件的实现使其永远不会退出/完成其执行。例如main()
或app_start()
函数是使用无限(无限)循环实现的。此属性具有例如udp/tcp服务器(永远监听)、各种回声服务器等。
在本例中,dut code使用greentea client
与greentea
同步(greentea_setup
)。我们不会在任何时候调用greentea\u testsuite\u result(result)
。在本例中,主机测试负责使用self.notify\u complete()
api或self.result()
函数提供测试套件结果。
您需要编写并指定自定义主机测试的名称:
- DUT端使用
greenteau设置的第二个参数(超时,主机名)
函数:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --skip-flashing
3
您需要将自定义主机测试放在
<;module>;/test/host_tests
目录中。- 不要忘记相应地命名主机测试。请参见下面的示例主机测试
名称
类成员。
- 不要忘记相应地命名主机测试。请参见下面的示例主机测试
使用"我的主机"测试的DUT实现自定义主机测试:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --skip-flashing
4
- 主机测试模板示例:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --skip-flashing
5
带utest
线束的DUT测试套件
utest
harness允许您在测试套件中定义多个测试用例。此功能由greentea
测试工具支持。
- DUT实现:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --skip-flashing
6
编写主机测试(主机端)
为模块编写新的主机测试时,请记住:
- 您拥有主机测试,您应该以这样的方式编写它,以便它可以与其他进程(如持续集成系统或其他主机用户)运行的同一主机测试共存。
- 注意:如果您在隔离环境中工作,并且测试环境完全由您控制(例如,您将调用主机测试的所有任务排队,或使用全局主机唯一套接字端口号),则此规则不适用于您。
- 当使用操作系统资源(如套接字、文件、串行端口、外围设备,如万用表/示波器)编写主机测试时。记住,这些资源是不可分割的!
- 例如,如果在主机测试udp端口32123中硬编码并将其用于主机测试的udp服务器实现,请记住此端口可能已被使用。您有责任对此事件作出反应,并采取措施(如果可能)克服它。
回调
您可以在setup()
阶段中注册回调,或者使用@event\u callback
decorator装饰回调函数。
setup()方法中的回调注册
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --skip-flashing
7
在使用decorator注册的同一回调下面:
回调装饰器定义
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --skip-flashing
8
分析从DUT接收的文本(逐行)
主机测试示例需要运行时错误…callbacknode…
dut输出中的字符串。
我们将使用allowed来覆盖\uuurxd\u行
事件以挂接到dut rxd频道的文本行。
绿茶v0.2.0之前
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --skip-flashing
9
使用RDX行事件
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4:115200
0
htrun
新日志格式:
[时间戳][源][级别]
-新的日志格式,其中:
时间戳
-由python的time.time()返回
源
-日志源。
conn
-连接过程(连接源的池,例如串行端口),seri
-带标准读、写、刷新接口的串行端口包装器,htst
-主机测试对象,hosttestbase派生对象,plgn
-宿主测试插件,键入插件的baseplugin
,复制
-宿主测试插件,键入插件的复制方法
,rest
-宿主测试插件,键入插件的resetMethod,
级别
-日志级别:
inf
(信息),wrn
(警告),错误
(错误)。txd
(主机的发送通道,到DUT)。rxd
(主机的接收通道,来自DUT)。
日志示例
[1455218713.87][conn][rxd]{{{uu sync;a7ace3a2-4025-4950-b9fc-a3671103387a}
:- 从
conn
(连接过程)登录。 rxd
发射的信道{{{uu sync;a7ace3a2-4025-4950-b9fc-a3671103387a}
- 时间戳:
2016-02-11 19:53:27
,请参见下文:
插件
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4 --skip-flashing
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4:115200
htrun
新日志格式:[时间戳][源][级别]
-新的日志格式,其中:
时间戳
-由python的time.time()返回
,源
-日志源。conn
-连接过程(连接源的池,例如串行端口),seri
-带标准读、写、刷新接口的串行端口包装器,htst
-主机测试对象,hosttestbase派生对象,plgn
-宿主测试插件,键入插件的baseplugin
复制
-宿主测试插件,键入插件的复制方法
,rest
-宿主测试插件,键入插件的resetMethod,
级别
-日志级别:
inf
(信息),wrn
(警告),错误
(错误)。txd
(主机的发送通道,到DUT)。rxd
(主机的接收通道,来自DUT)。
[1455218713.87][conn][rxd]{{{uu sync;a7ace3a2-4025-4950-b9fc-a3671103387a}
:conn
(连接过程)登录。rxd
发射的信道{{{uu sync;a7ace3a2-4025-4950-b9fc-a3671103387a}
2016-02-11 19:53:27
,请参见下文:为了使用硬件仍在开发中的平台,因此可能没有mbed接口芯片,需要一些"hook"文件。使用这些平台的操作是相关平台开发团队的事情,一般来说,ARM不支持这些平台。
Sara Nbiot EVK
Sara Nbiot EVK板必须使用Segger JLink Box连接到Windows PC,用于下载代码和重置板。EVK上的USB端口也必须连接到同一台PC。要使用这些挂钩,您还需要访问一些可以从U-blox请求的专用工具。
测试MBED操作系统示例
mbed os示例实际上是作为启发性代码编写的示例应用程序,供开发人员理解mbed os api和编码范式。在每个mbed os发布之前,所有示例都要在所有受支持的配置和平台上进行测试。已经有大量的例子可用,随着它们的增长,自动化它们是很重要的。因此,自动化示例是有意义的。尽管重要的是不要用类似测试的仪器污染它们。因为这会破坏示例简单而具体的目的。
因此,测试示例的策略是基于观察而不是交互。示例的串行日志记录被捕获并转换为模板日志。此示例的所有连续执行都应与此日志匹配。
模板化日志只是指一个不改变文本或正则表达式替换原始文本的日志。下面是模板化日志的示例:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4:115200
1
请注意,上面所有包含从执行到执行(右侧)更改的数据的行都已被删除。这使得htrun可以比较这些日志。htrun逐个匹配比较日志(左侧)中的行。它一直在寻找一条线,直到它匹配为止。一旦匹配,它将继续匹配下一行。如果它在目标串行输出流中找到比较日志中的所有行。然后停止并传递示例。
另一个带有常规示例的示例如下所示:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4:115200
2
要捕获日志,请使用以下选项:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4:115200
3
选项--串行输出文件
以文件名为参数,将目标串行输出写入文件。编辑该文件以删除在连续执行中更改的行。如果需要的话,可以在上面的日志中的基准号这样的位置放置正则表达式。通过这些编辑,您将得到一个可供比较的模板。
使用以下命令测试示例和比较日志:
$ mbedhtrun -f /path/to/file/binary.bin -d D: -p COM4:115200
4
如果应用程序需要更多时间来处理数据和生成结果,则可以使用选项--polling timeout
覆盖默认超时设置。
测试的比较日志可以与示例一起检入github,并可用于ci示例验证。