APP下载

一个基于数据共享的接口开发平台

2020-10-09谢业欣

软件 2020年8期
关键词:数据共享

摘  要: 在RESTful API(以下简称接口)开发的设计、编码、测试、维护工作现状中,接口文档工具、接口Mock工具、接口测试工具和接口自动化测试技术的使用,产生了工作重复、耗时、难度大、数据不易分析的问题。为保障产品质量的同时进一步提高工作效率,提出了一个基于数据共享的接口开发平台方案。通过共享接口设计过程中录入平台的数据,在接口编码、测试、维护工作过程中,充分复用接口数据,解决了工作重复问题。通过整合这些辅助工具和技术到同一个平台中,降低了工作难度,简化了工作流程。数据集中存储、管理,解决了数据分散、不利于项目分析的问题。实验结果表明,使用该平台后,工作效率提高了58.33%。在实际项目运行中,达到了预期效果,缩短了项目周期,节省了项目成本,增加了企业收益。

关键词: 软件项目管理;接口平台;质量保障与工作效率;接口Mock;接口测试;接口自动化测试;数据共享

中图分类号: TP311.56    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2020.08.041

本文著录格式:谢业欣. 一个基于数据共享的接口开发平台[J]. 软件,2020,41(08):152-157

【Abstract】: In the current status of design, coding, testing, and maintenance of RESTful API (hereinafter referred to as interface) development, the use of interface document tools, interface mock tools, interface test tools, and interface automation testing techniques has resulted in problems such as duplication of work, time-consuming, difficult, and difficult to analyze data. In order to ensure product quality and further improve work efficiency, an interface development platform scheme based on data sharing was proposed. By sharing the data entered in the platform during the interface design process, the interface data is fully reused during the process of interface coding, testing, and maintenance to solve the problem of duplication of work. By integrating these auxiliary tools and technologies into the same platform, the work difficulty is reduced and the work process is simplified. Centralized storage and management of data solves the problems of scattered data and difficult project analysis. The experimental results show that after using the platform, the work efficiency has increased by 58.33%. In the actual project operation, the expected results have been achieved, the project cycle has been shortened, project costs have been saved, and corporate profits have been increased.

【Key words】: Software project management; Interface platform; Quality assurance and work efficiency; Interface mock; Interface test; Interface automated testing; Data sharing

0  引言

互聯网发展到今天,人们对互联网应用软件的质量和体验要求越来越高,如何在保障软件质量和追求极致体验的同时,持续提高工作效率、降低成本、增加收益,不仅有助于企业在竞争对手中脱颖而出,还有助于企业在长远发展中持续占有主导地位。

为满足越来越多样化的终端应用软件开发, RESTful架构被广泛应用。2000年Roy Thomas Fielding的博士论文中首次提出REST。RESTful架构将网络上的实体作为资源并用URI(统一资源定位符)唯一标识,客户端和服务端之间传递这种资源的某种表现层(即某种数据格式),客户端使用HTTP协议的四个动词(GET、POST、PUT、DELETE)对服务端资源进行操作,实现资源的“表现层状态转换”[1]。

RESTful架构解耦前后端代码,使用RESTful API(以下简称接口)进行通信,只需要一套统一的服务接口,就可以同时为Web、IOS、Android等应用提供服务。代码结构清晰、标准统一、易于扩展,还可以使前后端并行开发,缩短了项目周期[2-5]。

软件的设计、编码、测试、维护,是软件开发的主要过程[6],接口是软件前后端通信的统一机制,在接口设计、编码、测试、维护的过程中,做好质量保障和提效工作,对于整个软件项目尤为重要。因此,在做好接口质量保障工作的同时,如何进一步提高工作效率,一直是各互联网公司不断探讨的主题。

1  接口开发过程中存在的问题

如图1所示,为接口开发过程中工作现状与存在的问题。

在接口设计过程中,前后端开发人员根据需求分析的结果,对接口进行设计,约定接口数据规则,并人为记录到接口文档工具中[2]。确保了接口开发过程的准确性,提高了跨团队合作的工作效率。但录入接口数据耗时、文档维护成本高。

