天天看點

自動化測試架構的搭建

說起自動化測試,我想大家都會有個疑問,要不要做自動化測試? 自動化測試給我們帶來的收益是否會超出在建設時所投入的成本,這個嘛别說是我,即便是高手也很難回答,自動化測試的初衷是美好的,而測試工程師往往在實作過程中花費了很多成本、精力,而最終以失敗告終。 失敗的原因會很多,我總結幾項:

1.    太過依賴測試工具,高估了工具的力量,最終會以失望告終。

2.     項目緊急的情況,為了規避那些多餘的環節,幹脆人工測試,結果整個鍊路中斷。

3.     研發和測試人員不能很好的互動,如果這兩個角色之間有了一道防火牆,那别說自動化測試了,手工測試也不會有好的效果。測試人員可以把研發想象成自己的女朋友, 努力培養互相之間的感情。

4.     自動化測試人員實力被低估而導緻的情緒低落,這個問題在所有崗位上都會發生,當然要看上司重視程度了。

5.     資源不夠,公司不舍得資源投入,或者蹑手蹑腳,那就不要浪費時間了。

6.     太高的期望,過低的回報。

現在國内沒有幾家公司說能玩轉自動化測試的,在看國外那些耳熟能詳的企業像google ,Microsoft ,它們反而搞得熱火朝天的。可笑的是在微軟中國的測試部門工作過幾年的測試經理,出來搞個什麼《微軟自動化測試體系最佳實踐課程》,就能忽悠國内的那些知名的企業掏錢去聽,我這也不是說他們的東西不好, 隻是希望我們自己也能夠重視起來,要知道人家“卓越”體系也是由那些“專業團隊”花了很多的時間和精力才搭建起來的,是以先不說收益如何,即便是為了這一個美好的初衷,我們也應該去嘗試一下,即使是失敗。

我也做了幾年的測試,但也是最近才開始研究自動化測試的,在工作中多多少少接觸過幾種常見的工具,如 silktest 和Selenium ,搞過測試的應該都聽過,我最近剛剛為現有項目搭建了一個測試架構,為其中的部分子產品編寫了一些測試case, 收益還是頗豐的,先說說這兩種工具吧。

SilkTest 是商業工具,想使用是需要花錢的,但是有現成的平台和架構,也比較容易學習,可以基于windows ,unix 平台。ie ,firefox (部分)浏覽器。可以錄制回放,對象識别或者手工程式設計,也能基于資料驅動,關鍵字驅動等等測試架構。SilkTest 裡面的語言4test 其實是類C (也有Silk4J ,用Java 寫),程式設計能力相對較強。

Selenium 是免費的,需要有類似ide (如eclipse ),原先是thoughtworks 的幾個牛人開發的,現在google 維護(人都跳槽過去了)。可以基于windows ,unix ,mac 等平台。ie ,firefox 等浏覽器。 測試團隊,經費不足,能力很強(Java 上面),有對測試平台和環境要求比較高(ie ,firefox ,safari 等等),那麼Selenium 是很不錯的選擇。

       今天我就簡單入個門,先介紹通過junit+selenium+Coverlipse+ant 來搭建一整套自動化測試架構,開始之前我先提出幾個問題,請大家根據下面的問題來閱讀本篇文章。 

1. 如何錄制腳本?

2. 如何轉換成junit 腳本?

3. 如何生成junit 日志?

4. 如何回放selenium 及檢視回放日志?

5. 如何檢視代碼的覆寫率?

一、工具準備

工具 

 說明 

 下載下傳 

junit 

 JUnit 是一個開發源代碼的Java 測試架構,用于編寫和運作可重複的測試。 

selenium 

 先介紹兩個重要的元件Selenium-IDE 來錄制腳本;selenium-rc selenium-remote control 縮寫,是使用具體的語言來編寫測試類 

Coverlipse 

 Coverlipse 這個Eclipse 插件能夠把JUnit 測試的代碼覆寫直覺化。 

Ant 

 Ant 是一個類似make 的工具, 大家都已經很熟悉了,這裡我們可以利用其中的ant task 來生成junit 日志 

二、Junit 的安裝

1.         Eclipse 本身會自帶Junit.jar 包,所一般情況下是不需要額外下載下傳junit 的。

2.         将junit3 的library 添加到工程的buildPath 中

3.         因為junit 的日志是通過Ant 來生成的,是以一定要将Junit.jar 添加到ant_home 裡

三、selenium 的安裝

1.         安裝seleniumIDE ,打開火狐浏覽器,然後進入工具—> 添加附件,搜尋seleniumIDE

2.         查詢出對應的IDE 後,點選直接安裝,安裝結束後重新開機FireFox ,看到下面的菜單說明安裝成功

4.         運作java -jar selenium-server-standalone-2.0b1.jar ,啟動selenium server 。為了在運作時應用運作的浏覽器與selenium 服務的浏覽器分開可在其後面加–multiWindow 。

5.         在Eclipse 建立一個項目,在項目的build path 裡面加上elenium-server-1.0-beta-1 下selenium-server.jar 、selenium-java-client-driver-1.0-beta-1 下selenium-java-client-driver.jar (這兩個在剛解壓的包裡面)和eclipse\plugins\org.junit_3.8.1 下junit.jar 。

6.         将制定的Jar 包導入到工程裡,然後你就可以內建并使用相應的API ,編寫自己的測試CASE 了。

四、Coverlipse 的安裝

1.         直接通過Eclipse 即可安裝,步驟如下

•In Eclipse, click Help -> Software Updates -> Find and Install. 

•In the dialog, select Search for new features to install, then Next. 

