1. 程式人生 > >selenium+testng+ant+jenkins 手記

selenium+testng+ant+jenkins 手記

會不會搭建測試平臺是一般測試工程師和高階測試工程師分水嶺 —-tobecrazy

我們專案有現成的測試平臺,使用的是selenium grid+testng+ant+jenkins+VM

但是我平時用的是selenium+testng並未體驗過使用ant 和jenkins,今天心血來潮嘗試使用一下jenkins.

Jenkins簡介:

  •  Jenkins是一個開源框架
  •  Jenkins可執行重複的jobs,主要使用在兩方面 

            1.可持續build或test project

            2.監控外部執行的jobs

  •   自動build發郵件。。。。。

    首先安裝Jenkins,下載windows平臺的版本

    由於安裝比較簡單,這裡就不再介紹

安裝ant,下載ant zip檔案,解壓到C:\Program Files\apache-ant-1.9.4

在系統變數新增ANT_HOME

之後再CMD執行ant -version

若顯式:Apache Ant(TM) version 1.9.4 compiled on April 29 2014 

說明ant 配置成功

  1. 使用ant 編譯工程,必須有一個xml檔案,預設build.xml
  2. 每個build檔案配置一個default target,執行ant命令會執行這個target

首先了解一下簡單使用ant

使用note pad 寫一個class,儲存為Test java

複製程式碼
public class Test {
    /**
     * @author tobecrazy
     * 
     */
    public static void main(String[] args) {
    System.out.println("This ANT HOME ");
    System.out.println(System.getenv("ANT_HOME"));

    }

}
複製程式碼

在cmd嘗試編譯:javac Test.java

如官方沒有報錯,恭喜你,可以進行下一步

使用ant所做的操作和命令列輸入是一樣的,只不過所有的命令轉換為xml標籤:

這次配置如下:

每個target是一個操作,clean是刪除build目錄,compile是編譯,run是執行java class

複製程式碼
<?xml version="1.0"?>
<project name="AntTest" default="run" basedir="." >
<!-- 預設target是run,執行ant命令直接執行run -->
    <echo message="The base dir is: ${basedir}" />
    <target name="clean">
       <delete dir="build"/>
    </target>
    <target name="compile" depends="clean">
    <!-- 編譯java檔案依賴clean -->
       <mkdir dir="build/classes"/>
        <javac srcdir="src" destdir="build/classes"/>
    </target>

    <target name="run" depends="compile">
    <!-- 執行class檔案,依賴compile -->
     <echo message="Compile dir is:  ${basedir}\build\classes" />
      <java classname="Test">            
      <classpath>               
      <pathelement path="build/classes"/>            
      </classpath>        
      </java>
    </target>
</project>
複製程式碼

之後在命令列輸入ant(cmd切換到該目錄)

結果如下:

D:\AntTest>ant
Buildfile: D:\AntTest\build.xml
[echo] The base dir is: D:\AntTest

clean:
[delete] Deleting directory D:\AntTest\build

compile:
[mkdir] Created dir: D:\AntTest\build\classes
[javac] D:\AntTest\build.xml:11: warning: ‘includeantruntime’ was not set, d
efaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 1 source file to D:\AntTest\build\classes

run:
[echo] Compile dir is: D:\AntTest\build\classes
[java] This ANT HOME
[java] C:\Program Files\apache-ant-1.9.4

BUILD SUCCESSFUL
Total time: 1 second

為了配合使用selenium webdriver開啟eclipse建立名為Demo的專案

接下來就是使用Jenkins,如果你的Jenkins安裝成功,開啟http://localhost:8080/會顯示Jenkins主頁

點選新建->輸入專案名->選擇“構建一個自由風格的軟體專案”->構建->增加構建步驟->選擇invoke ANT
接下來配置如下:

此時準備ant build.xml放到工程的根目錄

build.xml內容如下,testng 和selenium的jar包需要載入,所以設定

<path id="run.classpath">
由於專案使用的UTF-8編碼,在編譯時報錯所以新增
  <javac srcdir="src" destdir="build/classes" debug="on" encoding="UTF-8">
複製程式碼
<?xml version="1.0"?>
<project name="Demo" default="run" basedir=".">
    <echo  message="import libs" />
    <path id="run.classpath">
        <fileset dir="${basedir}">
            <include name="lib/testng.jar" />
            <include name="lib/sikuli-script.jar" />
        </fileset>
        <fileset dir="${basedir}/lib/selenium">
            <include name="selenium-java-2.45.0.jar" />
            <include name="libs/*.jar" />
        </fileset>
    </path>
    <taskdef name="testng" classname="org.testng.TestNGAntTask" classpathref="run.classpath" />
    <target name="clean">
        <delete dir="build"/>
    </target>
    <target name="compile" depends="clean">
        <echo message="mkdir"/>
        <mkdir dir="build/classes"/>
        <javac srcdir="src" destdir="build/classes" debug="on" encoding="UTF-8">
            <classpath refid="run.classpath"/>
        </javac>
    </target>
    <path id="runpath"> 
         <path refid="run.classpath"/> 
         <pathelement location="build/classes"/> 
       </path> 
    <target name="run" depends="compile">
        <testng  classpathref="runpath"  outputDir="test-output">
            <xmlfileset dir="${basedir}" includes="testng.xml"/>
            <jvmarg value="-ea" />
        </testng>
    </target>
</project>
複製程式碼

更多ant和testng  classname=”org.testng.TestNGAntTask”是固定格式

接下來在專案新增幾個case,專案目錄如下

準備testng的配置檔案如下,放在工程的根目錄下

複製程式碼
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
  <test name="Test">
  <groups> 
      <run> 
         <include name="Case1" /> 
         <include name="MapTest" /> 
         <include name="JDaddress" /> 
         <include name="useCookies" /> 
       </run> 
    </groups> 
     <classes>
      <class name="com.dbyl.tests.Case1"/>
      <class name="com.dbyl.tests.JDaddress"/>
      <class name="com.dbyl.tests.UseCookieLogin"/>
      <class name="com.dbyl.tests.MapTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->
複製程式碼

接下來就是見證奇蹟的時候:

在Jenkins裡選擇構建

Building in workspace C:\Program Files (x86)\Jenkins\workspace\Demo
[workspace] $ cmd.exe /C '""C:\Program Files\apache-ant-1.9.4\bin\ant.bat" -file Demo run && exit %%ERRORLEVEL%%"'
Buildfile: C:\Users\Young\workspace\Demo\build.xml
     [echo] import libs

clean:
   [delete] Deleting directory C:\Users\Young\workspace\Demo\build

compile:
     [echo] mkdir
    [mkdir] Created dir: C:\Users\Young\workspace\Demo\build\classes
    [javac] C:\Users\Young\workspace\Demo\build.xml:21: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 6 source files to C:\Users\Young\workspace\Demo\build\classes

run:
   [testng] [TestNG] Running:
   [testng]   C:\Users\Young\workspace\Demo\testng.xml
   [testng] 
   [testng] Fast test
   [testng] Slow test
   [testng] Starting ChromeDriver (v2.9.248315) on port 43260
   [testng] Starting ChromeDriver (v2.9.248315) on port 20660
   [testng] Starting ChromeDriver (v2.9.248315) on port 13803
   [testng] cookie write to file
。。。。