接口编码过程中,接口Mock工具为客户端与服务端分别提供了符合接口数据规则的模拟数据,解耦服务端-客户端间的模块依赖,实现真正的前后端分離开发[7],减少了缺陷出现的可能性,提高了产品质量,缩短了项目周期[8]。但安装Mock工具,根据接口文档将接口数据录入到Mock工具中,这些前置工作非常耗时。

对新开发的接口进行测试不仅可以更早地发现一些核心问题,还可以缩小定位、分析问题的范围,有助于更快修复问题,进而提高了缺陷修复效率[9]。但安装工具,依照接口文档将接口请求数据录入到接口测试工具中[10-11],这些前置工作非常繁琐、耗时。

在快速增量迭代的工作实际中,要求在短时间内对大量处于维护过程中的接口进行回归测试。接口自动化测试,在很大程度上减轻测试人员的压力,大大提高了软件测试工作的效率[12-14]。同时,避免了人为操作带来的失误,一定程度上提高了测试的准确性。但根据接口文档将接口数据录入到自动化测试脚本中,并开发、调试脚本,不仅耗时,而且工作难度大、学习成本高。

在接口设计、编码、测试、维护过程中,接口文档、接口Mock、接口测试、接口自动化测试,都对产品质量保障和提高工作效率起到了积极作用。但这些辅助工具和技术的使用,也带来了如下问题:

(1)每一个过程都需要录入接口数据,工作重复

(2)工具安装、开发环境部署等,繁琐、耗时

(3)测试人员要求具备开发测试脚本的能力,难度大、学习成本高

(4)各个过程产生的数据分散、不易于收集进行项目分析

2  平台方案设计

2.1  工作流程设计

针对接口开发过程中的工作重复、耗时、难度大、数据不易分析的问题,本文提出了一个基于数据共享的接口开发平台解决方案。

平台基于现有的工具和技术,整合了接口文档工具、接口Mock工具、接口测试工具和接口自动化测试技术,使用数据库统一管理数据,支持接口文档、接口Mock、接口测试、接口自动化测试功能。

共享接口设计过程中录入平台的数据,在接口编码、测试、维护过程中,充分复用接口数据,无需再次人为录入,解决了工作重复问题。无需安装、部署任何工具和环境,无需具备编程基础,只需使用浏览器访问,就可以使用,解决了工作耗时、难度大的问题。数据集中存储、管理,解决了数据分散、不易项目分析的问题。

如图2所示,为平台工作流程图。在接口设计过程中,将接口数据人为录入到平台中。在接口编码、测试、维护过程中,只需在平台界面中选择所需接口,就可以完成接口Mock、接口测试、接口自动化测试。

2.2  功能模块划分

如图3所示,该平台的主要功能模块有:接口管理,环境管理,接口Mock,接口测试,接口自动化测试。接口管理,主要实现接口添加、修改、查询、删除功能。环境管理,主要实现环境添加、修改、查询、删除功能。接口Mock,主要实现Mock设计、执行功能。接口测试,主要实现测试用例的设计、执行、结果展示功能和测试用例管理(即测试用例的新增、修改、查询、删除)功能。接口自动化测试,主要实现测试任务的创建、执行、测试报告展示功能,测试任务管理(即新增、修改、查询、删除)功能,和测试报告管理(即详情展示、查询)功能。

2.3  数据库设计

(1)概念结构设计

根据上述流程设计和功能模块划分可知,该平台涉及到的数据有:接口数据、环境数据、Mock设计数据、Mock结果数据、测试用例数据、单接口测试结果数据、测试任务数据、测试报告数据。因Mock设计数据、Mock结果数据和单接口测试结果数据,在后续的流程中不会被复用和查询,故不作持久性存储,只作单次数据展示。因此,该平台的数据库设计实体和属性有:

环境:环境ID、名称、描述、类型、IP地址、域名、最近更新时间、创建人。

接口:接口ID、名称、描述、URL、请求Headers、请求参数、请求协议、返回Headers、返回Body、最近更新时间。

测试用例:用例ID、名称、描述、验证内容、最近更新时间。

测试任务:任务ID、名称、描述、启动时间、测试频率、最近更新时间。

测试任务结果:任务结果ID、任务执行状态、测试报告。

这些实体之间的联系如下:

1)一个Mock环境可以为多个接口提供Mock数据,一个接口只能在这一个Mock环境中Mock数据(只有一个Mock环境)。因此,环境和接口具有一对多的联系。

