alzander / bluetooth-fct
基于CLI的功能测试套件,使用Nordic Master Control Panel Android应用程序。
Requires
- php: ^5.5.10 || ^7.0
- nesbot/carbon: ^1.21
- oneup/flysystem-bundle: ^1.3
- sabre/xml: ^1.4
- webmozart/console: ~1.0@beta
Requires (Dev)
- phpunit/phpunit: 4.0.*
This package is not auto-updated.
Last update: 2024-09-14 19:04:07 UTC
README
一个用于创建蓝牙测试套件的PHP开发环境。这对于连接到设备以验证其蓝牙服务设置以及通过自动化的蓝牙测试与设备交互来测试设备本身非常有用。
要求
此软件依赖于在Android上运行的(很棒的)NordicSemiconductor Master Control Panel工具。
- Android手机上的Nordic MCP工具
- ADB(Android调试命令行工具)
- PHP 5.5+
起源
我们正在开发Nuzzle宠物追踪项圈。我们需要一种快速、准确的方法来在开发和工厂设置中测试设备上的每个传感器。而不是将电线连接到设备(在调试期间很容易,在工厂中则更麻烦),我们希望通过特殊的蓝牙服务发送数据。这个自动套件可以自动连接到设备,读取或写入特征值并验证响应。
目标
我们有一份我们希望在套件中实现的需求列表
已完成
- 设备定义和测试定义的分离
- 易于创建自动化测试文件
- 自定义输出验证(读取特征值并根据您选择的条件决定是否“通过”,而不仅仅是精确匹配)
- 操作系统无关 - 测试可以在Windows、Mac、Linux上运行。
- 易于操作员测试 - 几乎不需要培训。只需运行测试即可获得通过/失败结果
待办事项
- 黄金与DUT测试 - 从黄金单元读取值并与DUT比较
- 交互式提示 - 向特征值写入并提示用户是否通过(例如打开LED)
- 根据验证类型拆分测试 - 目前,所有测试都是顺序执行的,通过或失败。希望能够根据失败或需要用户输入来拆分测试。
需要Nordic MCP更新以实现
- 自动蓝牙扫描和连接。希望能够指定一个蓝牙设备“名称”(甚至更详细的信息,如广告配置文件)并扫描报告该名称的任何地址。然后,根据标准连接(最强的RSSI,从未连接过等)
安装
Composer - 将其添加到您的项目
在您的项目中运行以下Composer命令
composer require alzander/bluetooth-fct:dev-master
创建测试目录/结构
- 将 /vendor/alzander/bluetooth-fct/bin/bluetooth-fct 文件(或整个目录)复制到您将创建测试套件的目录
- 编辑 bluetooth-fct 文件并更新自动加载路径以指向您的 /vendor/autoload.php 文件
- 创建您的测试,如下所示。
运行测试
bluetooth-fct php脚本启动并运行测试。它期望以下子目录结构:/fct /fct/devices - 设备定义文件 /fct/suites - 在设备上运行的测试套件 /fct/validtor - 任何自定义验证器文件 /fct/xmls - 从套件文件生成的XML测试文件 /fct/results - 最近执行测试的结果
注意:有关每个文件的最新格式,请参阅 /bin/fct 目录中的示例
设备文件
设备文件以JSON格式创建,定义设备应遵守的蓝牙配置文件。此文件中没有任何测试细节。
{
"name": "Example Board",
"CCCD_UUID": "12345678-0000-1000-8000-00805f9b34fb",
"timeouts": {
"connect": 5000,
"discover_services": 10000,
"bond": 10000
},
"services":
[
{
"id": "temperature",
"name": "Temperature Sensor",
"UUID": "deadbeef-1212-efde-1523-785fef13d123",
"characteristics":
[
{
"id": "value",
"UUID": "deadbeef-1212-efde-1234-785fef13d123",
"properties": {
"notify": "mandatory",
"read": "mandatory",
"write": "mandatory",
"write_without_response": "mandatory",
"signed_write": "mandatory" }
}
]
},
{
...
}
]
}
测试文件
测试文件指定要连接的目标设备和应在每个设备上执行的测试。
{
"description": "Read the temperature characteristic",
"targets": [
{
"id": "DUT1",
"device": "example_device",
"address": "E8:A2:E4:A5:25:20"
},
{
"id": "DUT2",
"device": "example_device",
"address": "CC:BB:CC:DD:EE:FF"
}
],
"tests": [
{
"description": "Read temperature",
"target": "DUT1",
"command": "characteristic.read",
"service": "temperature",
"characteristic": "value",
"validation": {
"type": "temperature",
"min": "30",
"max": "35"
}
},
{
...
}
]
}
输出测试文件
这是可以直接输入到MCP test.bat文件或直接运行(并与蓝牙-fct可执行文件验证)的相同格式
<?xml version="1.0"?>
<test-suite>
<target id="DUT1" name="Collar-Board" address="E8:A2:E4:A5:25:20"/>
<target id="DUT2" name="Collar-Board" address="CC:BB:CC:DD:EE:FF"/>
<test target="DUT1" id="test_1">
<connect timeout="5000"/>
<refresh/>
<sleep timeout="5000"/>
<discover-services target="DUT1" timeout="10000"/>
<read description="Read temp sensor" service-uuid="0000abcd-1212-efde-1523-785fef13d123" characteristic-uuid="0000beef-1212-efde-1523-785fef13d123">
<assert-value description="AUTOMATED_TEST_1: " expected="SUCCESS_WARNING_ON_FAIL" value="AUTOTEST_TEST_1_FILLER"/>
</read>
</test>
<run-test ref="test_1"/>
</test-suite>
命令
为定义在/fct/suites/test_name.json中的测试生成测试XML文件
bluetooth-fct generateXMLs test_name
生成XML文件并运行相同的测试套件
bluetooth-fct run test_name
示例输出
当执行'run'命令时,以下是一个示例输出
Generating XML test scripts from read_temp
Running tests
List of devices attached
123456 device
Starting test 1
Removing old results file...
Uploading new test file...
Starting test service...
Waiting for test results...
Processed temp: 32C / 89.6F <-- This is from our custom validator
Pass - Read temperature. Value = 48
Test Summary:
Total Tests: 3
Tests Passed: 3
Tests Failed: 0
+---+------------------+--------+--------+
| | Name | Result | Output |
+---+------------------+--------+--------+
| 1 | Read temperature | Pass | |
| 2 | Read temperature | Pass | |
| 3 | Read temperature | Pass | |
+---+------------------+--------+--------+
ALL TESTS PASSED!
问题和功能请求
这个FCT测试器是专门为Nuzzle开发的。报告的任何错误/问题都可能被修复。
对于目前我们的测试不是必需的功能请求可能不会考虑。我们有一个使命和目标。
如果你开发了新的功能或修复,我们将乐意评估任何拉取请求!