物联网(IoT)是新兴技术,是对传统Internet的扩展,它使所有带有射频识别(RFID),传感器或GPS等功能的物体相互连通。
物联网相对传统互联网更像是一种架构,它由各种硬件和软件组件紧密耦合而成的,不仅是软件,硬件、传感器、通信网关等也起着至关重要的作用。只有功能测试是不足以完成验证系统,在环境、数据传输等方面总是相互依赖的,因此与通用软件系统的测试相比,物联网应用的测试就显得更为复杂尤其从以下角度
-
测试人员需要对物联网设备及应用程序的每一个功能、数据显示、数据处理、消息通知、警告信息等等各方面进行彻底的测试。
-
技术链路冗长,要进行彻底的物联网测试特别是自动化测试需要对大量的服务和中间件进行掌握和适配
-
系统需要确保其具有足够的可伸缩性,保证整个物联网平台的性能和可靠性,所以测试也会对整个物联网链路进行拆分进行极限施压测试以评估系统的薄弱点
-
对于很多物联网服务产品需要进行第三方认证测试所以服务的暴露和服务的集成要求之高也是区别于传统互联网的地方
本文将从以下5个方面介绍G7基础平台通用自动化框架
-
第一部分:IoT中台用例及模板
-
第二部分:IoT中台用例覆盖链路和自动化框架
-
第三部分:数据验证思路和案例
-
第四部分:测试数据结构化+关键字封装
-
第五部分:框架线程分组和数据隔离
第一章:IoT中台用例及模板
作为一个业界比较成熟的IoT中台,G7 IoT中台覆盖了网关接入、事件计算、API提供三大核心业务,由于链路长、测试过程不透明,所以用例也是根据部分链路灵活组织的,其组织维度可以大概分解为下表
一个典型的IoT用例设计如下
包含1个输入点和3个验证点,验证点覆盖2个消息队列Topic和数据库数据验证
下图为IoT完整的用例的一个模板:
第二章:IoT中台用例覆盖链路和自动化框架
用例需要覆盖的整个链路如下
整个链路覆盖了 设备-负载均衡-网关-消息队列-实时计算-离线计算-数据库操作-计算结果API查询,在自动化框架需要支持的点可以从以下几个维度进行描述
-
网关侧:需要支持协议解析和应答
-
事件侧:需要支持大批量数据导入和验证
-
API侧:需要支持API网关和单节点各种API链路覆盖
-
全链路侧:需要对整体链路进行抽象并提供自动化相应API
经过2年的开发和演进G7IoT中台自动化框架全图如下
整个IoT自动化框架大概特性总结如下
-
-
自动化触发
-
支持测试平台、Jenkins、ant、Maven触发自动化
-
-
自动化流程配置
-
支持自定义变量配置、CI配置、用例范围配置、自定义报告配置、邮件配置
-
-
工具类
-
封装了消息队列工具类、关键字封装工具类、测试结果对比工具类、Nosql工具类等
-
-
用例管理和控制
-
用例等级: 1冒烟 2主分支 3次分支
用例筛选: 按需定制和执行
-
-
自定义测试报告
-
通过集成TestNG内置接口IReporter, ISuiteListener自定义报告格式,原理类似Servlet处理Html标签
在整个自动化过程中,对于几个关键突破和优秀实践我们也进行了总结,具体如下
-
批量数据验证思路
-
测试数据结构化+关键字封装
-
框架的线程分组和数据隔离
第三章:数据验证思路和案例
用例属于典型事件计算用例,具备以下特征
-
存在多份数据:包括期望数据(验证数据) 和实际消费数据(被验证数据),且数据规模不是很大
-
每份数据之间是1…n条数据,所以是典型的多条数据验证
-
多份数据之间的操作其实类似于数学中集合的操作在主流编程语言中都提供了类似的库
-
在自动化框架工具类我们整合了Kafka消费和以上操作为测试提供公共方法
第四章:测试数据结构化+关键字封装
与RF不同,TestNG并没有提供用例书写的界面也没有提供一些驱动关键字,所以需要自己去实现
基于界面自动化我们提供了协议接入和API验证模板,接口自动化模板如下
关键字封装我们解决的思路是通过字符串找方法也就是Java中常用的反射,将所有用户自定义关键字方法封装于一个反射Factory,通过invoker对其进行调用
协议接入自动化模板如下
在定义好模板之后根据TestNG提供的@DataProvider(name= “**”)数据加载机制集成数据访问代码加载测试用例
第五章:框架线程分组和数据隔离
TestNG 提供test,class,method级别的并发,可以通过在testng.xml中的suite tag下设置,如:
<suite name=“TestngParallel Test” parallel=“tests/classes/methods(三选一)” thread-count=”5″>
tests级别: 用例根据test tag只能在同一个线程中执行。
classes级别: 用例根据class tag只能在同一个线程中执行。
methods级别: 所有用例(标注了@Test的方法)都可以在不同的线程去执行。
tests和class的线程隔离比较好理解就是把一个或多个测试class加入线程池队列并执行的过程, methods的线程隔离方法是通过命令模式(Command Method)提升测试方法为测试类(线程池接收维度为类)并传入线程池进而控制,命令模式使用还是比较广泛比如SpringCloud的hystrix也是将标记了@Request的方法进行升维进而放入线程池中进行限流的。
Iot自动化测试用例线程分组策略
结束语
IoT自动化测试方案在G7全链路测试中起到了重要作用,已完成IoT主流程业务覆盖率80%以上,并持续进行每日构建发送质量报告。实现了版本发布既要快,同时要求质量高的双要求。主要优势有以下3点:
-
接入测试用例快:1分钟就可以完成一个自动化case,让你写测试用例的时候就可以同步完成自动化编写。
-
覆盖技术组件广:支撑IoT全链路覆盖所有技术组件,如模拟报文发送、消息中间件、MySQL、Elasticsearch等
-
接入成本低:封装了底层关键字,代码能力低的同学也能快速的接入。
基础公共测试平台宗旨:旨意为各业务方持续提高质量交付,高效率的测试工具平台
、
未经允许不得转载:大自然的搬运工 » 自动化测试解决方案讲解