軟件手機軟件自動(dòng)化測試研究報告
一、引言
由于最近一些事務(wù)好久沒(méi)有更新博文了,望關(guān)注我博客的網(wǎng)友們諒解,正好最近一段時(shí)間著(zhù)手自動(dòng)化測試的研究特將我的一些思路及想法寫(xiě)出來(lái)與網(wǎng)友們分享,也算是2010年新年賀禮了。前段時(shí)間我也有一篇關(guān)于自動(dòng)化測試的文章《手機軟件自動(dòng)化測試探索》相對較淺顯,本文在此基礎上進(jìn)行了更進(jìn)一步的研究探索,希望大家能得到更進(jìn)一步的了解。手機軟件的自動(dòng)化測試一直困擾著(zhù)手機軟件測試從業(yè)人員,本文將最近的一些研究新發(fā)現及具體思路作詳盡闡述,希望能給予大家更多的參考萌發(fā)新的思路。
通過(guò)長(cháng)期的手工測試得出如下可以以自動(dòng)化測試來(lái)解決的問(wèn)題:
1. 壓力測試:一些連續不斷的操作,比如反復切換歌曲播放及聯(lián)網(wǎng)操作等;
2. 極限臨界測試:一些極限條件的構造(創(chuàng )建多個(gè)列表)及輸入字符個(gè)數等;
3. 兼容及中斷:比如在播放或下載歌曲的時(shí)候來(lái)電話(huà)或者信息;
4. 基本功能回歸測試:這樣大大的節約了時(shí)間和人力成本。
對于以上的測試很多也是可以通過(guò)手工來(lái)完成,但部分測試采用手工測試是不可靠的,比如最近發(fā)現一個(gè)Bug(在聯(lián)網(wǎng)的一瞬間如果來(lái)一個(gè)信息等中斷操作出現死機),類(lèi)似這種Bug出現條件非?量毯团R界的情況在手工測試中是很難發(fā)現和構造這種測試環(huán)境的,即使發(fā)現了在很大程度上也屬于一種偶然,同時(shí)給開(kāi)發(fā)人員定位這個(gè)問(wèn)題也帶來(lái)了很大的困難!疚恼聛(lái)源:張元禮的博客 http://blog.csdn.net/vincetest】
面對諸多因素,我們不得不重視手機軟件的自動(dòng)化測試研究。其實(shí)如果掌握了一些自動(dòng)化測試要領(lǐng),從簡(jiǎn)單入手,逐步實(shí)現和突破,相信一定能夠解決手機軟件自動(dòng)化測試的難題。
二、自動(dòng)化測試原理
【自動(dòng)化測試原理圖】
1. TestAgent
TestAgent為嵌入在手機軟件系統中的一個(gè)測試代理模塊,解決PC端與手機端交互處理及互聯(lián)消息通訊問(wèn)題,這是區別于其他桌面軟件自動(dòng)化測試的關(guān)鍵點(diǎn),也是嵌入式軟件自動(dòng)化測試的主要特征之一。通過(guò)串口或藍牙設備與PC端中的TestTool建立通訊,其具備的主要功能如下:
1) 接收TestTool發(fā)送的消息并向手機端軟件系統分發(fā)消息及任務(wù)
2) 監控手機端軟件運行情況并根據相應的約束反饋給PC端的TestTool
3) 被測軟件的功能(接口)封裝及消息響應
2. TestTool
TestTool自動(dòng)化測試工具在PC端用于測試控制及測試操作實(shí)體,與TestAgent對應,該工具與常規的自動(dòng)化測試軟件一樣,其具備的主要功能如下:
1) 向手機端TestAgent發(fā)送可識別的消息及任務(wù)
2) 接收來(lái)自手機端TestAgent的反饋結果
3) 對來(lái)自手機端TestAgent的反饋進(jìn)行測試業(yè)務(wù)的處理
4) 將測試業(yè)務(wù)的處理結果呈現給測試人員
三、測試業(yè)務(wù)
1. 主動(dòng)式測試
TestTool主動(dòng)式測試是根據我們的測試需求比如(壓力、性能、極限)在TestTool中編寫(xiě)測試腳本控制手機端軟件進(jìn)行測試,或者構造一些手工很難實(shí)現的測試場(chǎng)景,通過(guò)運行腳本向TestAgent發(fā)送消息及任務(wù),TestAgent再向被測軟件分發(fā)消息及任務(wù),并將結果原路返回給TestTool,TestTool再通過(guò)數據處理分析得出測試結果。關(guān)鍵點(diǎn):發(fā)送和分發(fā)消息、接收及處理反饋結果(結果判斷)。
2. 回歸式測試
基本功能的回歸測試最為簡(jiǎn)單的方法就是錄制和回放機制,通過(guò)運行錄制的測試腳本達到按照先前的操作順序、步驟、輸入數據等再次測試被測軟件以此達到回歸測試的目的。
1) 錄制:就是在執行手工測試時(shí)將手工測試的任何操作及返回結果(預期正確的結果)通過(guò)TestAgent在TestTool中保存下來(lái),并進(jìn)行分析處理形成一個(gè)可執行的腳本。錄制的關(guān)鍵點(diǎn):按鍵或觸屏消息、坐標、響應結果(GUI界面)。
2) 回放:與錄制相對應,運行錄制時(shí)產(chǎn)生的腳本,與主動(dòng)式測試方式不同的是回歸式測試是事先要錄制腳本,通過(guò)錄制腳本來(lái)代替人工編寫(xiě)腳本;胤抨P(guān)鍵點(diǎn):發(fā)送和分發(fā)消息、接收及處理反饋結果(結果判斷)。
四、關(guān)鍵技術(shù)
1. 消息傳送機制
利用手機Modem中提供的AT Command通過(guò)串口向手機端建立命令消息通訊,目前手機廠(chǎng)商提供了常用的AT Command,基本滿(mǎn)足普通的自動(dòng)化測試需求,另外廠(chǎng)商還提供了用戶(hù)自定義AT Command的功能,當標準的AT Command不能滿(mǎn)足自動(dòng)化測試需求時(shí),我們可以利用自定義AT Command來(lái)實(shí)現我們自動(dòng)化測試中所需要的消息通訊。如下為MTK平臺上實(shí)現自定義AT Command的關(guān)鍵樣例代碼:
view plaincopy to clipboardprint?//customer_at_command.c
#include "kal_non_specific_general_types.h"
#include "stdio.h"
#include "string.h"
#define CUSTOM_SYMBOL '^' // '+' and '/' and ' \ 'is NOT allowed
#define MAX_UART_LEN 128
/*****************************************************************************
* customer command
*****************************************************************************/
#define PLAY "play"
#define STOP "stop"
kal_uint8 custom_get_atcmd_symbol(void);
void custom_command_hdlr(char *full_cmd_string);
extern void rmmi_write_to_uart(kal_uint8 * buffer, kal_uint16 length, kal_bool stuff);
/*****************************************************************************
* FUNCTION
* custom_command_hdlr()
* DESCRIPTION
* This function should parse the custom AT command and do correspondent action.
* Customer should maintain and modify the code.
* PARAMETERS
* kal_uint8 * cmd_string
* RETURNS
* none
*****************************************************************************/
void custom_command_hdlr(char *full_cmd_string)
{
char buffer[MAX_UART_LEN];
char cmd_name[15];
kal_uint8 index = 3; // we start parsing index after the CUSTOM_SYMBOL
kal_uint8 tmp_idx = 0;
while ((full_cmd_string[index] != '=' ) && //might be TEST command or EXE command
(full_cmd_string[index] != '?' ) && // might be READ command
(full_cmd_string[index] != 13 )) //carriage return
{
cmd_name[tmp_idx] = full_cmd_string[index] ;
tmp_idx ++;
index ++;
}
cmd_name[tmp_idx] = '\0' ;
/* just a very basic example : customer can implement their own */
if (strcmp(cmd_name, PLAY) == 0)
{
/* BEGIN: do the following parsing and correspondent action */
/* */
/* */
/* */
/* END: do the following parsing and correspondent action */
/* generate final result code: "OK" */
//Todo 實(shí)現消息分發(fā)或功能調用
sprintf(buffer, "Hello Play");
printf("%s\n", "Hello Play");
rmmi_write_to_uart((kal_uint8*)buffer, (kal_uint16)strlen(buffer), KAL_TRUE);
}
else if (strcmp(cmd_name, STOP) == 0)
{
/* BEGIN: do the following parsing and correspondent action */
/* */
/* */
/* */
/* END: do the following parsing and correspondent action */
/* generate final result code: "OK" */
//Todo 實(shí)現消息分發(fā)或功能調用
sprintf(buffer, "Hello Stop");
printf("%s\n", "Hello Stop");
rmmi_write_to_uart((kal_uint8*)buffer, (kal_uint16)strlen(buffer), KAL_TRUE);
}
else
{
/* unrecognized command */
/* generate final result code: "ERROR" */
sprintf(buffer, "ERROR");
printf("%s\n", "ERROR");
rmmi_write_to_uart((kal_uint8*)buffer, (kal_uint16)strlen(buffer), KAL_TRUE);
}
return;
}
kal_uint8 custom_get_atcmd_symbol(void)
{
return (CUSTOM_SYMBOL);
}
2. 圖像識別
圖像識別主要通過(guò)抓取LCD屏幕顯示圖像進(jìn)行智能識別來(lái)模擬測試工程師的雙眼辨識文字或圖像信息,以此判斷測試結果。主要涉及圖像的獲取和對比分析,智能識別是一個(gè)比較專(zhuān)業(yè)的研究領(lǐng)域,更進(jìn)一步的研究需要進(jìn)行調研,目前我們可以考慮是否能夠通過(guò)第三方工具來(lái)實(shí)現,比如借助目前已經(jīng)成熟的測試工具QTP等。對于圖像獲取在手機平臺上應該具備這樣的接口,或者自行開(kāi)發(fā)這個(gè)接口。
3. 錄制回放
錄制的信息及相應的實(shí)現方式如下:
1) 按鍵消息:由TestAgent捕獲該消息并同步給PC端的TestTool
2) 筆點(diǎn)消息:由TestAgent捕獲該消息并同步給PC端的TestTool
3) 坐標:由TestAgent捕獲該坐標信息并同步給PC端的TestTool
4) 響應結果(GUI界面回放的預期結果):通過(guò)圖像抓取接口抓取圖像并同步給PC端的TestTool(如果做到極致的話(huà)在PC端所呈現的GUI界面與實(shí)際手機GUI界面同步一致,等同于PC機上的顯示為手機GUI的一個(gè)鏡像)
5) 時(shí)鐘同步:操作步驟的時(shí)間點(diǎn)、操作的先后順序、輸出結果響應時(shí)間
6) 錄制腳本組裝:TestTool將所有的錄制信息進(jìn)行處理并組裝成一套可運行的測試腳本,要求運行該腳本后能夠與錄制時(shí)的操作完全一樣,并能將回放時(shí)的實(shí)際結果與預期結果進(jìn)行比較從而得出執行結果。
7) 回放:主要是運行組裝好的測試腳本,將回放時(shí)的實(shí)際結果與預期結果進(jìn)行比較從而得出執行結果,關(guān)鍵點(diǎn)還是圖像識別。
4. 測試管理
1) 腳本語(yǔ)言:可以選用Python、TCL作為腳本語(yǔ)言,用一些開(kāi)源的工具進(jìn)行腳本文件的管理維護。
2) 測試數據:需要建立一個(gè)數據倉庫管理數據,比如錄制時(shí)產(chǎn)生的消息、坐標、GUI圖像信息等。
3) 測試結果管理:主要涉及測試報告的呈現及保存。
五、 輔助工具及設備
1. 串口線(xiàn)
2. 超級終端(PC機自帶)或者手機廠(chǎng)商提供的配套工具
3. 腳本編寫(xiě)、調試、維護及管理工具(開(kāi)源的比較多)
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/