Linux下SANE Driver自动化测试工具的设计与实现
2.4 脚本扫描 实现时,每扫描一次,均创建一个新线程,下一次扫描要等上一线程结束后才开始。
脚本扫描与手动扫描是相互独立的。用户可以只选择手动扫描,也可以只选择脚本扫描。不过,它们之间有着紧密的联系,其扫描流程都是一样的。手动扫描与脚本扫描的结构体系如图1所示。脚本扫描可以看作是多次的手动扫描,所不同的是,手动扫描是从界面获得选项值,而脚本扫描是从文本获得选项值。
脚本扫描的流程是:首先检查脚本的语法正确性,然后分析脚本,遍历各个选项值的组合,每得到一个组合,便扫描一次,当扫描完成时,再取下一组合扫描直至遍历完所有的组合。
2.5 产生脚本
产生的脚本主要列出设备所支持的选项名字及其取值范围,然后以特定的格式写入脚本中[4]。由于结构体SANE_Option_Descriptor中包括选项的各种信息,因此结构体中的元素title可作为该选项的名字,而选项取值范围可从结构体中的联合体constraint得到。实现时,应允许用户选择保存路径。
2.6 遍历算法研究
在对SANE Driver测试时,一般会选中一些选项进行全组合或部分组合进行测试。以两个选项为例:mode值为 Color和Gray,resolution值为75和100,测试时就用Color 75、Color 100, Gray 75、 Gray 100四种组合扫描4次。xsane中的批次扫描采用了类似的方法,它将所要扫描的每种组合记录在文本中,然后通过读文本进行扫描。当扫描次数较多时,文本就非常冗长而且很难维护。
测试工具中采用的脚本使用了键值对的形式:
mode=Color,Gray,Binary
resolution=75,100,150,200,300,400,500,600,1 200,2 400,4 800,9 600,19 200
对于上面的脚本,通常会采用直接循环法:用下面一个结构体:
struct option {
char names[15];
char values[10][20];
} options[MAXOPTIONSNUMBER];
来存储每一种组合,用一个数组size保存各个选项值的个数。比如上例中,第一个选项mode有3个值,故size[0]=3;然后用一个数组index来存储选项的当前值,如mode第一个值为Color,则可表示为index[0]=Color。假如只有mode和resolution两个选项,那么只需2个for循环即可遍历选项的取值。其代码如下:
for(index[0]=0;index[0]size[0];index[0]++)
for(index[1]=0;index[1]size[1];index[1]++)
{
for(int i=0;i2;i++)
pass_option_setting_to_dev
(options[i].names,options[i].values[indexs[i]] );
// pass_option_setting_to_dev为传递参数给设备的函数
...
}
本文介绍的算法思路简单,容易理解。针对上例中的两个选项,采用上述的方法可以很好地解决问题。但是上述的算法中有多少个选项就有多少个for循环,而且该方法只适用于选项个数一定的情况下。因为当选项个数有变动时,都要增加或删除相应的for循环数。而现实中的脚本其选项的个数是不定的,因此上述的算法可扩展性较差,不适合用于脚本扫描。但只要对上述算法稍作修改即可成为一种简单高效的遍历算法[5]。该算法的脚本仍采用键值对这种简洁的脚本格式,并且可以很好地适应选项个数或者选项值个数的变化。假设变量OPT_NUM代表选项的个数,其代码如下:
while(1){
for( int i=0;iOPT_NUM;i++){
pass_option_setting_to_dev
(options[i].names,options[i].values[indexs[i]] );
...
}
int k= OPT_NUM-1;
while(1){
if(index[k]size[k]-1) {
index[k]++;break;
}
else{
index[k]=0; k--;
}
}
if(k0)
break;
}
3 测试工具对比
XSANE与自动化测试工具对比如表1所示。
本文以SANE标准为基础,针对xsane存在的不足,结合测试需求,实现了SANE Driver自动化测试工具。实际应用结果表明,与原有的测试工具相比,大大提高了测试效率,极大地减少了测试人员的工作量。
参考文献
[1] SANE home page[DB/OL].http://www.sane-project.org, 2001.
[2] 张安清.基于SANE标准的光栅扫描设备应用程序的开发[J].小型微型计算机系统,2001,22(10):1216-1218.
[3] 凌永发,张云生,郭秀萍.软件自动化测试中的脚本技术[J].云南民族学院学报(自然科学版),2002,11(1):544-548.
[4] 蒋云,赵佳宝.自动化测试脚本自动生成技术的研究[J].计算机技术与发展,2007,17(7):4-7.
[5] 《编程之美》小组.编程之美:微软技术面试心得[M].北京:电子工业出版社,2008.
- 基于数字测试系统的LCD控制驱动电路测试方法(07-07)
- 基于Linux多任务操作系统扫频仪的研究(11-16)
- 基于嵌入式Linux的磁场测量系统(03-26)
- 盖茨:我们最强有力的对手是Linux(06-25)
- 基于ARM的嵌入式电能计量系统设计(04-28)
- 嵌入式系统的虚拟仪器成测试系统新思路(10-10)