•Press Finish. Eclipse now searches for the Coverlipse feature to install and shows that to you. 2.         配置 Coverlipse 以擷取代碼覆寫 

3.         一旦單擊了 Run ,Eclipse 會運作 Coverlipse 并在源代碼(如圖 7 所示)中嵌入标記,該标記顯示了具有相關 JUnit 測試的代碼部分 

4.     Coverlipse 生成的具有嵌入類标記的報告

5.      正如您所見,使用 Coverlipse Eclipse 插件可以更快地确定代碼覆寫率。例如,這種實時資料功能有助于在将代碼簽入 CM 系統前 更好地進行測試。

五、ANT 安裝,eclipse 自帶,隻需要配置環境變量ant_home 即可。

六、建立一個案例

1.         建立一個工程testSelenium 安裝下面目錄結構

2.         錄制腳本,打開Firefox 浏覽器,進入selenium IDE 菜單

3.         輸入相應錄制的位址,點選紅色按鈕,開始錄制

4.         将腳本轉換成junit 代碼,然後将其拷貝到測試類中做為測試CASE 編碼的雛形。

六、如何檢視日志,這裡日志分兩類:

l          Junit 日志,通過junit 寫的斷言,和标準輸出,這些操作産生的日志記錄。

l          Selenium 日志,當運作junit 腳本時,selenium 相關的腳本就會産生回放日志,例如打開界面的url ,标準輸入,輸出等資訊。

    雖然這兩種日志沒有交集,需要分開檢視。但一般情況下我們隻需要觀察Selenium 日志已經足夠用了,與其相比Junit 日志更适用于編碼階段。

1.       Junit 日志, 隻需要配置腳本build-selenium.xml ,如下

<project name="seleniumTest" default="junit" basedir=".">

       <property environment="env" />

       <condition property="ia.home" value="${env.IA_HOME}">

              <isset property="env.IA_HOME" />

       </condition>

       <property name="run.classpath" value="../class">

       </property>

       <property name="run.srcpath" value="../testSelenium">

       <property name="test.xml" value="../xml">

       <property name="test.report" value="../report">

       <property name="lib.dir" value="../lib" />

       <path id="compile.path">

              <fileset dir="${lib.dir}">

                     <include name="junit.jar" />

                     <include name="ant.jar" />

              </fileset>

       </path>

       <target name="init">

              <delete dir="${run.classpath}" />

              <mkdir dir="${run.classpath}" />

              <delete dir="${test.report}" />

              <mkdir dir="${test.report}" />

              <delete dir="${test.xml}" />

              <mkdir dir="${test.xml}" />

       </target>

       <target name="compile" depends="init">

              <javac destdir="${run.classpath}" srcdir="${run.srcpath}" />

       <target name="junit" depends="compile">

              <junit printsummary="false">

                     <classpath path="${run.classpath}">

                            <path refid="compile.path" />

                     </classpath>

                     <formatter type="xml" />

                     <batchtest todir="${test.xml}">

                            <fileset dir="${run.classpath}">

                                   <include name="**/Test*.class" />

                                   <include name="**/*Test.class" />

                            </fileset>

                     </batchtest>

              </junit>

              <junitreport todir="${test.xml}">

                     <fileset dir="${test.xml}">

                            <include name="TEST-*.xml" />

                     </fileset>

                     <report format="frames" todir="${test.report}" />

              </junitreport>

</project>

2.       運作ant 腳本以後,就可以生成相應的junit 日志。

1.selenium 日志 

4.       plugin 的下載下傳位址:

5.       安裝方法:隻需要将下載下傳的logging-selenium-1.2.jar 導入到工程裡即可。

6.       編寫代碼如下

@Before

public void setUp() {

    final String resultPath = "absolute-path-to-where-your-result-will-be-written";

    final String resultHtmlFileName = resultPath + File.separator + "result.html";

    final String resultEncoding = "UTF-8"

    loggingWriter = LoggingUtils.createWriter(resultHtmlFileName, resultEncoding);

    LoggingResultsFormatter htmlFormatter =

        new HtmlResultFormatter(loggingWriter, resultEncoding);

    htmlFormatter.setScreenShotBaseUri(""); // this is for linking to the screenshots

    htmlFormatter.setAutomaticScreenshotPath(resultPath);

    // wrap HttpCommandProcessor from remote-control

    LoggingCommandProcessor myProcessor =

         new LoggingCommandProcessor(new HttpCommandProcessor(your-configs), htmlFormatter);

    selenium = new LoggingDefaultSelenium(myProcessor);

    selenium.start();

}

@After

public void tearDown() {

    selenium.stop();

    try {

        if (null != loggingWriter) {

            loggingWriter.close();

        }

    } catch (IOException e) {

        // do nothing

    }

7.       運作成功以後在指定的目錄中生成相應的reports

   七

七、架構優勢 

1.       記錄測試的過程,所見即是所得,selenium 的所有内部程式都是用Javascipt 編寫的,比較靈活;

2.       可以通過selenium IDE 錄制腳本,腳本可以回放,可以作為junit 編碼的雛形;

3.       支援多種作業系統;

4.       支援多種編碼語言。JAVA,.NET, Perl, Python, Ruby

八、架構劣勢

1.      selenium 的錄制工具隻能安裝在firefox 浏覽器上, 如果系統界面不被firefox 支援,那就要花費一定的時間去手寫case 。 不過最近聽說有一個工具 叫 360WebTester , 可以支援IE 的錄制,而且是國産的評價還不錯,有時間我要研究一下。

本文轉自茄子_2008部落格園部落格,原文連結:http://www.cnblogs.com/xd502djj/archive/2011/06/21/2085603.html,如需轉載請自行聯系原作者。

繼續閱讀