微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > Linux下SANE Driver自动化测试工具的设计与实现

Linux下SANE Driver自动化测试工具的设计与实现

时间:03-27 来源:互联网 点击:

SANE(Scanner Access Now Easy)是一个应用程序接口API(Application Programming Interface)[1],提供了对光栅图像扫描硬件的标准访问[2]。Linux对扫描仪的支持就是通过SANE实现的。SANE标准中将实现SANE接口的驱动程序称为SANE Driver或者SANE后端程序;将调用SANE接口的应用程序称为SANE前端程序;将对扫描设备的各种控制抽象为SANE选项,resolution就是其中一个SANE选项。
 对扫描仪驱动程序进行测试主要包括功能测试和性能测试。功能测试主要指扫描质量、图像质量是否满足用户需求;性能测试主要指扫描效率,也就是扫描一幅图像所需的时间。严格地说,由于SANE前端程序与SANE后端程序均遵守SANE标准,任何一个SANE前端程序都可以用来测试SANE后端程序。但由于目前Linux下没有专门的SANE Driver测试工具,通常测试人员将扫描应用程序用于测试SANE Driver,而在Linux下常用XSANE作为测试工具。XSANE应用程序是基于GTK的sane图像处理软件,它可通过扫描仪和照相机等设备获得图像。
 XSANE功能比较强大,但是由于其主要面向用户应用,作为测试工具则存在一些不足:(1)功能测试时效率低下,如果所要测试的选项数目比较多时,测试的工作量很大而且容易出错,而其所支持的批次扫描生成脚本很复杂,而且脚本很难维护;(2)性能测试时不能自动计算扫描时间,手工计算工作量大且误差也较大。此外,还存在一些其他问题:如不能显示选项的详细信息、不能动态更新可用的扫描设备以及不能选择其他可用设备等。
 针对以上问题,本文通过引用脚本技术[3],采用一种高效的遍历算法工具,有效地解决了上述问题。该工具能够适用所有采用SANE标准的驱动程序,且能够自动遍历所有的选项及其取值。用户只需根据测试需要写好测试脚本,该工具就可以根据脚本进行多次扫描。因此可以较大程度地减少SANE Driver测试所需的人员及其时间。
1 整体架构设计
 针对XSANE用作测试工具存在的问题以及测试需求,通过如下设计能得到有效解决。将工具分成5个功能模块:更新设备、列出选项、手动扫描、脚本扫描以及产生脚本。
 (1)更新设备:支持用户随时更新设备列表。
 (2)列出选项:可以列出SANE后端所定义的所有选项,且只显示当前设备所支持选项的相关信息,还可以根据用户的选择相应地显示SANE后端的版本号及一些设置冲突的警告信息。
 (3)手动扫描:类似一般的前端程序,主要实现单次扫描,只显示当前设备所支持的选项及其取值。
 (4)脚本扫描:是自动化测试的关键。能够读入一个脚本文件,然后对脚本中各选项的组合值进行遍历,每取到一个组合,便扫描一次。
 (5)产生脚本:可以将当前设备所支持的选项及其取值范围记录在脚本文档中。该脚本相当于一个脚本模板,以后的脚本可以只在此基础上稍作修改即可。
2 工具的实现
 基于以上架构设计在Linux系统下用GTK+和C语言来实现整个工具。
2.1 更新设备
 在用户扫描过程中,可能会有新的扫描设备打开,也可能现有的扫描设备关闭,因此,有必要让用户随时知道可用的设备列表。其设计思路是:在选择更新设备后,调用sane_get_devices来获得可用的设备列表。实现时,为了允许用户在更新设备时进行其他操作,可将更新的操作放至一个新的线程中去实现。当可用设备为0时,应给用户相应的提示。
2.2 列出选项
 根据测试需要,这里要求给出SANE后端的版本号,可用选项的详细信息以及警告信息。关于版本号,SANE标准中给出了5个宏,该工具主要直接调用后面的3个宏:即SANE_VERSION_MAJOR、SANE_VERSION_MINOR、SANE_VERSION_BUILD,分别获得SANE后端最大、最小以及编译版本号。
对于选项的详细信息,SANE标准中有一个专门用来描述的结构即SANE_Option_ Descriptor。调用SANE标准中的sane_get_option_descriptor后便会返回这个结构体,记录这个选项的详细信息。
 警告信息主要通过分析结构体SANE_Option_ Descriptor中的cap值。由SANE标准可知,当SANE_CAP_ SOFT_SELECT被设置时,SANE_CAP_SOFT_DETECT也会被设置,故cap值不能为5;SANE_CAP_SOFT_SELECT和SANE_CAP_HARD_SELECT不能同时被设置,故cap值不能为3。当某一个选项的cap值不为3或5时,可认为这个选项设置是正确的。
 实现时,可以将版本信息、选项信息及警告信息分别写至三个文件中,然后根据用户的操作读入相应的文件。
2.3 手动扫描
 一次完整的扫描过程包括两个部分:配置设备和获取图像。配置设备主要通过sane_control_option来完成。sane_control_option可以用于获取选项的当前参数,也可以用于设置选项的参数。设置完参数后,先调用sane_start,然后一直调用sane_read读图像数据直至sane_read返回状态为SANE_STATUS_EOF,最后不管读图像是否成功均要调用sane_cancel。
 实现时,当用户选择手动扫描后会创建一个新的线程去执行,配置设备和获取图像均包含在新的线程中。每进行一次用户扫描,都会新建一个线程。同时为了方便测试人员,工具在手动扫描和后面的脚本扫描中均会记录一些重要信息:如图像的原始大小及实际获得的大小、 sane_start和sane_read的时间、一些操作的返回信息及图片保存目录和名字等。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top