2)一个接口可以设计多条测试用例,一条测试用例只能测试一个接口。因此,接口和测试用例具有一对多的联系。

3)一个测试环境中可以运行多条测试用例,一条测试用例只能运行在一个测试环境中。因此,环境和测试用例具有一对多的联系。

4)一个测试任务中可以包含多条测试用例,一条测试用例也可以存在在多个测试任务。因此,测试任务和测试用例具有多对多的联系。

5)一个测试任务运行会生成多个测试任务结果,一个测试任务结果只能由一个测试任务生成。因此,测试任务和测试任务结果具有一对多的联系。

6)对该平台进行概念结构设计,用E-R图表示其概念模型,如图4所示。

(2)逻辑结构设计

将E-R图转换为关系数据模型,如下:

环境(环境ID,名称,描述,类型,IP地址,域名,最近更新时间)

接口(接口ID,环境ID,名称,描述,URL,请求方法,请求Headers,请求参数,请求协议、返回Headers,返回Body,最近更新时间)

测试用例(测试用例ID,接口ID,环境ID,名称,描述,验证内容,最近更新时间)

测试任务(测试任务ID,名称,描述,启动时间,测试频率,最近更新时间)

生成测试任务(测试用例ID,测试任务ID)

测试任务結果(任务结果ID,任务ID,任务执行状态,测试报告)

2.4  系统架构设计

如图5所示,该系统架构由:数据定义、设计、调度中心、执行和管理平台五部分构成。

(1)数据定义部分由接口定义和环境定义两部分组成。

接口定义,支持数据模板定义,定义数据内容包括接口名称、接口描述、接口URL、请求方法、请求协议、请求参数、请求Headers、返回Headers、返回Body。服务于接口设计过程中对原始接口数据的录入、编辑、查询、删除功能,通过管理平台中的接口定义和管理界面可进行数据操作。对外输出接口描述数据,便于在接口Mock、测试、自动化测试过程中复用。

环境定义,定义数据内容包括环境名称、环境描述、环境类型、IP地址、域名。对外输出环境描述数据,服务于接口Mock设计、接口测试用例设计时,运行环境的配置选择,通过管理平台中的环境定义和管理界面可进行数据操作。

(2)设计部分由Mock设计和测试设计两部分组成。

Mock设计部分,服务于接口Mock过程,用于设计Mock数据。在接口管理页面中,选择要进行Mock的接口,设置Mock环境,生成接口Mock描述数据,等待Mock被触发。

测试设计部分,服务于接口测试和接口自动化测试过程,用于单接口测试用例和测试任务的设计和生成。在接口管理页面中,选择要进行测试的接口,设置测试运行环境,并设置接口响应校验规则作为期望结果,生成单接口测试用例数据,并在测试用例管理页面中被统一管理。在测试用例管理页面中,选择多个测试用例,设置测试任务执行的启动时间和间隔时间,组装成一个测试任务,并在测试任务管理页面中被统一管理。

(3)调度中心,主要实现了调度判断和调度执行功能,是衔接前端页面操作和接口Mock、接口测试、接口自动化测试模块的桥梁,是平台的核心功能。当管理平台中有执行操作被触发时,调度中心首先会拦截被执行接口的请求,然后解析请求数据中的运行环境类型,来判断是哪种类型的执行操作被触发。然后将拦截的请求转发到对应的服务器上,并调度相应的执行模块。

(4)执行部分由Mock执行和测试执行两部分组成。

Mock执行,服务于接口Mock过程中的Mock执行。首先,将Mock设计中生成的Mock数据作为请求数据,向Mock服务器发起请求。然后,在接口数据库表中查询接口设计过程中定义的该接口的响应内容,作为Mock请求的响应并返回。最后,展示在Mock结果查看页面中。

测试执行,服务于接口测试和接口自动化测试过程中的测试执行。单接口测试用例执行被触发时,首先会将测试设计中生成的测试用例数据作为请求数据,向开发环境或者生产环境的服务器发起请求,并将响应数据返回,展示在单接口测试结果查看页面中。测试任务执行被触发时,首先会解析测试执行的启动时间和间隔时间,然后启动定时器。每当满足执行条件时,就运行一次测试任务中的所有测试用例。每一次运行,都会生成一个测试报告,并在测试报告管理页面中被统一管理。测试报告内容包括测试任务执行结果概览和任务中每条测试用例的执行结果详情。

