具体实施方式
在下面的描述中,出于说明的目的,为了提供对一个或多个实施例的全面理解,阐述了许多具体细节。然而,很明显,也可以在没有这些具体细节的情况下实现这些实施例。在其它例子中,为了便于描述一个或多个实施例,公知的结构和设备以方框图的形式示出。
现有的测试方案中,想要测试哪种网络,必须要使用与该网络相对应的手机卡,如果没有手机卡则无法进行测试,因此,本发明提出一种测试处理方案,可以根据测试程序当前接入的网络类型虚拟成想要测试的网络类型,例如测试程序当前接入的是3G网络,而需要测试2G网络,在不使用2G卡的情况下,将3G网络虚拟成2G网络进行测试。
以下将结合附图对本发明的具体实施例进行详细描述。
图1示出了根据本发明实施例的测试处理方法的流程。
如图1所示,本发明实施例提供的测试处理方法,首先,分别获取待测试网络的类型信息和测试程序当前接入网络的类型信息;其中,通过在测试程序内部的网络类型文件中***与待测试网络的类型相对应的文件,获取待测试网络的类型信息;其中,待测试网络的类型信息包括待测试网络的类型和表示待测试网络的类型的第一网络类型返回值;测试程序当前接入网络的类型信息包括测试程序当前接入网络的类型和表示测试程序当前接入网络的类型的第二网络类型返回值(步骤S110);
在测试程序当前接入网络的类型与待测试网络的类型不同时,通过将第二网络类型返回值替换为第一网络类型返回值,使测试程序当前接入的网络类型变为接入待测试网络的类型(步骤S120)。
需要说明的是,获取表示待测试网络的类型的第一网络类型返回值可以与获取待测试网络的类型同时进行,也可以在获取待测试网络的类型之后进行,同理,获取表示测试程序当前接入网络的类型的第二网络类型返回值可以在获取测试程序当前接入网络的类型同时进行,也可以在获取测试程序当前接入网络的类型之后进行。
还需要说明的是,在测试程序内部的网络类型文件中***与待测试网络的类型相对应的文件的过程称为程序插桩,程序插桩是借助往被测程序中***操作,来实现测试目的的方法。程序插桩的基本原理是在不破坏被测试程序原有逻辑完整性的前提下,在程序的相应位置上***一些探针,这些探针本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用,通过探针的执行并输出程序的运行特征数据,基于对这些特征数据的分析,揭示程序的内部行为和特征。
为了更详细的说明本发明实施例提供的测试处理方法,图2示出了根据本发明实施例的测试处理方法的详细流程。如图2所示,本发明实施例提供的测试处理方法的详细流程,包括:
步骤S210:修改build脚本,对class文件进行插桩。
修改build脚本是为了插桩做准备工作,修改build脚本使代码变成应用文件,build脚本会告诉build工具要把插桩的代码包含进去。以一个具体实施方式为例,在build.xml中***一个antcalltarget,target为aspectj单独放在build_aspectj.xml。
图3a和图3b分别示出了根据本发明实施例的修改build脚本的情景。
如图3a所示,在build.xml中***一个antcalltarget,antcall用于调用本脚本文件中的target。
如图3b所示,target为aspectj单独放在build_aspectj.xml,aspectj用来生成class文件。
class文件即为测试程序内部的网络类型文件,对网络类型文件进行插桩,也就是对class文件进行插桩,***的是与待测试网络的类型相对应的文件。
步骤S220:编译插桩后的class文件,形成测试程序。
如果是安卓***,编译后形成的是apk格式的测试程序,如果是ios***,编译后形成的是ipa格式的测试程序。
步骤S230:启动测试程序,获取应用程序当前接入网络的类型信息和待测试网络的类型信息。
应用程序当前接入网络的类型信息包括应用程序当前接入网络的类型和代表当前接入的网络类型的第二网络类型返回值。
获取当前接入网络的类型信息的方式可以使用***提供API的方式获取,提供的API包括:
android.net.NetworkInfo.getType()、
android.net.NetworkInfo.getSubType()、
android.telephony.TelephonyManager.getNetworkType()。
通过上述的API接口就能获取测试程序当前接入的网络类型和表示该网络类型的第二网络类型返回值。
待测试网络的类型信息是通过在测试程序内部的网络类型文件中***与待测试网络的类型相对应的文件获取的,而与待测试网络的类型相对应的文件是通过配置文件方式或socket通信方式生成的。
与待测试网络的类型相对应的文件即为预设的网络配置文件,也就是用户设置的网络配置文件,网络配置文件包括待测试网络的类型和第一网络类型返回值两方面内容,预设的网络类型就是待测试网络的类型,也就是需要用户设置的网络类型,第一网络类型返回值代表待测试网络的类型,也是通过用户设置的。
因此,通过在测试程序内部的网络类型文件中***与待测试网络的类型相对应的文件获取的待测试网络的类型信息包括待测试的网络类型和表示该网络类型的第一网络类型返回值,都是通过用户设置的网络配置文件获取的。
上述获取当前接入网络的类型信息和待测试网络的类型信息是不分先后顺序的,既可以先获取待测试网络的类型信息,也可以先获取当前接入网络的类型信息。
图4示出了根据本发明实施例的网络类型与网络类型返回值的对照图,其中,wifi网络类型对应的网络类型返回值为0*99999999,GPRS网络类型对应的网络类型返回值为0*000000001,其它网络类型与其相对应的网络类型返回值参考图4。
步骤S240:判断测试程序当前接入网络的类型与待测试网络的类型是否相同;如果相同,执行步骤S260;如果不相同,执行步骤S250。
步骤S250:将第二网络类型返回值替换为第一网络类型返回值。
在将第二网络类型返回值替换为第一网络类型返回值后,测试程序当前接入网络的类型会虚拟成待测试网络的类型,此时,已完成虚拟待测试网络类型的工作,测试程序可以根据虚拟的待测试网络进行测试。
步骤S260:按照默认方式处理。
默认方式指的是不进行第一网络类型返回值和第二网络类型返回值的替换,由于待测试网络的类型与测试程序当前接入的网络类型相同,不需要改变网络类型即可测试,因此,无需进行第一网络类型返回值和第二网络类型返回值的替换。
为了进一步体现发明效果,将采用本发明取得的效果与传统测试方法取得的效果进行比较,下面进行了两组测试:
第一组,测试“当网络从wifi切换到移动网络时,浏览器会自动切换到极速模式”
按照传统测试方法,需要覆盖的场景非常多,如wifi、GPRS、WCDMA等等移动网络,在wifi网络和上述那些网络之间互相切换,并且,在切换网络之后不一定能正确切换到极速模式。而国外网络,除了需要特定的手机卡之外,又需要特殊的手机设备,实际上测试起来非常麻烦。
而使用本发明提供的测试处理方法,只需要在程序代码中插桩,通过修改与网络类型相对应的网络类型返回值,即可伪装成对应的网络,不需要真实地使用特殊手机卡和手机设备即可测试,而测试效果与传统测试方法相同。
第二组,测试“某照片类app,当用户在wifi环境下时,自动下载云端数据,并预上传用户本地照片;而当在mobile网络下时,不做自动下载和预上传”逻辑的正确性。
传统测试方法,使用特定mobile网络卡+相应的手机设备,然后在这种网络环境下验证逻辑的正确性。然后在mobile网络下上传和下载速度比wifi都慢很多,而逻辑的验证本身和网络速度并没有联系。
使用本发明提供的测试处理方法,是在测试过程中使用插桩的方法模拟了mobile网络,并不真正需要特定mobile网络卡+相应的手机设备,整个过程使用的全是wifi网络,这种测试方案易实现、低成本、低耗时,且对结果不造成任何干扰。
与上述测试处理方法相对应,本发明提供一种测试处理装置。图5示出了根据本发明实施例的测试处理装置的逻辑结构。
如图5所示,本发明实施例提供的测试处理装置500,包括文件插桩单元510、待测试网络类型信息获取单元520、当前网络类型信息获取单元530和返回值替换单元540。
其中,文件插桩单元510用于在测试程序内部的网络类型文件中***与待测试网络的类型相对应的文件。
待测试网络类型信息获取单元520,用于通过***的与待测试网络的类型相对应的文件,获取待测试网络的类型信息;其中,待测试网络的类型信息包括待测试网络的类型和表示待测试网络的类型的第一网络类型返回值;
当前网络类型信息获取单元530,用于获取测试程序当前接入网络的类型信息;其中,测试程序当前接入网络的类型信息包括测试程序当前接入网络的类型和表示测试程序当前接入网络的类型的第二网络类型返回值;
返回值替换单元540,用于在测试程序当前接入网络的类型与待测试网络的类型不同时,将第二网络类型返回值替换为第一网络类型返回值,使测试程序当前接入网络的类型变为接入待测试网络的类型。
图6示出了根据本发明实施例的测试处理装置的一个具体实施方式的逻辑结构。
如图6所示,测试处理装置500还包括网络类型判断单元550,用于在获取待测试网络的类型信息和测试程序当前接入网络的类型信息后,判断测试程序当前接入网络的类型与待测试网络的类型是否相同;如果相同,不进行第二网络类型返回值与第一网络类型返回值的替换;如果不相同,返回值替换单元540将第二网络类型返回值替换为第一网络类型返回值,使测试程序当前接入网络的类型变为接入待测试网络的类型。
其中,测试处理装置500进一步文件生成单元560,用于通过配置文件方式或socket通信方式生成与待测试网络的类型相对应的文件。
另外,在当前网络类型信息获取单元530获取测试程序当前接入网络的类型信息的过程中,通过测试程序提供API的方式获取测试程序当前接入网络的类型信息;其中,测试程序提供的API包括:
android.net.NetworkInfo.getType();
android.net.NetworkInfo.getSubType();
android.telephony.TelephonyManager.getNetworkType()。
本发明还相应提供一种设备终端,参见图7,该设备终端700包括用于存储网络类型信息的存储器710和测试处理装置500,其中,测试装置包括:
文件插桩单元,用于在测试程序内部的网络类型文件中***与待测试网络的类型相对应的文件。
待测试网络类型信息获取单元,用于通过***的与待测试网络的类型相对应的文件,获取待测试网络的类型信息;其中,待测试网络的类型信息包括待测试网络的类型和表示待测试网络的类型的第一网络类型返回值;
当前网络类型信息获取单元,用于获取测试程序当前接入网络的类型信息;其中,测试程序当前接入网络的类型信息包括测试程序当前接入网络的类型和表示测试程序当前接入网络的类型的第二网络类型返回值;
返回值替换单元,用于在测试程序当前接入网络的类型与待测试网络的类型不同时,将第二网络类型返回值替换为第一网络类型返回值,使测试程序当前接入网络的类型变为接入待测试网络的类型。
测试处理装置具有图5中所描述的结构,具体参见前面描述,此处不再赘述。
以上内容详细描述了本发明提供的测试处理方法及装置,通过插桩的方法将表示待测试网络的类型的第一网络类型返回值***到测试程序内部,用第一网络类型返回值替换与测试程序当前接入网络的类型相对应的第二网络类型返回值,从而将测试程序当前接入的网络类型虚拟成待测试网络的类型,实现虚拟不同的网络环境用于测试。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。