51Testing软件测试网DOz)|6Sq(H 本节将在上一小节整体实现框架的基础上,具体分析下实现层两种数据初始化方式的实现细节。
w"y8GR `l5g)_0H3Pew7Iz#j0 一、利用Provider方式的数据初始化
L$~!s.e5Hk%P{j(R-U0'b0sLCA/b4w;e0 Android系统架构为了使一些重要的公用数据能够方便地在各个应用之间进行交互,提供了Content Provider来封装数据访问和存储的具体实现。利用Content Provider进行数据初始化的方式可分为以下四个步骤:51Testing软件测试网*B)@Rqe,~
0WY8Qm'Ay K0 1)获取要初始化应用资源唯一标识符。
[5n)o2K"wK051Testing软件测试网nob.LW Fy1^cm/L
图4 资源唯一标识符
#vD$[j,rzDwl0 初始化数据的第一步当然是找到被初始化的应用标识符,android系统中的每一个Content
Provider都有一个唯一的名字,它是其它应用和该Provider交互的一种便捷途径。上图是一个Provider的通用表达,其中A表示标准前
缀,B表示URI,C是具体路径,D是URI中的某个数据ID(如果存在的话)。
7x*H3tr+oq0 2)准备数据源,并制定数据生成规则。51Testing软件测试网6wq1K}7ez
51Testing软件测试网!p
Zx7C)n,r$v%s
图5 准备初始化数据和制定数据生成规则
/sE M[VC f R0 在获取到被初始化应用的资源标识符后,根据应用数据结构的表间依赖和表内字段准备一定格式和数量的源数据,然后结合应用本身的表现制定数据的生成规则。
;SP!^6W"}iog0 3)清理已有杂乱数据。51Testing软件测试网Y~9e7mAJC
在初始化数据之前,为了避免“脏数据”带来的被测应用数据场景和实际用户数据场景之间的偏差,在开始初始化数据之前,工具会首先清理已有杂乱数据。51Testing软件测试网#Z[Rc9K;Gc&m
4)生成数据,并利用Content Provider初始化应用数据。
`:BT9yLM8U;]8C4P051Testing软件测试网+Pop"O^+|ZH
图6 初始化应用数据
w}5f"?b%wPR051Testing软件测试网"i$UTC?:R 获取被初始化应用的资源标识符后,利用该资源标识符提供的函数直接将生成的用户个性化数据插入到应用中去,即完成了本应用的数据初始化工作。
_o!FKS&G-[\i(`051Testing软件测试网]:EFx(hm9mY 其中利用Content Provider后,插入的源数据的格式不用过分关注,因为Content Provider是利用表的方式来组织数据的,下表用一张联系人的电话表单举例:51Testing软件测试网:x]q9I]sj;M
表1 电话联系人Content Provider表51Testing软件测试网hT3\!C5g5rMt
u:mW-x{^bCtR0_ID 3a2R*ZU~@0 | NUMBER51Testing软件测试网8X2cd|~5d | NUMBER_KEY B E[$r8t!oVb#l0 | LABEL *sN7H#O)B[T~Rw*^z0 | NAME51Testing软件测试网;[F'{jr~2]X | TYPE N%Wm"zUg"fC^2o0 |
…51Testing软件测试网6|2K:L~\ D4h-r
B
\ | … ,[ aED;l-eD!ht`0 | … ,c!c)xq~(qH*s!Em:r0 | … *mF_|"c/L)U3J8}0 | …51Testing软件测试网&g
Cu1|Iw | …51Testing软件测试网:a0XpA4S`7p Q |
…51Testing软件测试网v
WWr6rHlq | … 0^g}%u5e/?1Tv3p a0 | …51Testing软件测试网lm;E-GDQ | … 4f)m4`D3WM'Q0 | …51Testing软件测试网m7t:RG0i nxQ4?e | …51Testing软件测试网)xK"rk1xW A |
该表形象描述了联系人的结构,当工具初始化联系人应用数据时,只需重点关注以上字段(举例)就可以了。
3@B}O.X%V7d
N0 以上介绍了第一类数据初始化的方式,该类方式利用系统公用数据提供的Provider,间接操作应用数据存储等相关操作,从而完成应用数据的初始化工作。
]+i4PJ8\R;Le0 二、利用文件流方式的数据初始化51Testing软件测试网 ],{]TXnM4~
对于文件、文件夹、图片等存储在SD卡中的应用数据的初始化方式,系统并未提供标准的存储方式供应用使用,故对于此类应用数据的初始化,工具采用文件流交互的方式完成。这类应用的数据初始化方式和第一类大致相同,具体如下:51Testing软件测试网X2}'^R'T`,rP
1)获取要存储文件的路径。
K!fj-W)sDF2@0 第一类应用数据因为要存储在应用的数据库中,而数据库是用唯一的资源标识符区分,故其第一步就是获取该应用特定的标识符。第二类应用数据的初始化是存储在SD卡中,故初始化的第一步就是确定要存储数据文件的路径。
2a`Cn[4N(y0 2)准备源文件。参考上文。
r8N$f1E!eF0h0 3)清除已有杂乱数据。参考上文。51Testing软件测试网`k;S1by
k }:Ld
4)利用文件流交互方式初始化应用数据。51Testing软件测试网5f.Gxx }JBT:v
51Testing软件测试网c;|Y/e;f
图7 文件流交互方式初始化应用数据
?${q,U%G
tm)Q0 利用准备的源文件,开启多个文件流交互线程并行完成应用数据的初始化工作。并行文件流读取也大大提高了此类应用数据初始化的效率。51Testing软件测试网/m5?3C kN
以上介绍了利用文件流交互方式进行的数据初始化工作,该工具中的文件、文件夹、图片等应用数据的初始化工作就是利用此种方式完成的。两种数据初始化方式的过程基本一致,只是在对象的获取和数据的写入方式上有些许的差别。51Testing软件测试网$U:U1`.`aN6e
应用效果
B.e,_;Jw6_,v0 该工具很好的从数据角度解决了用户数据模拟填充的问题,从而使手机测试人员能够更加方便地模拟用户场景,站在用户的角度对产品进行测试。具体来说,该工具的应用效果可以从以下三个方面来看:51Testing软件测试网}5@&_imX
1)全面支持命令行方式执行。支持完全自动化方式运行该工具,大幅缩短测试人员测试环境准备的时间30%以上。51Testing软件测试网6As y,au'^o
2)为Monkey测试提供初始化环境支持。目前该工具已经运行在Lab、EP,为其提供运行Monkey测试之前的环境初始支持。51Testing软件测试网2E)E,UI j fC ?u:F1l
3)封装实现类支持其他工具的二次开发。该工具的实现类Jar包,已经在Stress Test等工具中,应用于其初始压力数据模块。
Tt1B^tX?0ti0