(5)管理平台部分,实现了平台前端页面的展示、操作功能。用于数据操作和展示、流程触发、状态监控、结果查看。包括接口、环境、测试用例、测试任务数据定义和增删改查操作的管理,Mock、单接口测试、测试任务的执行触发以及测试任务执行状态监控,Mock结果、测试结果展示以及测试任务执行报告的展示、查询管理。

3  系统核心功能实现

本系统使用基于JavaScript的Vue.js框架和Elemnet-ui组件库来实现管理平台的数据的展示和页面的操作、跳转等功能。使用基于Python编程语言的Django框架和DRF(Django REST framework)组件来实现服务端业务逻辑处理并提供Web API,主要实现了调度中心、执行模块。使用Django的Model层自带数据库ORM组件管理数据,使用MySQL存储数据。使用Nginx+uWSGI部署Web服务到Linux系统的服务器上。

3.1  调度中心的实现

如图6所示,为调度中心的实现流程图。当前端界面触发接口的Mock执行、单接口测试执行、测试任务执行操作后,调度中心会拦截Axios请求,解析、匹配被执行接口数据中配置的环境类型,并判断是否为Mock环境。如果是,则将请求转发至Mock服务器上,调用Mock执行模块;否则,将请求转发至真实服务器上,调度测试执行模块。

3.2  Mock执行的实现

如图7所示,为Mock执行的实现流程图。Mock执行模块被调度后,将会在Mock服务器上完成Mock执行功能,本系统中Mock服务器和系统服务器共用,因此,访问Mock服务器即为访问系统服务器,无需做重定向跳转。首先会解析被拦截请求中的URL,然后查询接口描述数据库表中被定义的响应数据模板,解析数据模板,生成随机模拟数据,并作为Mock响应数据返回。随机模拟数据的生成,使用了开源模拟数据生成器Mock.js。此处,复用了接口定义数据,无需再次录入数据。

3.3  测试执行的实现

如图8所示,为测试执行的实现流程图。测试执行模块被调度后,首先会判断该次测试执行是否为周期性执行。如果是周期性执行,则会先解析测试任务中设置的执行开始时间和执行频次,然后启动定时器,轮询检查启动时间是否到,如果还没到启动时间,则继续等待;如果已到启动时间,则周期性地调用测试任务执行单元。定时任务的执行,使用Python的定时任务调度框架APScheduler中的BackgroundScheduler调度器实现。

如果不是周期性执行,则会直接调用测试任务执行单元。首先判断是否为测试任务。如果是测试任务,则会生成测试执行队列,只要执行队列不为空,将循环调用单次单条测试用例执行单元。否则,生成测试报告。测试任务执行单元的实现,使用Python单元测试框架unittest编写和组织测试用例模板,使用unittest HTML的第三方报告库HTMLTestRunner实现测试用例的执行和测试报告的生成。

如果不是測试任务,则会直接调用单次单条测试用例执行单元。首先,判断被测试接口数据中配置的环境是否为测试环境,如果是,则将访问测试服务器并返回测试数据;否则,将访问线上服务器并返回线上数据。测试服务器的访问过程,使用Python的HTTP库Requests来实现。

4  运行结果分析

目前,该平台已经在项目中交付使用,运行效果达到了预期。笔者从项目中随机选取了50个接口作为样本数据进行了对比分析。如表1所示,为使用该平台前后的运行结果分析。

使用该平台前,完成一个接口的设计,平均需要10分钟,其中,约定接口数据规则需要4分钟,录入接口数据需要6分钟;完成一个接口的Mock,平均需要10分钟,其中,录入接口数据需要5分钟,Mock需要5分钟;完成一个接口测试,平均需要30分钟,其中,安装测试工具和录入接口数据需要25分钟,设计和执行测试用例需要5分钟;完成一个接口的自动化测试,平均需要10分钟,其中,录入接口数据需要5分钟,设计和执行自动化测试用例需要5分钟。因此,一个接口的设计、Mock、测试和自动化测试,一共需要60分钟。

