前言

目前APP同硬件模块通信的方式主要有几种模式:蓝牙连接模式、WiFi 连接模式(Socket 或 HTTP server)、DLNA 音视频共享 (iOS端还可使用AirPlay)。最近小编项目中测试了APP与外设通过蓝牙方式实现硬件连接的功能,对相关的开发实现和测试方法进行一些整理,在此分享给大家。

蓝牙基础知识

  1. iOS平台下蓝牙开发可以使用 MFI(ExternalAccessory 框架) 或 BLE (CoreBluetooth 框架) 进行,但实际开发中基本都使用 CoreBluetooth 框架,因为它功能更强大,支持蓝牙4.0标准。

  2. 蓝牙4.0 BLE (Bluetooth low energy) :它的优点在于传输快,耗电低,但传输数据有限,虽然这个传输字节大小硬件工程师可调,但也不会太大。

  3. CoreBluetooth框架的核心是peripheral和 central, 可以理解成外设和中心,发起连接的是central,被连接的设备为 peripheral,它们是一组相对概念。比如,当手机去连接控制蓝牙耳机时,你的手机就是central,当手机蓝牙被另一个手机连接并为其提供服务时就是peripheral。

  4. Service和Characteristic:蓝牙设备通过GATT协议定义的数据通讯方式。一个 peripheral可以提供多种 服务Service,一种Service 又可以包含多个不同的 特征Characteristic。特征就是具体键值对,提供数据的地方。每个特征属性分为读、写、通知等几种方式。

  5. central通过peripheral 的 Characteristic 来读写外设的数据,和获取通知。Peripheral广播自己的Service和characteristic,Central订阅某一个具体的characteristic,Peripheral就和Central之间通过characteristic建立了一个双向的数据通道

  6. 外设peripheral、服务Service、特征characteristic之间的关系:

  7. UUID:蓝牙上的唯一标示符,为了区分不同服务和特征,就用UUID来表示。

蓝牙的两种工作模式

  1. 中心模式

  2. 建立中心

  3. 扫描外设(discover)

  4. 连接外设(connect) 连接失败、连接断开、连接成功

  5. 扫描外设中的服务和特征(discover)

  • 4.1 获取外设的 services

  • 4.2 获取外设的 Characteristics,获取Characteristics的值,获 Characteristics的 Descriptor 和Descriptor 的值

  1. 与外设做数据交互(explore and interact)

  2. 订阅 Characteristic 的通知

  3. 断开连接(disconnect)

2.外设模式

  1. 启动一个 Peripheral 管理对象

  2. 本地 Peripheral 设置服务,特性,描述,权限等等

  3. Peripheral 发送广播

  4. 设置处理订阅、取消订阅、读 characteristic、写 characteristic 的委托方法

