通用SDK的自动化测试平台的研究和实践
2022-07-26黄玲玲黄娜娜陆斌
◆黄玲玲 黄娜娜 陆斌
通用SDK的自动化测试平台的研究和实践
◆黄玲玲 黄娜娜 陆斌
(卫士通信息产业股份有限公司 四川 610000)
本文提出以Jenkins持续集成技术为核心[1],采用ApiRestAssured接口测试框架[2],以一套测试代码和测试用例完成对C、JAVA语言形态的接口覆盖,形成一套可用于通用SDK产品的集产品编译、打包和部署、静态代码走查、代码覆盖率检查、接口功能测试、性能测试、测试结果显示过程自动化测试平台的研究和实践。
SDK;Jenkins;跨平台;自动化测试
随着密码泛在化的提出,各类安全应用类产品层出不穷,为满足多种安全应用产品对安全密码功能各种要求,帮助企业能够安全、高效、快捷地引入密码能力,提高产品安全水平,以SDK为产品形态的通用密码中间件应运而生,旨在为移动终端、PC终端和服务器端的各类安全应用产品提供统一的密码运算、身份鉴别、加密签名、完整性校验等密码服务,同时屏蔽低层不同密码设备的差异。为了适应中间件SDK的高质量、高频率的持续发布,对采用的测试策略要求、测试脚本可维护性和复用率,以及测试用例的可读性和扩展性均有较高要求。本文针对此要求,对多种前沿测试技术进行研究、改造和开发,实施构建一套以Devops为基础、Jenkins持续集成为核心,关键词驱动的快速高效自动化测试平台,以满足一套测试代码和测试用力完成对C和JAVA语言形态的接口覆盖测试,同时满足跨平台要求,支持Windows、centos、各类国产化环境。
1 平台介绍
本文在分析传统测试理论和现有测试工具优缺点基础上,结合通用密码中间件SDK多平台、多接口形态的特点和测试平台需求分析结果,设计了一个以Devops为基础,Jenkins持续集成为核心,设计支持跨平台、支持多接口形态、关键词驱动、扩展性较强的自动化统一测试平台[3]。
1.1 测试框架运行流程
统一测试平台框架如图1所示。
图1 统一测试平台框架
测试平台框架分为三大部分1)测试资源管理,该部分负责要分发和部署的用例数据、测试脚本以及依赖的第三方框架资源和第三方组件等;2)测试流程,既涵盖测试平台所有的测试项,如功能测试、性能测试、稳定性测试,又包括静态代码检查、代码覆盖率检测、编译打包和部署等一系列专项测试;3)测试报告管理,有Jenkins从多个维度收集测试流程中产生的数据,以图形化的方式进行分析和显示。
1.2 测试资源管理
框架的选取:
基于RestAssured框架思路,结合通用密码中间件应用编程接口特点,对RestAssured进行重构和开发,采用Java语言完成对C API、Java API的统一调度,形成ApiRestAssured自动化测试框架。该框架采用了关键词驱动思路,满足不同测试对象(密码设备)的不同功能要求,对用例和设备进行组合,对数据与脚本进行了分离,数据使用了Excel用例文件、配置文件等多种方式实现[2]。
数据处理:
1)数据类型转换
框架中使用JNA工具类实现C语言接口到native function的映射,所及到的数据类型转换如下表:
表1 数据类型转换表
C-typeJAVA-type char*byte[] unsigned char *byte[] void*pointer void**PointerByReference Int*IntByReference Unsigned int*IntByReference UNLONGIntByReference int/shortint long/unsigned longInt/long
2)用例数据处理
用例数据处理包含对Excel文件及工作表的读取,工作表标志位的处理,用例数据处理及数据类型文件处理等。
根据项目实际需求,本文从处理用例数据开始,从两个维度对测试数据进行划分:一是用例数据的优先级;二是用例数据适配的密码设备。这样的优势是根据项目的开发状态和项目适配的测试环境,可选择性调用恰当的测试用例数据。
1.1.3测试流程
测试平台基于Devops流水线的方式执行,涵盖了敏捷测试各个环节,包括静态代码检查、编译/打包/发布、部署、功能/性能/稳定性测试、代码覆盖率检测、以及测试数据收集和分析,每一项可以作为Jenkins任务的一个步骤[5]。
静态代码检查:
采用开源SonarQube代码质量管理平台,主要覆盖C语言、Java语言和JavaScript脚本语言,从Sonar自有的七个维度检测被测产品的代码质量。初步检测和衡量代码潜在缺陷、编码规范、复杂度和重复率等方面的质量,从而评估产品的可测性。
产品编译发布:
编译发布是迭代中最为频繁的、持续性的动作。在静态代码合规性检测通过后进行,受产品形态的影响较大,为解决这种差异性,本文采用批处理/Shell脚本的方式,屏蔽不同产品不同版本编译方式,如Windows采用Visual Studio工程方式命令行编译、Linux采用Makefile方式编译等。
为考虑后续代码覆盖率检测的需要,检测工具在编译源码中进行打桩处理,生成的接口库比预期的库大一些。但这类库仅作为检测使用。
部署:
针对环境的多样性,形成了DeplymentàEnvàDeplyment Strategy,由环境属性选择部署策略。不同的部署策略,产品部署方式方法就不同。这种方式极大降低了部署代价。
测试执行:
测试执行是整个测试平台的核心部件,其解决的差异性问题主要有:
1)不同测试项执行的方式也不同
表2罗列了测试平台主要担负的测试项:
表2 统一测试平台测试项分析表
序号测试项分析 1功能测试使用ApiRestAssured框架 2性能测试使用JMeter工具,Performance Plugin Jenkins插件 3稳定性测试使用JMeter工具,Performance Plugin Jenkins插件
以上均通过框架工具开发针对产品的定制工具。其中,功能测试采取了Maven方式驱动测试、性能和稳定性采用JMeter命令行方式。
2)资源监控
性能和稳定性测试过程中对于资源的监控和结果记录非常重要,测试平台采用了InfiuxDB+Prometheus+Grafana监控系统实现对测试结果、测试资源使用情况的可视化展示及数据收集。
代码覆盖率检测:
代码覆盖率受环境、开发语言的依赖性较强,目前测试平台主要覆盖了Windows、Linux两种系统环境,采取的代码覆盖率检测方式、手段也不尽相同.
1.4 测试报告管理
为使用敏捷开发,评估缺陷修复情况,测试平台采用Allure报告管理方式,主要解决了:
1)使用Allure显示数据处理,具有全量统计和增量统计两种模式;
2)以增量的方式,在Allure页面形成趋势化图标;
3)按模块和整体通过率展示测试结果,同时展示了成功、失败、中断三种执行状态的用例。
2 总结与展望
本文根据通用密码中间件SDK的开发测试模式设计与实现了一套统一测试平台,已广泛投入到该项目的持续迭代开发和测试过程中,已完成C和JAVA语言共计600多个接口持续集成测试,已兼容测试的环境包括Windows、centos、各类国产化操作系统等10多款环境。可保持每日发布及完成一轮回归测试的频率。此平台为通用密码中间SDK的快速迭代发布做出了重要的贡献。
目前该测试平台正在对接移动端SDK自动化测试,已完成技术对接探究,待移动端SDK自动化测试的全移植。随着容器技术的发展,SDK被更多的微服务(Docker部署)集成使用,为了更加贴近业务系统的使用场景,后续可以探究测试平台支持Docker容器技术的自动化测试。
[1]郝树伟,于振苓,熊熠. J.F.Smart Jenkins权威指南[M]. 北京:电子工业出版社,2016:1-9.
[2]https://github.com/rest-assured/rest-assured.
[3]徐呅之. 基于云的接口自动化测试平台的设计与实现[D].上海交通大学,2015:15-16.
[4]古红锋. IPSec VPN产品测试平台设计与实现[D].电子科技大学,2018.
[5]赵杰昌,张良宇. 基于Jenkins构建持续集成系统[J]. 电脑编程技巧与维护,2014(09):9-10.