FactoryKit实现自动测试

时间:2024-03-27 15:57:55

一、说明
FactoryKit即工程测试,用于工厂在手机出厂之前的测试。
二、需求
修改vendor下的android\vendor\qcom\proprietary\qrdplus\FactoryKit的代码,其中想说的一点,先看一下,这个系统版本有没有FactoryKit,如果没有,考虑用哪个版本,要考虑版本之间的差异性,看用哪个比较合适,接下来看一下此次实现的如下
功能:
1、通过PC打开该程序,直接实现自动测试。
2、实现测试自己需要的项目。
3、测试完把数据存放在SystemProperties里面,以供PC端可以去获取该值。
4、测试完所有项自动关闭该程序。
先上一张本身的效果图,如下:
FactoryKit实现自动测试
三、设计
如上图所示,其实可以看出,本身有这些测试项,而且上边看菜单按钮得知,其本身是有自动测试功能的,所以我们要做的规划如下:
1、本身是有自动测试,所以我们要把自动测试在打开该界面的时候就触发自动测试的逻辑
2、去掉没用的测试项,添加自己的测试项
3、在自己的测试项里添加储存值的逻辑
4、找到自动测试逻辑,在测试结束加上finish
要添加一个系统应用嘛,需要在系统的mk文件里添加该模块,和修改该程序Android.mk所以可以看一下前边的文章URL=http://blog.csdn.net/wdyshowtime/article/details/77447623,这一块就不多说了
四、实现
(1)整体逻辑了解,并添加上打开程序自动测试,与测试结束自动关闭程序。
先看一下整体的代码目录:
FactoryKit实现自动测试
可以看出,针对每一项测试都会有对应一个文件夹,
首先,通过AndroidManifest.xml可以看出哪个为该程序的Launcher界面,
如图:
FactoryKit实现自动测试
找到代码如下:
FactoryKit实现自动测试
FactoryKit实现自动测试
FactoryKit实现自动测试
如图可知,它是应用了ListActivity,通过android的pull解析并去解析xml文件来获取要测试的项,所以修改测试项则会咋如下图的xml中修改:
(在res/xml中找到你当前适配你当前机型的文件,如果没有会默认到一个default的文件中)
FactoryKit实现自动测试
在其中,添加需要测试的项,去掉不需要的项。
接下去添加打开这个界面就开始自动检测的逻辑,你知道怎么实现自动测试的逻辑吗?其实它是通过startActivityForResult()和onActivityResult()搭配使用,如下图:
startActivityForResult():
FactoryKit实现自动测试
onActivityResult():
FactoryKit实现自动测试
其中会判断有没有还未测试的项,如果有会发送一个handler,mHandler.postDelayed(mRunnable,*)的方法,接着追mRuunable,看它怎么处理的,如图:
FactoryKit实现自动测试
由图可知,它也是判断当前测试到哪一项了,然后如果没有则重置标志位,如果有则接着去请求发送startActivityForResult()。
这是在初始化onCreate中添加这个逻辑,如图:
FactoryKit实现自动测试
如图可知,cleanTestState()是先清除上次检测的结果:
FactoryKit实现自动测试
重置自动测试的标志位:toStartAutoTest = true,因为下面会使用(由上边的onActivityResult()中会使用到)
当你请求的这些项都测试了,就不会继续了,如果还有就会接着请求过去。。。
然后考虑在哪添加测试完这些项,去执行结束的,我是在onActivityResult()中,当判断当前判断项已经没有了,重置自动测试标志位,然后super.finish()方法(这结束方法被坑了,因为本身这个类里面重写了这个方法,然后自己写了个逻辑,点击两下返回才会退出,因此这里咱们调用父类的finish方法就可以了)。
这里整体的逻辑已经结束了,这里说一下如何添加一个自己想要测试的项,其实可以考虑别的测试项的设计,我想添加一个信号强度的测试项目。(SignalStrength)
(2)了解并添加一个测试项,并添加测试完存储逻辑
这里也要创建一个自己的文件夹SignalStrengthInfo,然后在创建SignalStrengthInfo.java,因为xml中是这样获取到要测试的项,如图:
FactoryKit实现自动测试
下面就说一下测试项的大体的思路以及对测试完的结果的存储(SystemProperties)
1、因为是自动测试,所以要考虑到耗时,需要耗时才能拿到结果
2、因此需要一个CountTimer,当计时超时的时候说明在一段时间未获取到结果,返回失败的处理
3、一般测试一个状态,需要监听手机的一个组件,当获取成功时则会有成功处理
接下来看代码:
设置一个定时器,当超过时间就返回失败
FactoryKit实现自动测试
初始化数据:
FactoryKit实现自动测试
监听listener:
FactoryKit实现自动测试
由图可知,当信号值变化的时候,即可获取到值,则做成功处理
失败的处理:
FactoryKit实现自动测试
成功的处理:
FactoryKit实现自动测试
界面onDestory的处理:
FactoryKit实现自动测试
现在说说利用SystemProperties的存值:
1、如果你想有个默认值可以去路径android\device\qcom\msm8909_512\system.prop,初始化一个默认值如下图:
FactoryKit实现自动测试
成功的时候存值:
FactoryKit实现自动测试
生命私有静态常量:
FactoryKit实现自动测试
失败的时候存值:
FactoryKit实现自动测试
在这里解释一下,SystemProperties的set方法,参数第一个是key值,第二个是String,要存的值,无论你存的是int、float、boolean等等,不过你取的时候就是getInt(String keyValue)、getBoolean(String keyValue)了
另外说一点可以通过连接手机,然后通过adb shell命令读取文件值,获取到刚刚你存储的状态。

FactoryKit代码url = http://download.csdn.net/download/wdyshowtime/9963626

Over!