使用该平台后,完成一个接口的设计,平均需要10分钟;完成一个接口的Mock,节省了50%的录入接口数据的工作量,仅需要5分钟;完成一个接口测试,节省了83%的安装测试工具和录入接口数据的工作量,仅需要5分钟设计和执行测试用例;完成一个接口的自动化测试,节省了50%的录入接口数据的工作量,仅需要5分钟设计和执行自动化测试用例。

由此可见,完成一个接口的设计、Mock、测试、自动化测试需要的平均总工作量,使用平台前为60分钟/个,使用平台后为25分钟/个。使用平台后与使用平台前相比,总工作效率提高了58.33%。

5  结语

本文从接口开发的设计、编码、测试、维护工作现状中进行研究和分析,发现辅助工具和技术的使用,虽然在一定程度上保障了产品质量和提高了工作效率,但也造成了工作重复、耗时、难度大、数据不易分析的问题。

针对这些问题,提出了一个基于数据共享的接口开发平台方案,将现有工具和技术整合到一个平台中,无需安装、部署任何工具和环境,无需具备编程基础,只需使用浏览器访问,就可以使用,解决了工作耗时、难度大的问题。共享接口设计过程中录入平台的数据,在接口编码、测试、维护过程中,充分复用接口数据,无需再次人为录入,解决了工作重复问题。数据集中存储、管理,解决了数据分散、不易项目分析的问题。平台在满足现有工作要求的同时,降低了工作难度,简化了工作流程,进一步提高了工作效率,确保了工作的准确性。同时,也为进一步的项目分析提供了数据基础。

实验证明,使用该平台后整体工作效率提高了58.33%。在实际项目中的运行也达到了预期效果,缩短了项目周期,节省了项目成本,增加了企业收益。

对项目数据提供数据可视化展示和分析,是接下来的一个重要优化点。同时,随着版本的迭代,需要进行回归自动化测试的用例数量越来越多,针对增量代码进行精准回归测试的需求,已经提上了日程。

参考文献

[1] 阮一峰. 理解RESTful架构[EB/OL]. 2011[2020-07-01]. http://www.ruanyifeng.com/blog/2011/09/restful.html

[2] 刘红卫. 利用Node.js开发前后端分离的系统——以图书馆地方文献系统为例[J]. 天津科技, 2018, 45(07): 67-70.

[3] 孟祥双. 前后端分离式WEB应用开发研究[J]. 电子元器件与信息技术, 2019, 3(06): 40-43.

[4] 万青. Web系统前后端分离架构中的控制器优化[J]. 科技经济导刊, 2019, 27(16): 28-29.

[5] 周绍景, 应杰, 潘宏斌, 等. RESTful架构的应用研究[J]. 数字技术与应用, 2018, 36(05): 59-60.

[6] 王立福, 孙艳春, 刘学阳. 软件工程[M]. 北京: 北京大学出版社, 2009.

[7] 潘诗瑶, 黄建明. Web应用系统中的MOCK测试技术[J]. 软件, 2016, 37(12): 214-218.

[8] 王建, 罗政, 张希, 等. Web项目前后端分离的设计与实现[J]. 软件工程, 2020, 23(04): 22-24.

[9] 虫师. Web接口开发与自动化测试[M]. 北京: 电子工业出版社, 2017: 4-1.

[10] 刘国庆, 汪兴轩. 基于Charles录制会话的HTTP接口自动化测试框架设计与实现[J]. 计算机应用与软件, 2019, 36(06): 7-13.

[11] 杨梦萌, 刘梦. 接口测试数据生成工具的设计与实现[J]. 科技经济导刊, 2019, 27(28): 25.

[12] 孙立哲. 轻量级接口自动化测试框架设计与实践[J]. 计算机应用与软件, 2020, 37(01): 27-30+36.

[13] 张鲁珊. 通用接口自动化测试框架设计与应用[J]. 电子技术与软件工程, 2019(06): 49.

[14] 王娜. 基于python的接口自动化测试框架设计[J]. 电脑知识与技术, 2020, 16(12): 246-248.

猜你喜欢

数据共享
浅谈天津气象信息化发展现状和发展趋势
网络时代电子文件和档案管理的探索
高校一表通系统建设探究