一种自动化测试方法及装置
文献发布时间:2023-06-19 10:46:31
技术领域
本发明属于计算机技术领域,尤其涉及一种自动化测试方法及装置。
背景技术
iOS自动化测试过程中,需要通过代理服务器进行构造测试数据,为自动化测试提供数据支持,完善自动化测试场景覆盖。现有的代理服务器是部署在执行自动化测试的本地服务端上,容易出现以下技术问题:
一是占用本地服务端系统资源,影响测试效率;二是自动化服务被异常退出后,在本地服务端(如Mac系统)上容易导致代理服务产生僵尸进程;三是代理服务的数据分散,不同本地服务端之间无法共享数据。
发明内容
本发明提供了一种自动化测试方法及装置,可以解决或者至少部分解决上述技术问题。
为达此目的,本发明采用以下技术方案:
第一方面,提供了一种自动化测试方法,包括:
至少一个本地服务端远程启动部署在远程服务端的代理服务,所述远程服务端和所述至少一个本地服务端均通信连接;
所述远程服务端通过所述代理服务远程操作代理对象实例。
可选地,所述代理服务包括:
将测试数据操作规则封装成Groovy脚本;
将所述Groovy脚本编译成Class类;
加载所述Class类。
可选地,所述Class类的加载方法,包括:
通过GroovyClassLoader类加载器加载所述Class类。
可选地,所述通过GroovyClassLoader类加载器加载所述Class类,包括:
动态加载App Proxy脚本并执行它的行为;
将所述Class类缓存起来;
通过反射获取目标方法,传递参数。
可选地,所述至少一个本地服务端远程启动部署在远程服务端的代理服务,包括:
至少一个本地服务端向所述远程服务端发出测试访问请求;
所述远程服务端接收所述测试访问请求后,启动所述代理服务。
第二方面,提供了一种自动化测试装置,包括远程服务端和至少一个本地服务端,所述远程服务端和所述至少一个本地服务端均通信连接;
所述远程服务端上部署有代理服务器,所述至少一个本地服务端远程启动所述代理服务器时,所述远程服务端通过所述代理服务器远程操作代理对象实例。
可选地,所述代理服务器包括:
封装模块,用于将测试数据操作规则封装成Groovy脚本;
编译模块,用于将所述Groovy脚本编译成Class类;
加载模块,用于加载所述Class类。
可选地,所述加载模块为GroovyClassLoader类加载器。
可选地,所述加载模块包括:
加载单元,用于动态加载App Proxy脚本并执行它的行为;
缓存单元,用于将所述Class类缓存起来;
传递单元,用于通过反射获取目标方法,传递参数。
可选地,所述本地服务端包括测试模块,所述测试模块用于向所述远程服务端发出测试访问请求;
所述远程服务端包括启动模块,所述启动模块用于接收所述测试访问请求后,启动所述代理服务器。
与现有技术相比,本发明实施例具有以下有益效果:
本发明实施例提供的一种自动化测试方法及装置,将自动化测试代理服务由本地服务变为远程服务,可以减少自动化测试时本地服务端资源占用,提高自动化测试的稳定性,并且代理服务数据能够被各本地服务端共享,从而方便统一管理,降低测试工作量和提高测试效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
本说明书所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容所能涵盖的范围内。
图1为本发明实施例提供的自动化测试方法流程图;
图2为本发明实施例提供的自动化测试装置图及信息流程图。
具体实施方式
为使得本发明的目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1所示,本实施例提供了一种自动化测试方法,包括以下步骤:
步骤S101、至少一个本地服务端远程启动部署在远程服务端的代理服务,远程服务端和至少一个本地服务端均通信连接;
步骤S102、远程服务端通过代理服务远程操作代理对象实例。
具体地,本实施例将自动化App Proxy本地服务进行远程服务化,即代理服务部署在远程服务端,在远程服务端做统一管理,从而与本地服务端隔离。
由于代理服务设置在远程服务端,因此可以减少自动化测试时本地服务端资源占用,提高自动化测试的稳定性,并且代理服务数据能够被各本地服务端共享,从而方便统一管理,降低测试工作量和提高测试效率。
具体地,请参阅图2所示,图中Client Side表示本地服务端,Web Server表示远程服务端,本地服务端和远程服务端具备通信连接。
本地服务端通过图2中的步骤Step1,即HTTP Post发出测试访问请求,可以启动代理服务。
代理服务包括图2中的步骤Step2和步骤Step3,包括:
代理服务把测试数据操作规则封装成Groovy脚本,在远程服务端直接编译Groovy脚本成Class类,并通过Groovy的类装载器,实时远程操作代理对象实例。
作为一种可选实施方式,通过GroovyClassLoader类加载器加载Class类,GroovyClassLoader是一个定制的类加载器,负责解释加载Java类中用到的Groovy类。
具体地,通过GroovyClassLoader类加载器加载Class类,包括:
动态加载App Proxy脚本并执行它的行为;
把Class类缓存起来;
然后通过反射获取目标方法,传递参数(App Proxy Instance)。因此,可以通过proxy实例执行代理服务的能力,类似本地操作代理服务一样。
作为本实施例的一种具体实施方式,可以通过以下代码启动远程的服务:
HttpServer server=HttpServer.create(new InetSocketAddress(8080),0);
server.createContext("/appProxy",new AppProxyHandler());
server.start();
再通过AppProxyHandler动态地加载App Proxy脚本并执行服务实例的行为:
private static AppProxy appProxy=new AppProxy();
@Override
public void handle(HttpExchange httpExchange)throws IOException{
DataRule r=DataRuleGenerator.by("Proxy.groovy");
String executedResult=r.apply(appProxy);
httpExchange.sendResponseHeaders(200,0);
OutputStream out=httpExchange.getResponseBody();
out.write(executedResult.getBytes());
out.close();
}
GroovyClassLoader loader=new
GroovyClassLoader(Thread.currentThread().getContextClassLoader());
try{
Class clazz=loader.parseClass(new File(ruleGroovyFile));
DataRule r=(DataRule)clazz.newInstance();
return r;
}catch(IOException e){
e.printStackTrace();
}catch(IllegalAccessException e){
e.printStackTrace();
}catch(InstantiationException e){
e.printStackTrace();
}finally{
}
请参阅图2所示,在本申请的另一实施例中,提供了一种自动化测试装置,可应用于实现上述实施例提供的自动化测试方法。
该自动化测试装置包括远程服务端Web Server和至少一个本地服务端ClientSide,远程服务端和至少一个本地服务端均通信连接。
本实施例中,图2中包括一个本地服务端,本地服务端包括N个测试终端,如TestClient 1、Test Client 2……Test Client N。可选地,测试终端可以是基于IOS(iPhoneOperation System,苹果移动设备操作系统)的手机。
远程服务端上部署有代理服务器,本地服务端远程启动代理服务器时,远程服务端通过代理服务器远程操作代理对象实例。
例如,本地服务端包括测试模块,测试模块用于向远程服务端发出测试访问请求;远程服务端包括启动模块,启动模块用于接收测试访问请求后,启动代理服务器。
在本实施例中,公开了代理服务器的一种具体结构,包括:
封装模块,用于将测试数据操作规则封装成Groovy脚本;
编译模块,用于将Groovy脚本编译成Class类;
加载模块,用于加载Class类;可选地,加载模块为GroovyClassLoader类加载器。
作为本实施例的一种可选实施方式,加载模块包括:
加载单元,用于动态加载App Proxy脚本并执行它的行为;
缓存单元,用于将Class类缓存起来;
传递单元,用于通过反射获取目标方法,传递参数。
由于在自动化测试方法实施例中已经详细阐明了测试原理,因此此处不再对自动化测试装置的测试原理赘述。
本实施例提供的自动化测试装置,将自动化测试代理服务由本地服务变为远程服务,可以减少自动化测试时本地服务端资源占用,提高自动化测试的稳定性,并且代理服务数据能够被各本地服务端共享,从而方便统一管理,降低测试工作量和提高测试效率。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
- 一种自动化攻击测试方法及基于此的自动化安全测试方法
- 一种天线远场发射端自动化测试装置及其自动化测试方法