《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > Linux下SANE Driver自動化測試工具的設(shè)計與實現(xiàn)
Linux下SANE Driver自動化測試工具的設(shè)計與實現(xiàn)
來源:微型機與應(yīng)用2012年第1期
翁省輝1,喻武龍2
(1.北京理工大學(xué) 珠海學(xué)院 計算機學(xué)院,廣東 珠海 519088;2.北京理工大學(xué) 珠海學(xué)院 信息
摘要: 目前Linux下沒有專門的SANE Driver測試工具。為解決此問題,以SANE標(biāo)準(zhǔn)為基礎(chǔ),結(jié)合對SANE Driver測試工具的具體需求,提出了一種基于腳本技術(shù)的設(shè)計和實現(xiàn)方案。該方案采用一種高效的遍歷算法,降低了腳本的維護開銷,提高了測試的自動化程度。
Abstract:
Key words :

摘  要: 目前Linux下沒有專門的SANE Driver測試工具。為解決此問題,以SANE標(biāo)準(zhǔn)為基礎(chǔ),結(jié)合對SANE Driver測試工具的具體需求,提出了一種基于腳本技術(shù)的設(shè)計和實現(xiàn)方案。該方案采用一種高效的遍歷算法,降低了腳本的維護開銷,提高了測試的自動化程度。
關(guān)鍵詞: Linux;SANE Driver;自動化測試;腳本技術(shù)

 SANE(Scanner Access Now Easy)是一個應(yīng)用程序接口API(Application Programming Interface)[1],提供了對光柵圖像掃描硬件的標(biāo)準(zhǔn)訪問[2]。Linux對掃描儀的支持就是通過SANE實現(xiàn)的。SANE標(biāo)準(zhǔn)中將實現(xiàn)SANE接口的驅(qū)動程序稱為SANE Driver或者SANE后端程序;將調(diào)用SANE接口的應(yīng)用程序稱為SANE前端程序;將對掃描設(shè)備的各種控制抽象為SANE選項,resolution就是其中一個SANE選項。
 對掃描儀驅(qū)動程序進行測試主要包括功能測試和性能測試。功能測試主要指掃描質(zhì)量、圖像質(zhì)量是否滿足用戶需求;性能測試主要指掃描效率,也就是掃描一幅圖像所需的時間。嚴(yán)格地說,由于SANE前端程序與SANE后端程序均遵守SANE標(biāo)準(zhǔn),任何一個SANE前端程序都可以用來測試SANE后端程序。但由于目前Linux下沒有專門的SANE Driver測試工具,通常測試人員將掃描應(yīng)用程序用于測試SANE Driver,而在Linux下常用XSANE作為測試工具。XSANE應(yīng)用程序是基于GTK的sane圖像處理軟件,它可通過掃描儀和照相機等設(shè)備獲得圖像。
 XSANE功能比較強大,但是由于其主要面向用戶應(yīng)用,作為測試工具則存在一些不足:(1)功能測試時效率低下,如果所要測試的選項數(shù)目比較多時,測試的工作量很大而且容易出錯,而其所支持的批次掃描生成腳本很復(fù)雜,而且腳本很難維護;(2)性能測試時不能自動計算掃描時間,手工計算工作量大且誤差也較大。此外,還存在一些其他問題:如不能顯示選項的詳細(xì)信息、不能動態(tài)更新可用的掃描設(shè)備以及不能選擇其他可用設(shè)備等。
 針對以上問題,本文通過引用腳本技術(shù)[3],采用一種高效的遍歷算法工具,有效地解決了上述問題。該工具能夠適用所有采用SANE標(biāo)準(zhǔn)的驅(qū)動程序,且能夠自動遍歷所有的選項及其取值。用戶只需根據(jù)測試需要寫好測試腳本,該工具就可以根據(jù)腳本進行多次掃描。因此可以較大程度地減少SANE Driver測試所需的人員及其時間。
1 整體架構(gòu)設(shè)計
 針對XSANE用作測試工具存在的問題以及測試需求,通過如下設(shè)計能得到有效解決。將工具分成5個功能模塊:更新設(shè)備、列出選項、手動掃描、腳本掃描以及產(chǎn)生腳本。
 (1)更新設(shè)備:支持用戶隨時更新設(shè)備列表。
 (2)列出選項:可以列出SANE后端所定義的所有選項,且只顯示當(dāng)前設(shè)備所支持選項的相關(guān)信息,還可以根據(jù)用戶的選擇相應(yīng)地顯示SANE后端的版本號及一些設(shè)置沖突的警告信息。
 (3)手動掃描:類似一般的前端程序,主要實現(xiàn)單次掃描,只顯示當(dāng)前設(shè)備所支持的選項及其取值。
 (4)腳本掃描:是自動化測試的關(guān)鍵。能夠讀入一個腳本文件,然后對腳本中各選項的組合值進行遍歷,每取到一個組合,便掃描一次。
 (5)產(chǎn)生腳本:可以將當(dāng)前設(shè)備所支持的選項及其取值范圍記錄在腳本文檔中。該腳本相當(dāng)于一個腳本模板,以后的腳本可以只在此基礎(chǔ)上稍作修改即可。
2 工具的實現(xiàn)
 基于以上架構(gòu)設(shè)計在Linux系統(tǒng)下用GTK+和C語言來實現(xiàn)整個工具。
2.1 更新設(shè)備
 在用戶掃描過程中,可能會有新的掃描設(shè)備打開,也可能現(xiàn)有的掃描設(shè)備關(guān)閉,因此,有必要讓用戶隨時知道可用的設(shè)備列表。其設(shè)計思路是:在選擇更新設(shè)備后,調(diào)用sane_get_devices來獲得可用的設(shè)備列表。實現(xiàn)時,為了允許用戶在更新設(shè)備時進行其他操作,可將更新的操作放至一個新的線程中去實現(xiàn)。當(dāng)可用設(shè)備為0時,應(yīng)給用戶相應(yīng)的提示。
2.2 列出選項
 根據(jù)測試需要,這里要求給出SANE后端的版本號,可用選項的詳細(xì)信息以及警告信息。關(guān)于版本號,SANE標(biāo)準(zhǔn)中給出了5個宏,該工具主要直接調(diào)用后面的3個宏:即SANE_VERSION_MAJOR、SANE_VERSION_MINOR、SANE_VERSION_BUILD,分別獲得SANE后端最大、最小以及編譯版本號。
對于選項的詳細(xì)信息,SANE標(biāo)準(zhǔn)中有一個專門用來描述的結(jié)構(gòu)即SANE_Option_ Descriptor。調(diào)用SANE標(biāo)準(zhǔn)中的sane_get_option_descriptor后便會返回這個結(jié)構(gòu)體,記錄這個選項的詳細(xì)信息。
 警告信息主要通過分析結(jié)構(gòu)體SANE_Option_ Descriptor中的cap值。由SANE標(biāo)準(zhǔn)可知,當(dāng)SANE_CAP_ SOFT_SELECT被設(shè)置時,SANE_CAP_SOFT_DETECT也會被設(shè)置,故cap值不能為5;SANE_CAP_SOFT_SELECT和SANE_CAP_HARD_SELECT不能同時被設(shè)置,故cap值不能為3。當(dāng)某一個選項的cap值不為3或5時,可認(rèn)為這個選項設(shè)置是正確的。
 實現(xiàn)時,可以將版本信息、選項信息及警告信息分別寫至三個文件中,然后根據(jù)用戶的操作讀入相應(yīng)的文件。
2.3 手動掃描
 一次完整的掃描過程包括兩個部分:配置設(shè)備和獲取圖像。配置設(shè)備主要通過sane_control_option來完成。sane_control_option可以用于獲取選項的當(dāng)前參數(shù),也可以用于設(shè)置選項的參數(shù)。設(shè)置完參數(shù)后,先調(diào)用sane_start,然后一直調(diào)用sane_read讀圖像數(shù)據(jù)直至sane_read返回狀態(tài)為SANE_STATUS_EOF,最后不管讀圖像是否成功均要調(diào)用sane_cancel。
 實現(xiàn)時,當(dāng)用戶選擇手動掃描后會創(chuàng)建一個新的線程去執(zhí)行,配置設(shè)備和獲取圖像均包含在新的線程中。每進行一次用戶掃描,都會新建一個線程。同時為了方便測試人員,工具在手動掃描和后面的腳本掃描中均會記錄一些重要信息:如圖像的原始大小及實際獲得的大小、 sane_start和sane_read的時間、一些操作的返回信息及圖片保存目錄和名字等。
2.4 腳本掃描
 腳本掃描與手動掃描是相互獨立的。用戶可以只選擇手動掃描,也可以只選擇腳本掃描。不過,它們之間有著緊密的聯(lián)系,其掃描流程都是一樣的。手動掃描與腳本掃描的結(jié)構(gòu)體系如圖1所示。腳本掃描可以看作是多次的手動掃描,所不同的是,手動掃描是從界面獲得選項值,而腳本掃描是從文本獲得選項值。
腳本掃描的流程是:首先檢查腳本的語法正確性,然后分析腳本,遍歷各個選項值的組合,每得到一個組合,便掃描一次,當(dāng)掃描完成時,再取下一組合掃描直至遍歷完所有的組合。

 實現(xiàn)時,每掃描一次,均創(chuàng)建一個新線程,下一次掃描要等上一線程結(jié)束后才開始。
2.5 產(chǎn)生腳本
 產(chǎn)生的腳本主要列出設(shè)備所支持的選項名字及其取值范圍,然后以特定的格式寫入腳本中[4]。由于結(jié)構(gòu)體SANE_Option_Descriptor中包括選項的各種信息,因此結(jié)構(gòu)體中的元素title可作為該選項的名字,而選項取值范圍可從結(jié)構(gòu)體中的聯(lián)合體constraint得到。實現(xiàn)時,應(yīng)允許用戶選擇保存路徑。
2.6 遍歷算法研究
 在對SANE Driver測試時,一般會選中一些選項進行全組合或部分組合進行測試。以兩個選項為例:mode值為 Color和Gray,resolution值為75和100,測試時就用Color 75、Color 100, Gray 75、 Gray 100四種組合掃描4次。xsane中的批次掃描采用了類似的方法,它將所要掃描的每種組合記錄在文本中,然后通過讀文本進行掃描。當(dāng)掃描次數(shù)較多時,文本就非常冗長而且很難維護。
 測試工具中采用的腳本使用了鍵值對的形式:
 mode=Color,Gray,Binary
 resolution=75,100,150,200,300,400,500,600,1 200,2 400,4 800,9 600,19 200
 對于上面的腳本,通常會采用直接循環(huán)法:用下面一個結(jié)構(gòu)體:
struct option {
        char names[15];
        char values[10][20];
} options[MAXOPTIONSNUMBER];
來存儲每一種組合,用一個數(shù)組size保存各個選項值的個數(shù)。比如上例中,第一個選項mode有3個值,故size[0]=3;然后用一個數(shù)組index來存儲選項的當(dāng)前值,如mode第一個值為Color,則可表示為index[0]=Color。假如只有mode和resolution兩個選項,那么只需2個for循環(huán)即可遍歷選項的取值。其代碼如下:
for(index[0]=0;index[0]<size[0];index[0]++)
  for(index[1]=0;index[1]<size[1];index[1]++)
  {
    for(int i=0;i<2;i++)
    pass_option_setting_to_dev
(options[i].names,options[i].values[indexs[i]] );
 // pass_option_setting_to_dev為傳遞參數(shù)給設(shè)備的函數(shù)
  ...
   }
 本文介紹的算法思路簡單,容易理解。針對上例中的兩個選項,采用上述的方法可以很好地解決問題。但是上述的算法中有多少個選項就有多少個for循環(huán),而且該方法只適用于選項個數(shù)一定的情況下。因為當(dāng)選項個數(shù)有變動時,都要增加或刪除相應(yīng)的for循環(huán)數(shù)。而現(xiàn)實中的腳本其選項的個數(shù)是不定的,因此上述的算法可擴展性較差,不適合用于腳本掃描。但只要對上述算法稍作修改即可成為一種簡單高效的遍歷算法[5]。該算法的腳本仍采用鍵值對這種簡潔的腳本格式,并且可以很好地適應(yīng)選項個數(shù)或者選項值個數(shù)的變化。假設(shè)變量OPT_NUM代表選項的個數(shù),其代碼如下:
 while(1){
         for( int i=0;i<OPT_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(k<0)
       break;
}
3 測試工具對比
 XSANE與自動化測試工具對比如表1所示。

 


 本文以SANE標(biāo)準(zhǔn)為基礎(chǔ),針對xsane存在的不足,結(jié)合測試需求,實現(xiàn)了SANE Driver自動化測試工具。實際應(yīng)用結(jié)果表明,與原有的測試工具相比,大大提高了測試效率,極大地減少了測試人員的工作量。
參考文獻
[1] SANE home page[DB/OL].http://www.sane-project.org, 2001.
[2] 張安清.基于SANE標(biāo)準(zhǔn)的光柵掃描設(shè)備應(yīng)用程序的開發(fā)[J].小型微型計算機系統(tǒng),2001,22(10):1216-1218.
[3] 凌永發(fā),張云生,郭秀萍.軟件自動化測試中的腳本技術(shù)[J].云南民族學(xué)院學(xué)報(自然科學(xué)版),2002,11(1):544-548.
[4] 蔣云,趙佳寶.自動化測試腳本自動生成技術(shù)的研究[J].計算機技術(shù)與發(fā)展,2007,17(7):4-7.
[5] 《編程之美》小組.編程之美:微軟技術(shù)面試心得[M].北京:電子工業(yè)出版社,2008.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
99视频精品在线| 亚洲乱码久久| 亚洲精品中文字幕在线观看| 国产自产2019最新不卡| 国产精品免费小视频| 欧美三级网址| 欧美日韩视频在线一区二区| 欧美激情精品久久久久久黑人| 免费短视频成人日韩| 开元免费观看欧美电视剧网站| 久久久久88色偷偷免费| 欧美亚洲日本网站| 亚洲欧美日韩国产另类专区| 亚洲一区二区高清| 亚洲影音先锋| 亚洲综合二区| 午夜精品成人在线| 性刺激综合网| 久久大逼视频| 久久精品在线视频| 老司机一区二区| 欧美福利电影网| 欧美久久婷婷综合色| 欧美激情一区二区| 欧美日韩三级一区二区| 欧美无乱码久久久免费午夜一区| 国产精品对白刺激久久久| 欧美视频一区二区在线观看| 国产精品v日韩精品v欧美精品网站 | 亚洲欧美日韩天堂一区二区| 欧美一区二区成人6969| 久久久久久久综合日本| 蜜臀av性久久久久蜜臀aⅴ| 欧美jizz19性欧美| 欧美日韩亚洲成人| 国产九色精品成人porny| 国产综合在线视频| 亚洲黄色高清| 亚洲午夜精品久久久久久app| 亚洲欧美在线看| 亚洲国产精品第一区二区| 99xxxx成人网| 亚洲欧美影音先锋| 久久天天躁狠狠躁夜夜av| 欧美—级在线免费片| 国产精品成人aaaaa网站| 国产亚洲日本欧美韩国| 亚洲福利视频一区| 中文一区二区| 亚洲成色精品| 亚洲午夜精品福利| 久久黄色网页| 欧美精品一区二区精品网 | 国产麻豆综合| 最新亚洲视频| 亚洲免费一级电影| 亚洲三级影院| 欧美在线日韩在线| 欧美成人免费网站| 国产精品久久久久久久久婷婷 | 亚洲免费在线观看视频| 亚洲国产午夜| 午夜精品久久| 美女精品一区| 国产精品视频网站| 亚洲激情影院| 欧美在线视频全部完| 一区二区三区四区国产| 久久久一区二区| 欧美伦理a级免费电影| 国产亚洲aⅴaaaaaa毛片| 亚洲免费观看高清完整版在线观看熊 | 久久久97精品| 欧美日韩亚洲不卡| 在线成人中文字幕| 亚洲欧美国产日韩天堂区| 99re热精品| 久久亚洲综合网| 国产精品入口日韩视频大尺度| 又紧又大又爽精品一区二区| 亚洲免费一级电影| 亚洲无玛一区| 欧美电影免费观看高清完整版| 国产美女一区| 一区二区三区日韩| 亚洲精品乱码| 久久性色av| 国产欧美一区二区三区国产幕精品 | 老司机精品导航| 国产日韩av高清| 夜夜嗨一区二区三区| 亚洲三级观看| 久热精品视频在线观看| 国产一区999| 亚洲免费在线精品一区| 亚洲一区二区在线| 欧美精品少妇一区二区三区| 一区在线观看| 久久精品国产99国产精品澳门| 午夜在线视频一区二区区别| 欧美日韩国语| 亚洲激情另类| 亚洲精品一区二区三区蜜桃久| 久久久青草婷婷精品综合日韩| 国产伦精品一区二区三区视频黑人| 在线亚洲观看| 亚洲一级电影| 欧美图区在线视频| 99精品国产在热久久| 亚洲视频每日更新| 欧美日韩国产欧| 亚洲麻豆一区| 9色porny自拍视频一区二区| 欧美激情按摩在线| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲国产高清一区二区三区| 久久久亚洲高清| 悠悠资源网亚洲青| 亚洲丰满在线| 蜜桃伊人久久| 91久久精品美女高潮| 亚洲乱码国产乱码精品精 | 在线亚洲成人| 午夜精品国产更新| 国产农村妇女精品| 欧美伊久线香蕉线新在线| 久久久女女女女999久久| 国内外成人在线| 亚洲国产91| 欧美成人精品一区| 亚洲精品久久久久中文字幕欢迎你 | 国产精品99久久久久久宅男 | 国产麻豆精品在线观看| 香蕉乱码成人久久天堂爱免费| 久久国产精品久久久久久电车| 国产字幕视频一区二区| 亚洲高清久久| 欧美激情在线观看| 一区二区三区精密机械公司| 亚洲自拍另类| 国产精品一区二区三区四区五区 | 欧美国产精品v| 一本色道久久综合亚洲精品不 | 在线观看日韩国产| 日韩视频永久免费观看| 欧美日韩一区二区免费在线观看 | 亚洲高清三级视频| 欧美激情亚洲国产| 在线天堂一区av电影| 久久成人综合视频| 亚洲国产高清视频| 一区二区三区视频在线| 国产精品一区二区三区成人| 久久国产日韩| 欧美精品粉嫩高潮一区二区| 夜夜嗨一区二区| 久久久国产午夜精品| 亚洲福利在线看| 亚洲欧美激情在线视频| 韩国精品久久久999| 日韩一级精品视频在线观看| 国产精品亚洲综合| 亚洲国产欧美日韩另类综合| 欧美日韩中文在线观看| 午夜精品偷拍| 欧美绝品在线观看成人午夜影视| 亚洲一区免费观看| 欧美成人久久| 亚洲欧美大片| 欧美精品免费播放| 亚洲欧美日韩天堂一区二区| 免费观看成人www动漫视频| 一区二区三区日韩在线观看 | 欧美激情精品久久久久久免费印度| 亚洲天堂激情| 美女免费视频一区| 中国女人久久久| 玖玖玖国产精品| 亚洲香蕉成视频在线观看| 久久综合九色99| 在线亚洲精品| 欧美1区视频| 午夜欧美大尺度福利影院在线看| 欧美黄污视频| 久久爱www.| 国产精品爱久久久久久久| 亚洲国产成人久久综合一区| 国产精品久久久久久久久免费樱桃 | 久久精品视频亚洲| 一本大道久久a久久综合婷婷 | 欧美激情亚洲精品| 久久本道综合色狠狠五月| 欧美日本一区| 亚洲风情在线资源站| 国产精品久久久久久久午夜| 91久久线看在观草草青青| 国产欧美日韩一区二区三区在线| 一区二区av在线| 一区二区三区在线不卡| 欧美一区二区三区免费视|