安卓界面自动化测试方法、装置及系统的制作方法_3

文档序号:8502117阅读:来源:国知局
序源代码就可实现自动化测试,而且不需要对应用进行重签名,还可同时测试多个应用或多个进程。并且支持所有的安卓系统,支持使用控件标识定位,支持操作Web页面,由于是在计算机上编写测试用例,因此还可以进行多终端的协同测试。
[0077]下面采用一个具体的实施例,对图1和图2所示方法实施例的技术方案进行详细说明。
[0078]图3为本发明安卓界面自动化测试方法实施例三中测试桩注入过程的流程图,如图3所示,过程包括:
[0079]S301、根据测试端发送的测试指令中包含的被测应用的代码查找代码对应的被测应用的进程标识。
[0080]S302、将被测应用的进程标识对应的被测进程附加到目标进程,具体为调用Ptrace函数将被测进程附加到目标进程。
[0081]S303、分别获取mmap函数、dlopen函数和dlsym函数在目标进程中的地址。
[0082]S304、在目标进程中调用dlopen函数加载测试桩加载器(libexloader.so)。
[0083]S305、在目标进程中调用dlsym函数获取libexloader.so模块中目标函数(1adDex函数)的地址。
[0084]S306、在目标进程中调用1adDex函数。
[0085]其中,S306具体为:
[0086]S306a、获取 JNIEnv 指针。
[0087]S306b、调用 ClassLoader.getSystemClassLoader 获取 ClassLoader 类实例。
[0088]S306c、创建DexClassLoader类实例,加载测试桩类。
[0089]S306d、调用 DexClassLoader.findClass 获取测试桩类。
[0090]S306e、调用测试桩类的入口函数。
[0091]S307、创建Socket服务端线程,监听测试端发送的连接。
[0092]S308、调用Ptrace函数恢复被测进程运行。
[0093]上述过程完成后,即实现了测试桩的动态注入,注入完成时,测试桩已经在被测进程中创建了 Socket服务端,用于监听测试端发送的连接。Socket服务端监听到来自测试端的测试程序的连接后,与测试端建立连接,建立连接后测试程序会发送一系列的操作指令给第一服务端,第一服务端接收测试程序发送的操作指令并执行操作指令,返回执行结果给测试程序。操作指令包括:获取控件树,或,获取控件文本,或,点击按钮等操作。Socket服务端监听到来自测试端的测试程序的连接后,与测试端建立连接,建立连接后测试程序会发送一系列的操作指令给第一服务端,第一服务端接收测试程序发送的操作指令并执行操作指令,返回执行结果给测试程序。操作指令包括:获取控件树,或,获取控件文本,或,点击按钮等操作。
[0094]图4为本发明服务端实施例一的结构示意图,服务端运行在安卓设备上,如图4所示,本实施例的服务端可以包括:查找模块11、处理模块12、获取模块13和创建模块14,其中,查找模块11用于根据测试端发送的测试指令中包含的被测应用的代码查找代码对应的被测应用的进程标识。处理模块12用于将被测应用的进程标识对应的被测进程附加到目标进程。获取模块13用于分别获取用于分配内存的函数在目标进程中的第一地址、用于加载动态链接模块的函数在目标进程中的第二地址和用于获取测试桩加载器模块中目标函数的地址的函数在目标进程中的第三地址。创建模块14用于在目标进程中通过依次调用用于加载动态链接模块的函数、用于获取测试桩加载器模块中目标函数的地址的函数和目标函数,在被测进程中创建第一服务端,以使测试端通过第一服务端对被测进程进行测试。
[0095]进一步地,服务端还包括:接收模块,该接收模块用于在查找模块根据测试端发送的测试指令中包含的被测应用的代码查找代码对应的被测应用的进程标识之前,接收测试端发送的测试信令。
[0096]进一步地,处理模块12还用于:在目标进程中通过依次调用用于加载动态链接模块的函数、用于获取测试桩加载器模块中目标函数的地址的函数和目标函数,在被测进程中创建第一服务端之后,监听来自测试端的测试程序的连接。
[0097]处理模块12还用于:监听到来自测试端的测试程序的连接后,与测试端建立连接。接收模块还用于接收测试程序发送的操作指令。
[0098]处理模块12还用于执行操作指令。
[0099]服务端还包括:发送模块,该发送模块用于返回执行结果给测试程序。
[0100]其中,操作指令包括:获取控件树,或,获取控件文本,或,点击按钮。
[0101]本实施例的服务端,可以用于执行图1所示方法实施例的技术方案,其实现原理类似,此处不再赘述。
[0102]本实施例提供的服务端,通过查找模块根据被测应用的代码查找代码对应的被测应用的进程标识后,处理模块将被测进程附加到目标进程,接着获取模块分别获取mmap函数、dlopen函数和dlsym函数在目标进程中的地址,创建模块在目标进程中通过依次调用mmap函数、dlopen函数和dlsym函数,完成测试桩的动态注入,仓Il建了第一服务端,使得测试端通过该第一服务端对被测进程进行测试。从而在测试过程中无需获取被测应用的程序源代码就可实现自动化测试,而且不需要对应用进行重签名,还可同时测试多个应用或多个进程。并且支持所有的安卓系统,支持使用控件标识定位,支持操作Web页面,由于是在计算机上编写测试用例,因此还可以进行多终端的协同测试。
[0103]图5为本发明测试端实施例一的结构示意图,测试端运行在计算机上,如图5所示,本实施例的测试端可以包括:发送模块21和处理模块22,其中,发送模块21用于向服务端发送测试指令,测试指令包含被测应用的代码,以使服务端接收到测试指令后根据代码查找代码对应的被测应用的进程标识,在被测应用的进程标识对应的被测进程中创建第一服务端。处理模块22用于通过第一服务端对被测进程进行测试。
[0104]进一步地,发送模块21还用于:在处理模块通过第一服务端对被测进程进行测试之前,向服务端发送测试程序的连接,以使服务端监听到连接后与测试端建立连接。
[0105]进一步地,发送模块还用于:向服务端发送操作指令;
[0106]测试端还包括:接收模块,该接收模块用于接收服务端返回的执行结果。其中,操作指令包括:获取控件树,或,获取控件文本,或,点击按钮。
[0107]本实施例的装置,可以用于执行图2所示方法实施例的技术方案,其实现原理类似,此处不再赘述。
[0108]本实施例提供的测试端,通过发送模块向服务端发送测试指令,用于服务端根据被测应用的代码查找代码对应的被测应用的进程标识后,将被测进程附加到目标进程,接着分别获取_ap函数、dlopen函数和dlsym函数在目标进程中的地址,在目标进程中通过依次调用mmap函数、dlopen函数和dlsym函数,完成测试桩的动态注入,仓Il建了第一服务端,进而处理模块通过该第一服务端对被测进程进行测试。从而在测试过程中无需获取被测应用的程序源代码就可实现自动化测试,而且不需要对应用进行重签名,还可同时测试多个应用或多个进程。并且支持所有的安卓系统,支持使用控件标识定位,支持操作Web页面,由于是
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1