3.蓝牙设备的工作状态

  1. 准备(standby)

  2. 广播(advertising)

  3. 监听扫描(Scanning

  4. 发起连接(Initiating)

  5. 已连接(Connected)

蓝牙连接的开发实现

    这里以手机端作为central,以蓝牙设备作为peripheral,蓝牙设备连接的开发实现主要包括以下步骤:
  1. 导入苹果系统蓝牙框架

#import

  1. 遵循两个蓝牙框架相关的协议

<cbcentralmanagerdelegate,cbperipheraldelegate></cbcentralmanagerdelegate,cbperipheraldelegate>

  1. 新建两个实例属性,一个特征属性

@property (nonatomic, strong) CBCentralManager*centralManager; //中心管理者

@property (nonatomic, strong) CBPeripheral *peripheral; //连接到的外设

@property (nonatomic, strong) CBCharacteristic*characteristic; //特征

  1. 初始化CBCentralManager,进行蓝牙管理
  • (void)viewDidLoad {

     [superviewDidLoad];self.centralManager= [[CBCentralManager alloc] initWithDelegate:selfqueue:dispatch_get_main_queue()];     //创建实例进行蓝牙管理
    

}

//若中心管理者初始化之后就会触发下面这个代理方法。该代理方法是用来判断手机蓝牙的状态的

-(void)centralManagerDidUpdateState:(CBCentralManager *)central {

   //蓝牙可用,开始扫描外设if(central.state == CBManagerStatePoweredOn) {NSLog(@"蓝牙可用");//在中心管理者成功开启之后再进行一些操作//搜索扫描外设//根据SERVICE_UUID来扫描外设,如果不设置SERVICE_UUID,则扫描所有蓝牙设备//[self.centralManagerstartAdvertising:@{CBAdvertisementDataServiceUUIDsKey:@[[CBUUIDUUIDWithString:SERVICE_UUID]]}];[centralscanForPeripheralsWithServices:nil options:nil];}if(central.state== CBManagerStateUnsupported) {NSLog(@"该设备不支持蓝牙");}if(central.state == CBManagerStatePoweredOff) {NSLog(@"蓝牙已关闭");}if(central.state == CBManagerStateUnknown) {NSLog(@"蓝牙当前状态不明确");}if(central.state == CBManagerStateUnauthorized) {NSLog(@"蓝牙未被授权");}

}

  1. 搜索外围设备

//执行扫描动作之后,如果扫描到外设了,就会自动回调下面的协议方法

/** 发现符合要求的外设,回调 */

  • (void)centralManager:(CBCentralManager*)central didDiscoverPeripheral:(CBPeripheral )peripheraladvertisementData:(NSDictionary)advertisementDataRSSI:(NSNumber *)RSSI {

     NSLog(@"%@====",peripheral.name);//根据外设名字有选择性的筛选连接蓝牙设备if([peripheral.name hasPrefix:@"TEAMOSA"]) {//在这里对外设携带的广播数据进行进一步的处理if([self.peripheraNames containsObject:peripheral.name]) {//如果数组中包含了就不再添加return;}//添加到外设名字数组中[self.peripheraNamesaddObject:peripheral.name];//标记外设,让它的生命周期与控制器的一致self.peripheral= peripheral;//可以根据外设名字来过滤外设//[central connectPeripheral:peripheral options:nil];}//连接外设//[central connectPeripheral:peripheral options:nil];
    

}

  1. 连接外围设备

//连接外围设备,中心管理者连接外设成功,如果连接成功就会回调这个协议方法

/** 连接成功 */­­­

  • (void)centralManager:(CBCentralManager*)central didConnectPeripheral:(CBPeripheral *)peripheral{

     //连接成功之后,可以进行服务和特性的发现。停止中心管理设备的扫描动作,要不然在你和已经连接好的外设进行数据沟通时,如果又有一个外设进行广播且符合你的连接条件,那么你的iOS设备也会去连接这个设备(因为iOS BLE4.0是支持一对多连接的),导致数据的混乱。//停止扫描动作[self.centralManagerstopScan];//设置外设的代理peripheral.delegate= self;//根据UUID来寻找服务//[peripheral discoverServices:@[[CBUUID UUIDWithString:SERVICE_UUID]]];//外设发现服务,传nil代表不过滤,一次性读出外设的所有服务[peripheraldiscoverServices:nil];NSLog(@"%s,line = %d, %@=连接成功", __FUNCTION__, __LINE__,peripheral.name);
    

}

//外设连接失败

/** 连接失败的回调 */

  • (void)centralManager:(CBCentralManager*)central didFailToConnectPeripheral:(CBPeripheral )peripheral error:(NSError)error {

NSLog(@"%s,line = %d, %@=连接失败", FUNCTION, LINE,peripheral.name);

}

//丢失连接 掉线

/** 断开连接 */

  • (void)centralManager:(CBCentralManager*)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(nullableNSError *)error {

NSLog(@"%s,line = %d, %@=断开连接", FUNCTION, LINE,peripheral.name);

//断开连接可以设置重新连接

[centralconnectPeripheral:peripheral options:nil];

}

以上,已经实现了APP端连接蓝牙设备的功能,蓝牙设备连接完成后,还可以对设备进行数据读写,包括:获取外围设备服务和特征;从外围设备读取数据;向外围设备发送(写入)数据等操作。这里暂不具体展开。

APP链接蓝牙设备的测试关注点

介绍了蓝牙的基础知识、APP连接蓝牙设备的开发实现,接下来将介绍APP连接蓝牙设备这一过程测试中需要关注的测试点(由于每种蓝牙设备连接需求不同,开发实现上也会有细小差别,实际测试中可视具体开发逻辑进行调整):

  1. APP扫描设备

①手机端蓝牙不同设置下是否能正常扫描:蓝牙打开、蓝牙关闭;

②蓝牙设备被扫描到并出现在可连接设备列表的条件:蓝牙设备名称与可连接的设备列表中的名称匹配、设备处于广播状态;

蓝牙设备与可连接的设备列表中名称是否匹配:匹配、不匹配;

蓝牙设备状态(视具体硬件而定):待机状态、广播状态、已连接状态、蓝牙设备操作中、数据传输中、关机状态;

测试以上各种组合场景下,蓝牙设备是否能正常扫描且出现在可连接设备列表;

③不同场景下,是否正常扫描:

一个手机同时扫描多个设备;

多个手机同时扫描同一个设备;

多个手机同时扫描多个设备;

④扫描过程中取消;

⑤扫描结果:扫描超时;未扫描到可连接设备,是否支持重试;扫描失败;扫描成功;

  1. 连接设备(APP端点击可连接设备列表,连接蓝牙设备)

①测试蓝牙设备状态变化后,不同状态下是否可正常连接:待机状态、广播状态、已连接状态、蓝牙设备操作中、数据传输中、关机状态;

②连接结果的处理:连接成功、连接失败、连接超时等;

③连接成功后的操作:APP其他操作、连接中断、退到后台、杀掉APP等;

④其他场景:扫描到多个设备;

  1. 断开连接

①设备端断开:设备关机、设备电量耗尽;

②APP端断开:手动断开、其他操作断开连接;

  1. 其他交互操作

①切换其他蓝牙设备,是否正常连接;

②蓝牙断开后重新打开,支持自动连接;

③距离超出蓝牙可检测范围,是否会断开连接,再恢复到可检测范围,能否自动连接;

④手机端连接多个不同蓝牙设备,各个设备功能是否都正常使用;

  1. 连接成功后的数据传输

①功能上,APP端和蓝牙设备端是否符合正常使用需求;

②性能上,APP与蓝牙设备的交互是否满足需求;

(本文只讨论了蓝牙设备连接部分,具体数据传输部分的用例,大家可自行扩展)

最后我也整理了一些软件测试学习资料,对于学软件测试的小伙伴来说应该会很有帮助。有需要资料的朋友可以关注公众号:软件测试小dao,免费获取!包括,软件学习路线图,50多天的上课视频、16个突击实战项目,80余个软件测试用软件,37份测试文档,70个软件测试相关问题,40篇测试经验级文章,上千份测试真题分享,还有2021软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助……

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。

敲字不易,如果此文章对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

软件测试知识点 | APP蓝牙连接测试相关推荐

  1. 测试技术之APP蓝牙连接测试

    目前APP与硬件模块之间的通信有几种模式:蓝牙连接模式.WiFi连接模式(Socket或HTTP服务器).DLNA音视频共享(iOS上也可以使用AirPlay).最近在项目中,测试了APP通过蓝牙与外 ...

  2. 徕卡全站仪蓝牙android,App蓝牙连接莱卡系列全站仪Geocom

    TZ12.TS16.TS60.TS11.TS15.TS50.TM50.TPS1200.TS30.TM30 第一节 查看仪器是否开通Geocom 仪器需开通Geocom,不开通App无法控制仪器旋转.瞄 ...

  3. git clone 多个_软件测试知识点 | 测试过程常用的Git命令

    testkuaibao|软件测试自学公众号 点击上图进入软件测试面试题题库,面试题都是有相应的参考答案,希望对小伙伴们有所帮助 前言 目前,在版本控制系统中Git已经被广泛使用,并且很多技术团队也会逐 ...

  4. 软件测试知识点和面试题--app测试篇

    软件测试知识点和面试题--接口测试篇 软件测试知识点和面试题--性能测试篇 软件测试知识点和面试题--手工测试篇(功能测试) APP发布流程 内部发布平台蒲公英.Testlink等发布步骤1.开发打包 ...

  5. 小明分享|nRF52840 蓝牙模块连接测试

    一.可主从配对蓝牙模组 1.测试前准备 硬件准备 两台PC机.(2块)WT52840-S1模组,转接板,USB数据线 软件准备 蓝牙串口调试助手 2.测试 (1)将WT52840-S1模组分别通过转接 ...

  6. 记录app通过蓝牙连接小票打印机的坑

    试了好几台5.0以下版本的测试机,发现可正常通过蓝牙连接打印机,我就以为大功告成了,结果测试的时候,在锤子手机上一打开app就崩溃了... 报错信息: IllegalArgumentException ...

  7. android 蓝牙链接电脑,如何使从台式电脑到Android设备的测试蓝牙连接

    我正在使用具有蓝牙适配器的Ubuntu 11.10台式电脑和使用带有蓝牙的Android 2.2的Android平板电脑. (两款设备上的蓝牙版本应为2.0或2.1版本)如何使从台式电脑到Androi ...

  8. 软件测试培训分享:怎么测试一个APP

    软件测试听名字我们就能猜出来是干嘛的,没错,它是属于测试软件的一项工作,如今用户体验对很多企业来说是非常重要的,开 发一个自己的软件,前提一定要做好测试工作,那么怎么测试一个APP呢?我们来看看下面的 ...

  9. iOS蓝牙开发连接系统或其他APP已经连接、配对成功的蓝牙设备

    在蓝牙开发的时候,扫描外设的方法扫描到的设备只能是没有被连接的设备,也就是说如果有设备在本手机中已经连接配对成功了之后就不会被 [_centralManager scanForPeripheralsW ...

  10. uniapp APP实现通过蓝牙连接打印机打印

    蓝牙连接德佟打印机打印 1.导入插件: 在插件市场中搜索LPAPI,进入之后,点击右侧的"购买for云打包",选择目标项目,按照提示操作即可: 2. 配置插件: 用HBuilder ...

最新文章

  1. 客户端 localStorage, sessionStorage, cookie 的区别
  2. git pull request工作模式
  3. hdu4609 3-idiots
  4. 本周计划(4月12日-19日)
  5. flex与JavaScript的数据交互
  6. pclose与fclose的区别
  7. c#类的多态和文件流复习
  8. proxysql on github
  9. 关于2006年上半年网工试考一览
  10. 无线网络技术导论知识点
  11. 网银汇款提示服务器无响应,为什么我的网上银行支付页面总是未响应
  12. 互联网数据分析岗实习感受
  13. asa清空配置_思科ASA基本配置
  14. android两个app合并
  15. 微信运动步数一键98800,最新方法来袭!11.01号更新
  16. 计算机专业法语词汇,法语词汇学习:计算机及网络词汇(1)
  17. 如何用Python制作简单又好看的词云?来瞅瞅吧~
  18. 将一串数字转为大写人民币形式
  19. C语言动态申请内存空间之malloc(),calloc(),realloc()函数
  20. CSS制作大风车动画及花朵

热门文章

  1. (二十一)美萍酒店管理系统:系统维护_系统设置_房间类型_房间费打折
  2. 遥感影像转换成MapGIS识别的msi格式
  3. JUnit 单元测试多线程测试解决方法
  4. structs2本地(国际)化
  5. 互联网专用计算机屏保,5款屏保,让你的电脑在闲置时也与众不同。
  6. 使用vue开发的网页游戏
  7. 全国计算机考试一级在线模拟,全国计算机等级考试一级模拟试题和答案
  8. 打开MSDTC的方法(图解)
  9. SSL自签名证书制作方法
  10. excel如何批量查询手机号归属地