软件自动化测试方法、装置、架构、服务器及存储介质
技术领域
本发明涉及一种软件自动化测试方法、装置、架构、服务器及存储介质,属于软件测试领域。
背景技术
现在软件测试被广泛用于提升软件质量和减少风险。但是由于软件的复杂性,在有限的时间与财务预算内找到所有的可能的缺陷总是不切实际的。因此软件测试的目的是在有限的资源内尽可能多地降低风险。
软件开发有两种方法:第一类是原生应用(Native App),顾名思义,该种应用的开发语言是直接取决于其运行平台上的,对于iOS操作系统就是Objective-C语言,对于Android操作系统就是Java,而对于Windows移动端就是C#,原生应用是通过对应平台的App商店进行发布的,有时候发布与更新会需要好几天审核才能发布到商店中。也就是说,即使开发者有能力立刻修复漏洞(BUG),由于审核和批准的过程也要推迟几天。更甚者,即便漏洞的修复通过了审核,已经安装了应用的用户不一定会去选择升级/更新应用,显然,测试原生软件的难点在于设备的数量以及操作系统的不一致;第二类是网页应用(Web App),这一类应用与当前常规网页的开发语言别无二致;同时网页应用也支持移动端用户的触摸交互。虽然网页应用的发布允许跨平台,但是它对不同的浏览器是低兼容的,尽管如Selenium,JSTestDriver和Buster.js之类的测试工具已经尝试通过对多种浏览器的测试支持来弥补该弊端,但跨浏览器的网页应用测试的效果仍不理想。
发明内容
有鉴于此,本发明提供了一种软件自动化测试方法、装置、架构、服务器及存储介质,其可以实现跨平台移动应用的自动化测试,能够有效减少人工测试的工作量,减少人工失误,进而确保软件质量,降低用户和公司损失。
本发明的第一个目的在于提供一种软件自动化测试方法。
本发明的第二个目的在于提供一种软件自动化测试装置。
本发明的第三个目的在于提供一种软件自动化测试架构。
本发明的第四个目的在于提供一种服务器。
本发明的第五个目的在于提供一种存储介质。
本发明的第一个目的可以通过采取如下技术方案达到:
一种软件自动化测试方法,应用于服务器,所述方法包括:
接收客户端设备发送的软件测试请求;
根据软件测试请求,生成相应的软件测试命令;
通过引擎将软件测试命令解析成底层测试框架支持的特定格式和协议,将特定格式和协议传输到底层测试框架;
通过引擎抽象底层测试框架,以使底层测试框架按照特定格式和协议调用客户端设备的应用完成测试。
进一步的,所述将特定格式和协议传输到底层测试框架,具体包括:
若底层测试框架有远程接口,将特定格式和协议传输到远程接口,以使远程接口将特定格式和协议传输到底层测试框架;
若底层测试框架没有远程接口,创建远程接口,将特定格式和协议传输到远程接口,以使远程接口将特定格式和协议传输到底层测试框架。
进一步的,所述接收客户端设备发送的软件测试请求之前,还包括:
对客户端设备进行登记,生成客户端设备名单;其中,所述客户端设备名单随着客户端设备的接入或断开而变更;
根据客户端设备名单,为每台客户端设备分配一个ID。
进一步的,所述客户端设备的操作系统为Android操作系统时,所述引擎为Android自动化测试框架的引擎,所述底层测试框架为底层Android自动化测试框架;
所述客户端设备的操作系统为iOS操作系统时,所述引擎为iOS自动化测试框架的引擎,所述底层测试框架为底层iOS自动化测试框架。
本发明的第二个目的可以通过采取如下技术方案达到:
一种软件自动化测试装置,应用于服务器,所述装置包括:
接收单元,用于接收客户端设备发送的软件测试请求;
第一生成单元,用于根据软件测试请求,生成相应的软件测试命令;
解析单元,用于通过引擎将软件测试命令解析成底层测试框架支持的特定格式和协议,将特定格式和协议传输到底层测试框架;
测试单元,用于通过引擎抽象底层测试框架,以使底层测试框架按照特定格式和协议调用客户端设备的应用完成测试。
进一步的,所述接收单元之前,还包括:
第二生成单元,用于对客户端设备进行登记,生成客户端设备名单;其中,所述客户端设备名单随着客户端设备的接入或断开而变更;
分配单元,用于根据客户端设备名单,为每台客户端设备分配一个ID。
本发明的第三个目的可以通过采取如下技术方案达到:
一种软件自动化测试架构,所述架构包括服务器、客户端设备和引擎,所述服务器分别与客户端设备、引擎相连,所述引擎设置在客户端设备的应用内;
所述服务器,用于执行上述的软件自动化测试方法;
所述客户端设备,用于根据用户输入的软件测试指令,向服务器发送软件测试请求。
进一步的,所述服务器与引擎之间采用HTTP作为通信协议,所述服务器与客户端设备之间采用WebSockets作为通信协议。
本发明的第四个目的可以通过采取如下技术方案达到:
一种服务器,包括处理器以及用于存储处理器可执行程序的存储器,所述处理器执行存储器存储的程序时,实现上述的软件自动化测试方法。
本发明的第五个目的可以通过采取如下技术方案达到:
一种存储介质,存储有程序,所述程序被处理器执行时,实现上述的软件自动化测试方法。
本发明相对于现有技术具有如下的有益效果:
本发明可以通过引擎将软件测试命令解析成底层测试框架支持的特定格式和协议,将特定格式和协议传输到底层测试框架,并通过引擎抽象底层测试框架,使得底层测试框架按照特定格式和协议调用客户端设备的应用完成测试,实现了跨平台移动应用的自动化测试,可以有效减少人工测试的工作量,减少人工失误,进而确保软件质量,降低用户和公司损失。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。
图1为本发明实施例1的软件自动化测试方法的流程图。
图2为本发明实施例1的将特定格式和协议传输到底层测试框架的流程图。
图3为本发明实施例2的软件自动化测试架构的部署示意图。
图4为本发明实施例2的软件自动化测试架构的各组件示意图。
图5为本发明实施例2的服务器的结构框图。
图6为本发明实施例2的客户端设备的结构框图。
图7为本发明实施例2的软件自动化测试架构的引擎工作示意图。
图8为本发明实施例3的软件自动化测试装置的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1:
如图1所示,本实施例提供了一种软件自动化测试方法,该方法主要通过服务器实现,包括以下步骤:
S103、接收客户端设备发送的软件测试请求。
用户通过客户端设备输入软件测试指令,客户端设备根据用户输入的软件测试指令,向服务器发送软件测试请求,由服务器接收该软件测试请求。
为了实现对客户端设备的管理,以及明确是哪台客户端设备发送软件测试请求,在步骤S103之前,还可包括步骤S101~S102,具体如下:
S101、对客户端设备进行登记,生成客户端设备名单。
本步骤中,客户端设备名单随着客户端设备的接入或断开而变更,该名单由设备管理器(Singleton)保存,新的客户端设备的接入需要通过服务器进行登记,该客户端设备可以为实际客户端设备(如手机、平板电脑等),也可以是模拟器设备。
S102、根据客户端设备名单,为每台客户端设备分配一个ID。
具体地,服务器通过设备管理器会分配一个ID给客户端设备,并且将客户端设备的meta信息(如设备操作系统、引擎信息、IP地址、屏幕尺寸等)保存于寄存器中,引擎负责每秒发送客户端设备的ID和meta信息给服务器,如果服务器没有持续接收到客户端设备发送的信息,那么该客户端设备会被认为是已经过期的客户端设备,并从客户端设备名单中删除,这种方式可以确保服务器可以不用直接连接到客户端设备而有一个准确的客户端设备名单。
S104、根据软件测试请求,生成相应的软件测试命令。
具体地,服务器根据软件测试请求,生成相应的软件测试命令,如“type(输入)”、“touch”(触摸)等。
S105、通过引擎将软件测试命令解析成底层测试框架支持的特定格式和协议,将特定格式和协议传输到底层测试框架。
引擎具有接口,该接口为使用现有方法定义的常规接口,将来自服务器的软件测试命令解析成底层测试框架支持的特定格式和协议,如HTTP协议上的JSON,然后将特定格式和协议传输到底层测试框架。
本步骤中,将特定格式和协议传输到底层测试框架如图2所示,具体包括:
S201、判断底层测试框架是否有远程接口,若有,进入步骤S202,否则,进入步骤S203。
S202、若底层测试框架有远程接口,将特定格式和协议传输到远程接口,以使远程接口将特定格式和协议传输到底层测试框架。
S203、若底层测试框架没有远程接口,创建远程接口,将特定格式和协议传输到远程接口,以使远程接口将特定格式和协议传输到底层测试框架。
进一步地,客户端设备的操作系统为Android操作系统时,引擎为Android自动化测试框架的引擎,如Android Robotium引擎,底层测试框架为底层Android自动化测试框架,如底层Robotium测试框架。
客户端设备的操作系统为iOS操作系统时,引擎为iOS自动化测试框架的引擎,如iOS Frank引擎,底层测试框架为底层iOS自动化测试框架,如底层Frank测试框架。
S106、通过引擎抽象底层测试框架,以使底层测试框架按照特定格式和协议调用客户端设备的应用完成测试。
具体地,引擎通过远程接口抽象底层测试框架,底层测试框架按照特定格式和协议调用客户端设备的应用GUI(Graphical User Interface,图像用户界面)完成测试。
进一步地,底层测试框架集成现有的测试框架来支持主流平台的开发,所选的测试框架需要既能够支持实际移动设备上,又能够支持模拟器设备,因为在开发中,实际移动设备和模拟器都会被利用到;此外,所选的测试框架需要足够成熟并且可以支持多种命令;跨平台的实现就是通过这些底层测试框架可以操作客户端设备的应用,所以从另一个角度上来说是在以一种跨平台的方式来集成这些底层测试框架。
本领域技术人员可以理解,实现上述实施例的方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,相应的程序可以存储于计算机可读存储介质中。
应当注意,尽管在附图中以特定顺序描述了上述实施例的方法操作,但是这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
实施例2:
如图3所示,本实施例提供了一种软件自动化测试架构,该架构基于基于C/S(Client/Server,客户端/服务器)结构,其包括服务器、客户端设备和引擎,服务器分别与客户端设备、引擎相连。
所述服务器,用于接收客户端设备发送的软件测试请求;根据软件测试请求,生成相应的软件测试命令;通过引擎将软件测试命令解析成底层测试框架支持的特定格式和协议,将特定格式和协议传输到底层测试框架;通过引擎抽象底层测试框架,以使底层测试框架按照特定格式和协议调用客户端设备的应用完成测试。
进一步地,服务器还用于对客户端设备进行登记,生成客户端设备名单;根据客户端设备名单,为每台客户端设备分配一个ID;其中,客户端设备名单随着客户端设备的接入或断开而变更,该名单由设备管理器保存,新的客户端设备的接入需要通过服务器进行登记。
进一步地,当启动服务器的时候,会让客户端设备的应用部署到对应底层测试框架,并实体化一个GUI,以进行测试和执行命令,如图4所示。
服务器的结构如图5所示,其包括通过系统总线501连接的第一处理器502、第一存储器和网络接口505,该第一处理器502用于提供计算和控制能力,该第一存储器包括非易失性存储介质506和内存储器507,该非易失性存储介质506存储有操作系统、计算机程序和数据库,该内存储器507为非易失性存储介质中的操作系统和计算机程序的运行提供环境,第一处理器502执行第一存储器存储的计算机程序时,实现上述服务器的功能。
所述客户端设备具有应用GUI,包括交互模式和自动模式,用于根据用户输入的软件测试指令,向服务器发送软件测试请求,并且可以接受底层测试框架的调用完成测试。
客户端设备以手机为例,其结构如图6所示,包括第二处理器601、第二存储器602、摄像头603、输入单元604、显示单元605、传输模块606、电源607等部件,第二存储器602、摄像头603、输入单元604、显示单元605、传输模块606分别与第二处理器601相连,电源607用于给各个部件供电,摄像头603可以作为拍摄设备,第二存储器602可用于存储计算机程序,第二处理器601通过运行存储在第二存储器602内的计算机程序时,从而实现上述客户端的功能。
所述引擎设置在客户端设备的应用内;进一步地,客户端设备的操作系统为Android操作系统时,引擎为Android自动化测试框架的引擎,如Android Robotium引擎,其设置于Android应用内与服务器沟通,底层测试框架为底层Android自动化测试框架,如底层Robotium测试框架;客户端设备的操作系统为iOS操作系统时,引擎为iOS自动化测试框架的引擎,如iOS Frank引擎,设置于iOS应用内与服务器沟通,底层测试框架为底层iOS自动化测试框架,如底层Frank测试框架。
本实施例的软件自动化测试架构专注于对实时事件控制,实时地远程操控客户端设备,需要客户端设备有一个开放通道从而等待接收客户端设备的软件测试请求,考虑到计算机和手机都支持TCP/IP协议,选择了其上层协议HTTP作为应用层协议,HTTP协议因为其请求-响应模式而被广泛使用,但是HTTP协议不支持双向通信,无法满足服务器与客户端设备双向自由通信的需求,而WebSockets协议恰好可以解决双向实时通信问题;因此,使用HTTP作为服务器和引擎之间的通信协议,WebSockets作为服务器与客户端设备之间的通信协议。
所述引擎主要负责两件事情,一是需要通过一个接口来抽象底层测试框架,二是需要保证与服务器有规律的沟通(网络心跳),将来自服务器的命令解析成底层框架支持的特定格式和协议,并将其传输到指定远程接口,如果底层测试框架有这个远程接口,则该条命令解析直接传递给这个远程接口;否则,引擎会创建这个远程接口,从而与底层测试框架进行沟通,如图7所示。
实施例3:
如图8所示,本实施例提供了一种软件自动化测试装置,该装置应用于服务器,其包括接收单元803、第一生成单元804、解析单元805和测试单元806,各个单元的具体功能如下:
所述接收单元803,用于接收客户端设备发送的软件测试请求。
所述第一生成单元804,用于根据软件测试请求,生成相应的软件测试命令。
所述解析单元805,用于通过引擎将软件测试命令解析成底层测试框架支持的特定格式和协议,将特定格式和协议传输到底层测试框架。
所述测试单元806,用于通过引擎抽象底层测试框架,以使底层测试框架按照特定格式和协议调用客户端设备的应用完成测试。
进一步地,所述接收单元803之前,还包括:
第二生成单元801,用于对客户端设备进行登记,生成客户端设备名单;其中,所述客户端设备名单随着客户端设备的接入或断开而变更;
分配单元802,用于根据客户端设备名单,为每台客户端设备分配一个ID。
本实施例中各个模块的具体实现可以参见上述实施例1的软件自动化测试方法,在此不再一一赘述;需要说明的是,本实施例提供的装置仅以上述各功能单元的划分进行举例说明,在实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。
可以理解,上述装置所使用的术语“第一”、“第二”等可用于描述各种模块,但这些单元不受这些术语限制。这些术语仅用于将第一个单元与另一个单元区分。举例来说,在不脱离本发明的范围的情况下,可以将第一生成单元称为第二生成单元,且类似地,可将第二生成单元称为第一生成单元,第一生成单元和第二生成单元两者都是生成单元,但不是同一生成单元。
实施例4:
本实施例提供了一种存储介质,该存储介质为计算机可读存储介质,其存储有计算机程序,所述计算机程序被处理器执行时,实现上述实施例1的软件自动化测试方法,如下:
接收客户端设备发送的软件测试请求;
根据软件测试请求,生成相应的软件测试命令;
通过引擎将软件测试命令解析成底层测试框架支持的特定格式和协议,将特定格式和协议传输到底层测试框架;
通过引擎抽象底层测试框架,使底层测试框架按照特定格式和协议调用客户端设备的应用完成测试。
进一步地,所述将特定格式和协议传输到底层测试框架,具体包括:
若底层测试框架有远程接口,将特定格式和协议传输到远程接口,以使远程接口将特定格式和协议传输到底层测试框架;
若底层测试框架没有远程接口,创建远程接口,将特定格式和协议传输到远程接口,以使远程接口将特定格式和协议传输到底层测试框架。
进一步地,所述接收客户端设备发送的软件测试请求之前,还包括:
对客户端设备进行登记,生成客户端设备名单;其中,所述客户端设备名单随着客户端设备的接入或断开而变更;
根据客户端设备名单,为每台客户端设备分配一个ID。
本实施例中所述的存储介质可以是磁盘、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、U盘、移动硬盘等介质。
综上所述,本发明可以通过引擎将软件测试命令解析成底层测试框架支持的特定格式和协议,将特定格式和协议传输到底层测试框架,并通过引擎抽象底层测试框架,使得底层测试框架按照特定格式和协议调用客户端设备的应用完成测试,实现了跨平台移动应用的自动化测试,可以有效减少人工测试的工作量,减少人工失误,进而确保软件质量,降低用户和公司损失。
以上所述,仅为本发明专利较佳的实施例,但本发明专利的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明专利所公开的范围内,根据本发明专利的技术方案及其发明构思加以等同替换或改变,都属于本发明专利的保护范围。