本发明实施例涉及测试技术领域,特别涉及一种测试方法、测试客户端以及测试系统。
背景技术:
robotframework是一个基于python可扩展地关键字驱动的通用测试自动化框架。robotframework被广泛地使用在端到端验收测试以及验收测试驱动开发(acceptancetestdrivendevelopment,简称atdd)中,生态体系非常丰富。
发明人发现现有技术中至少存在如下问题:利用robotframework进行端到端测试时,robotframework提供的库一般只能用于同步调用执行命令,并且不同的待测试端需要使用不同的调用方式。
技术实现要素:
本发明实施方式的目的在于提供一种测试方法、测试客户端以及测试系统,在对待测试端进行测试时,测试客户端能够利用预先部署的测试库实现测试命令的异步执行,同时利用测试库实现了不同待测试端通过统一接口来执行测试命令。
为解决上述技术问题,本发明的实施方式提供了一种测试方法,应用于部署有测试库的测试客户端,测试库至少包括异步调用指令;方法包括:接收用户输入的测试步骤,并判断测试步骤中是否存在调用异步调用指令的至少一测试命令;当测试步骤中存在调用异步调用指令的至少一测试命令时,控制待测试端创建至少一进程分别执行至少一测试命令;接收待测试端返回的执行各测试命令得到的测试结果。
本发明的实施方式还提供了一种测试客户端,测试客户端部署有测试库;测试客户端包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行如上述的测试方法。
本发明的实施方式还提供了一种测试系统,包括:上述的测试客户端与待测试端。
本发明实施方式相对于现有技术而言,测试客户端中预先部署有测试库,该测试库中包括异步调用指令,测试客户端接收用户输入的测试步骤,并判断测试步骤中是否存在调用异步调用指令的至少一测试命令,当测试步骤中至少一测试命令调用测试库中的异步调用指令时,控制待测试端创建至少一进程分别执行至少一测试命令,待测试端执行各测试命令得到对应的测试结果并返回给测试客户端;即,各测试命令由待测试端中对应的进程来执行,无需等待待测试端返回上一个测试命令执行得到的测试结果,并能够接下来的测试命令,实现了测试命令的异步执行;同时,在对不同的待测试端进行测试时,客户端能够利用测试库实现统一的测试命令的执行,即利用测试库实现了不同待测试端通过统一接口来执行测试命令。
另外,测试步骤包括各测试命令的测试参数;控制待测试端创建至少一进程分别执行至少一测试命令,具体包括:根据各测试命令的测试参数,确定执行各测试命令的待测试端;控制确定的待测试端创建进程执行测试命令。本实施方式提供了一种控制待测试端创建至少一进程分别执行至少一测试命令的具体实现方式。
另外,测试步骤还包括抓包命令;测试客户端还预设有包括数据解析指令的验证库;控制待测试端创建至少一进程分别执行至少一测试命令之前,还包括:控制待测试端执行抓包命令,以供待测试端在执行各测试命令的过程中抓取对应的测试数据;在接收待测试端返回的执行各测试命令得到的测试结果之后,还包括:当测试步骤中存在调用数据解析指令的验证命令时,对待测试端中各测试命令对应的测试数据进行解析,获取各测试命令对应的解析结果;将各测试命令对应的解析结果与期望结果进行对比,确定各测试命令对应的测试结果是否准确。本实施方式中,测试客户端在控制待测试端创建至少一进程分别执行至少一测试命令之前,先控制待测试端执行抓包命令,从而待测试端在执行测试命令的过程中,抓取各测试命令对应的测试数据,测试客户端执行的测试步骤中还包括调用数据解析指令的验证命令,在接收到各测试命令对应的测试结果之后,测试客户端对待测试端中各测试命令对应的测试数据进行解析,获取各测试命令对应的解析结果,继而通过将各测试命令对应的解析结果与期望结果进行对比,判断各测试命令对应的测试结果是否准确,实现了对各测试命令对应的测试结果的验证。
另外,测试库还包括同步调用指令;在接收并执行用户输入的测试步骤之后,还包括:判断测试步骤中是否存在调用同步调用指令的至少一测试命令;当测试步骤中存在调用同步调用指令的至少一测试命令时,控制待测试端创建进程执行当前的测试命令,并在接收到待测试端返回的执行当前的测试命令得到的测试结果后,执行下一个测试命令。通过本实施方式实现了测试命令的同步调用。
另外,根据各测试命令的测试参数,确定执行各测试命令的待测试端,具体包括:对于每个测试命令,根据测试命令的测试参数,确定执行测试命令的测试工具;根据执行测试命令的测试工具,确定执行测试命令的待测试端;控制确定的待测试端创建进程执行测试命令,具体为:控制确定的待测试端调用测试工具执行测试命令。本实施方式中,提供了一种根据各测试命令的测试参数,确定执行各测试命令的待测试端的具体实现方式。
另外,待测试端为移动终端或服务器端;当待测试端为服务器端时,服务器端中部署有测试库。本实施方式中,在服务器端中部署与测试客户端同样的测试库,从而便于远程调用服务器端执行测试命令。
另外,控制待测试端创建至少一进程分别执行至少一测试命令,具体为:控制待测试端创建至少一进程分别执行至少一测试命令,并生成各进程的对象;接收待测试端返回的执行各测试命令得到的测试结果,具体为:接收待测试端返回的执行各测试命令得到的测试结果以及执行各测试命令的进程的对象。本实施方式中,待测试端在返回执行测试命令得到的测试结果时,同时返回执行测试命令的进程的对象,以便于测试客户端获取各测试命令的执行情况。
另外,当接收到用户输入的包括待关闭对象的结束命令时,控制待测试端结束待关闭对象对应的进程。本实施方式中,用户可以随时关闭已经返回了测试结果的测试命令的进程,以减小待测试端中的处理负担。
另外,测试客户端为基于robotframework的测试客户端。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是根据本发明第一实施方式中的测试方法的具体流程图;
图2是根据本发明第一实施方式中的测试方法的具体流程图,其中将图1的步骤101与步骤104合并;
图3是根据本发明第二实施方式中的测试方法的具体流程图;
图4是根据本发明第三实施方式中的测试方法的具体流程图;
图5是根据本发明第四实施方式中的测试方法的具体流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。
本发明的第一实施方式涉及一种测试方法,应用于测试客户端,测试客户端可以为基于robotframework的测试客户端,即测试客户端中安装有robotframework自动化测试框架,测试客户端中还预先部署有测试库,该测试库为测试人员自定义的库,用来实现测试命令的执行,测试库中至少包括异步调用指令。本领域技术人员可以理解的,该测试库中还定义有其他指令,例如同步调用指令、初始化指令等,可以通过定义关键字调用的方式来实现测试库中指令的调用。举例来说,在测试客户端的robotframework自动化测试框架下自定义shelllibrary测试库,shelllibrary测试库的目录下创建keywords.py文件,里面创建一个shellkeywords类,shellkeywords类中定义方法:__init__(初始化)、shell_run(同步调用关键字)、async_shell_run(异步调用关键字)、async_shell_get(进程关闭关键字)、session_create(解析参数、创建进程)、session_go(执行系统命令、返回结果)。其中shell_run、async_shell_run、async_shell_get使用robotframework的修饰器@keyword修饰为关键字,从而可以在测试步骤的测试命令中通过关键字调用来实现指令的调用。
本实施方式的测试方法的具体流程如图1所示。
步骤101,接收用户输入的测试步骤,并判断测试步骤中是否存在调用异步调用指令的至少一测试命令。若是,则进入步骤102;若否,则进入步骤104。
具体而言,测试客户端提供一个测试界面,用户(测试人员)通过输入设备输入测试步骤,并对测试步骤进行设置;测试客户端在接收到用户输入的包括至少一个测试命令的测试步骤后,判断测试步骤中是否存在调用异步调用指令的至少一测试命令;具体的,测试库中定义了异步调用关键字(async_shell_run),当至少一测试命令中包括异步调用关键字(async_shell_run)的调用时,判定至少一测试命令调用异步调用指令,进入步骤102;反之,则说明测试步骤中的至少一测试命令未调用异步调用指令,进入步骤104。
步骤102,控制待测试端创建至少一进程分别执行至少一测试命令。
具体而言,测试客户端控制待测试端创建进程来执行测试步骤中的测试命令,为每个测试命令创建一个进程,各测试命令由对应的进程来执行。
步骤103,接收待测试端返回的执行各测试命令得到的测试结果。
具体而言,待测试端执行测试命令结束后可以得到测试结果,再将测试结果返回到测试客户端,测试客户端接收待测试端返回的各测试命令对应的测试结果,测试结果为测试命令执行成功或者执行失败。
步骤104,判断测试步骤中是否存在调用同步调用指令的至少一测试命令。若是,则进入步骤105;若否,则回到步骤102。
具体而言,测试库中定义了同步调用关键字(shell_run),当至少一测试命令包括同步调用关键字(shell_run)的调用时,判定至少一测试命令调用同步调用指令,进入步骤105;反之,则说明测试步骤中的至少一测试命令未调用同步调用指令,则说明至少一测试命令调用异步调用指令,回到步骤102。
步骤105,控制待测试端创建进程执行当前的测试命令,并在接收到待测试端返回的执行当前的测试命令得到的测试结果后,执行下一个测试命令。
具体而言,测试客户端控制待测试端创建一个进程用来执行至少一测试命令,在待测试端中的进程执行当前的测试命令得到测试结果,并将测试结果返回到测试客户端后,测试客户端再控制待测试端中的进程执行下一个测试命令,直至所有的测试命令均执行完毕。
需要说明的是,步骤101中的判断测试步骤中是否存在调用异步调用指令的至少一测试命令,可以与步骤104判断测试步骤中是否存在调用同步调用指令的至少一测试命令进行合并,即图2所示的步骤202判断测试步骤中的测试命令调用同步调用指令或异步调用指令,当判定测试步骤中的测试命令调用异步调用指令时,进入步骤203控制待测试端创建至少一进程分别执行至少一测试命令;当判定测试步骤中的测试命令调用异步调用指令时,进入步骤204控制待测试端创建进程执行当前的测试命令,并在接收到待测试端返回的执行当前的测试命令得到的测试结果后,执行下一个测试命令。
本实施方式相对于现有技术而言,测试客户端中预先部署有测试库,该测试库中包括异步调用指令,测试客户端接收用户输入的测试步骤,并判断测试步骤中是否存在调用异步调用指令的至少一测试命令,当测试步骤中至少一测试命令调用测试库中的异步调用指令时,控制待测试端创建至少一进程分别执行至少一测试命令,待测试端执行各测试命令得到对应的测试结果并返回给测试客户端;即,各测试命令由待测试端中对应的进程来执行,无需等待待测试端返回上一个测试命令执行得到的测试结果,并能够接下来的测试命令,实现了测试命令的异步执行;同时,在对不同的待测试端进行测试时,客户端能够利用测试库实现统一的测试命令的执行,即利用测试库实现了不同待测试端通过统一接口来执行测试命令。
本发明的第二实施方式涉及一种测试方法。第二实施方式与第一实施方式大致相同,主要区别之处在于:本实施方式中,提供了控制待测试端创建至少一进程分别执行至少一测试命令的具体实现方式。其中,待测试端可以为移动终端或者服务器端,移动终端可以为安卓终端。
本实施方式的测试方法的具体流程如图3所示。
其中,步骤301、步骤302、步骤304、步骤305与至步骤201、步骤202、步骤204、步骤205大致相同,在此不再赘述,主要不同之处在于,步骤303包括以下子步骤:
子步骤3031,根据各测试命令的测试参数,确定执行各测试命令的待测试端。
具体而言,对于每个测试命令,根据测试命令的测试参数,确定执行测试命令的测试工具,继而能够根据执行测试命令的测试工具,来确定执行测试命令的待测试端。待测试端可以为移动终端或者服务器端,以移动终端为安卓终端为例,测试客户端与安卓终端采用adb连接,当测试参数表征测试命令为adb命令时,则说明测试命令的执行工具为adb工具,则确定执行该测试命令的待测终端为安卓终端(移动终端)。当测试参数表征测试命令为bash命令时,则说明测试命令的执行工具为bash工具,确定执行该测试命令的待测终端为服务器端;其中,服务器端也可以安装有robotframework自动化测试框架与robotremoteserver库,以实现测试客户端远程调用服务器端中的bash工具执行测试命令,另外,服务器端还安装有测试库(shelllibrary测试库),从而可以服务器端可以调用shelllibrary测试库来执行测试命令。
子步骤3032,控制确定的待测试端创建进程执行测试命令。
具体而言,控制确定的待测试端调用测试工具执行测试命令,当待测试端为安卓端(移动终端)时,测试客户端调用本地的abd工具控制安卓端(移动终端)创建进程来执行测试命令;当待测试端为服务器端时,测试客户端远程调用服务器端中的bash工具控制服务器端创建进程来执行测试命令;其中,移动终端与服务器端为各测试命令分别创建一个进程,各测试命令由对应的进程来执行。
本实施方式相对于第一实施方式而言,提供了一种控制待测试端创建至少一进程分别执行至少一测试命令的具体实现方式。
本发明第三实施方式涉及一种测试方法,第三实施方式是在第一实施方式基础上的改进,主要改进之处在于:本实施方式中,实现了对各测试命令对应的测试结果的验证。
本实施例中,测试客户端中还预设有包括数据解析指令的验证库,该验证库中定义有数据解析关键字以实现数据解析指令的调用,验证库中一般还预先配置有解析工具的路径。举例来说,验证库为测试人员自定义的networklibrary验证库,networklibrary验证库目录下创建keywords.py文件,里面创建一个networkkeywords类,networkkeywords类中定义方法__init__(初始化)、read_pcap(数据解析关键字)。其中read_pcap使用robotframework自动化框架的修饰器@keyword修饰为关键字。
本实施方式的测试方法的具体流程如图4所示。
其中,步骤401与步骤201大致相同,步骤403至步骤406与步骤201至步骤203大致相同,在此不再赘述,主要不同之处在于,增加了步骤402,以及步骤407至步骤409,具体如下:
步骤402,控制待测试端执行抓包命令,以供待测试端在执行各测试命令的过程中抓取对应的测试数据。
具体而言,测试客户端在控制待测试端创建进程执行各测试命令之前,根据配置的抓包工具的路径加载抓包工具以控制待测试端执行抓包命令,待测试端执行抓包命令时,能够在执行测试命令的过程中,抓取执行各测试命令产生的测试数据,测试数据一般为.pcap文件。
步骤407,判断测试步骤中存在调用数据解析指令的验证命令;若是,则进入步骤408;若否,则直接结束。
具体而言,测试客户端判断测试步骤中是否存在包括数据解析指令的验证命令,即判断测试步骤中是否存在调用数据解析关键字(read_pcap)的验证命令,若测试步骤中是否存在调用数据解析关键字的验证命令,则进入步骤408;若否,则直接结束。
步骤408,对待测试端中各测试命令对应的测试数据进行解析,获取各测试命令对应的解析结果。
具体而言,测试客户端根据预设的路径获取解析工具,根据预设的解析参数利用解析工具对待测试端中各测试命令对应的测试数据进行解析,从而能够获取各测试命令对应的解析结果。
步骤409,将各测试命令对应的解析结果与期望结果进行对比,确定各测试命令对应的测试结果是否准确。
具体而言,对于每个测试命令,将该测试命令对应的解析结果与期望结果进行对比,当该测试命令对应的解析结果与期望结果一致时,判定该测试命令对应的测试结果准确;反之,则说明测试命令对应的测试结果不准确。
本实施例中,可以在每接收到一个测试命令的测试结果时,便执行步骤407至步骤409,以对测试命令的测试结果进行验证;也可以在接收到所有测试命令的测试结果后,再执行步骤407至步骤409,以对各测试命令的测试结果进行验证。
本实施方式相对于第一实施方式而言,测试客户端在控制待测试端创建至少一进程分别执行至少一测试命令之前,先控制待测试端执行抓包命令,从而待测试端在执行测试命令的过程中,抓取各测试命令对应的测试数据,测试客户端执行的测试步骤中还包括调用数据解析指令的验证命令,在接收到各测试命令对应的测试结果之后,测试客户端对待测试端中各测试命令对应的测试数据进行解析,获取各测试命令对应的解析结果,继而通过将各测试命令对应的解析结果与期望结果进行对比,判断各测试命令对应的测试结果是否准确,实现了对各测试命令对应的测试结果的验证。需要说明的是,本实施方式还可以用于在第二实施方式基础上的改进,可以达到同样的技术效果。
本发明的第四实施方式涉及一种测试方法。第四实施方式是在第一实施方式基础上的改进,主要改进之处在于:可以根据用户的结束命令来关闭对象对应的进程。
本实施方式的测试方法的具体流程如图5所示。
其中,步骤501、步骤502以及步骤504与步骤201、步骤202以及步骤204大致相同,在此不再赘述,主要不同之处在于,增加了步骤506,具体如下:
步骤503,控制待测试端创建至少一进程分别执行至少一测试命令,并生成各进程的对象。
具体而言,测试客户端控制待测试端创建进程来执行测试步骤中的测试命令,为每个测试命令创建一个进程,并生成进程的对象,该对象为非阻塞且支持结果返回进行回调的对象。
步骤505,接收待测试端返回的执行各测试命令得到的测试结果以及执行各测试命令的进程的对象。
具体而言,以待测试端中的一个进程为例,待测试端中进程的对象在进程执行测试命令得到测试结果之后,将测试结果与进程的对象返回到测试客户端,测试客户端可以接收到各测试命令的测试结果与进程的对象,测试客户端可以将测试结果与进程的对象建立对应关系并存储。
步骤506,当接收到用户输入的包括待关闭对象的结束命令时,控制待测试端结束待关闭对象对应的进程。
具体而言,用户可以通过测试客户端提供的测试界面来查看已经返回了测试结果的测试命令以及执行该测试命令的对象,待测试端中的进程在执行测试命令得到测试结果后,并不会主动关闭进程,测试客户端中可以查看到测试结果则说明测试命令已经执行结束,进程可以关闭,用户可以根据测试结果对应的对象,将控制待测试端结束该对象的进程,减小待测试端中的处理负担。
本实施方式相对第一实施方式而言,用户可以随时关闭已经返回了测试结果的测试命令的进程,以减小待测试端中的处理负担。需要说明的是,本实施方式还可以用于在第二或第三实施方式基础上的改进,可以达到同样的技术效果。
本发明第五实施方式涉及一种测试客户端,测试客户端可以为基于robotframework的测试客户端,即测试客户端中安装有robotframework自动化测试框架,测试客户端中还预先部署有测试库,该测试库为测试人员自定义的库,用来实现测试命令的执行,测试库中至少包括异步调用指令。测试客户端包括至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行第一至第四实施例中任一的测试方法。
其中,存储器和处理器采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器和存储器的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器。
处理器负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器可以被用于存储处理器在执行操作时所使用的数据。
本发明第六实施方式涉及一种测试系统,测试系统包括第五实施方式中的测试客户端以及待测试端,待测试端可以为移动终端或者服务器端,移动终端可以为安卓终端。
本实施方式相对于现有技术而言,测试客户端中预先部署有测试库,该测试库中包括异步调用指令,测试客户端接收用户输入的测试步骤,并判断测试步骤中是否存在调用异步调用指令的至少一测试命令,当测试步骤中至少一测试命令调用测试库中的异步调用指令时,控制待测试端创建至少一进程分别执行至少一测试命令,待测试端执行各测试命令得到对应的测试结果并返回给测试客户端;即,各测试命令由待测试端中对应的进程来执行,无需等待待测试端返回上一个测试命令执行得到的测试结果,并能够接下来的测试命令,实现了测试命令的异步执行;同时,在对不同的待测试端进行测试时,客户端能够利用测试库实现统一的测试命令的执行,即利用测试库实现了不同待测试端通过统一接口来执行测试命令。
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。