天天看點

Jenkins 自動化測試(建構)搭建

Jenkins 自動化測試(建構)平台搭建

自動化測試流程

在進行平台搭建前,我們首先要問自己:我需要搭建的平台的功能是什麼,要實作什麼目标?

在我的了解中,自動化建構平台的執行流程(目标)是:

  1. 我們将代碼送出到代碼托管工具上,如github、gitlab、gitee等。
  2. Jenkins要能夠檢測到我們的送出。
  3. Jenkins檢測到送出後,要自動拉取代碼,運作測試,并進行建構、打包。
  4. Jenkins執行完測試和建構後,要向相關人員發送建構結果。
  5. Jenkins要能夠向我們展示測試運作的分析。

其實還可以加上自動化部署——把成功的建構添加到web 容器。

自動化測試搭建

有了大緻的目标,就可以一步步實作了。

代碼倉庫搭建

常用的代碼托管平台有GitHub、Gitlab、Gitee等。我選擇了Gitlab。

Gitlab可以托管在Gitlab的網站上,也可以建立本地的Gitlab倉庫。

為了通路更穩定,我選擇了在自己的阿裡雲伺服器上搭建gitlab倉庫。

步驟:

  1. 伺服器安裝Gitlab。可以通過寶塔安裝,也可以自己手動安裝。安裝後開放相應的端口,就可以通路到Gitlab了。
    Jenkins 自動化測試(建構)搭建
  2. 建立賬号,登入,建立一個項目
    Jenkins 自動化測試(建構)搭建
  3. 為了讓我們能夠向該項目送出代碼,需要進行ssh認證。将本地主機的SSH公鑰添加到遠端項目裡。此外,如果遠端項目是私有的,那還要添加可通路的使用者群組。
    Jenkins 自動化測試(建構)搭建

Jenkins 安裝

下載下傳Jenkins的war包,放在Tomcat的webapps路徑下,然後重新開機Tomcat。

開放相應的端口,然後就可以通路到了。

Jenkins 自動化測試(建構)搭建

Jenkins首次啟動時,會生成一個管理者賬号和密碼,一定要記得。

Jenkins 插件安裝

下面的配置過程中會使用到很多插件,在這裡列出。配置時不再說明。

Git 、GitLab 、Email Extension 、Allure Jenkins Plugin、Maven Integration plugin

可參考部落格:[Jenkins插件大全及用途簡介]((19條消息) Jenkins插件大全及用途簡介_pansaky的部落格-CSDN部落格_jenkins插件)

Jenkins配置maven

  1. 安裝maven
Jenkins 自動化測試(建構)搭建

在系統管理-->全局工具配置中添加maven,如果伺服器上已經安裝了maven,那麼指定MAVEN_HOME。

如果沒有安裝,那麼可以選擇版本,讓Jenkins自己安裝。

  1. 下載下傳maven插件

    在系統管理-->插件管理中,搜尋、安裝 Maven Integration plugin 。

    Jenkins 自動化測試(建構)搭建
  2. 建立一個maven任務
    Jenkins 自動化測試(建構)搭建

Jenkins 關聯代碼倉庫

在上面建立的maven任務的:配置-->源碼管理 中添加代碼倉庫。

Jenkins 自動化測試(建構)搭建

這裡,需要進行認證,添加Credentials:

Jenkins 自動化測試(建構)搭建

輸入使用者名、密碼即可。然後選擇剛才添加的Credential。

這樣,我們就将Jenkins關聯到了代碼倉庫上。Jenkins就能夠從該代碼倉庫上面拉取代碼了。

Gitlab 送出觸發 Jenkins 自動建構

  1. 配置Jenkins觸發器

    在配置-->建構觸發器 中,選中 Build when a change is pushed to GitLab. GitLab webhook URL:***

    該URL在配置Gitlab鈎子時要用到。

    Jenkins 自動化測試(建構)搭建

    繼續,在建構觸發器-->進階 中,點選generate,生成一個secret token。

    該token也在配置web hook 時要使用。

    Jenkins 自動化測試(建構)搭建
    配置完成後,點選應用、儲存。
  2. 配置Gitlab web hook

    什麼是web hook?他就像一個魚鈎一樣,當有🐟到了,就拉一下。

    我們可以配置一個URL,當Gitlab檢測到事件時(如:有新的送出時),就會向配置的URL發送消息。

    釣魚佬,别睡了,有魚上鈎了!

    連結中輸入Jenkins觸發器那裡的連結,私密授權碼輸入secret token。

    Jenkins 自動化測試(建構)搭建
    配置完鈎子後,測試一下。傳回HTTP 200,就算成功了。
  3. 配置Build

    上面的配置完成了送出代碼的自動下拉,但是怎麼建構呢,還需要配置Build:

    由于使用的maven來進行建構,是以root pom要使用maven項目的pom檔案。

    下面的Goals and options是建構時還要執行的指令,我們希望每一次建構都運作一下測試,是以填入test指令。

    這和我們在本地執行maven test指令差不多。

    Jenkins 自動化測試(建構)搭建
  4. 測試一下

    我們現在就完成了gitlab送出後的自動建構,來測試一下:

    向gitlab倉庫送出一個測試代碼,如果成功,應該能夠看到建構被觸發了:(我使用的是執行過的例子)

    Jenkins 自動化測試(建構)搭建
    然後可以看到建構的控制台輸出:
    Jenkins 自動化測試(建構)搭建
    這就代表我們的自動建構功能實作了。

生成測試報告

我使用了Allure來生成測試報告。

  1. 安裝Allure Commandline

    我們使用了Allure的項目測試後,會生成一個allure results檔案,該檔案裡面記錄了測試資訊。

    Allure Commandline 的功能,就是解析這些資訊,然後生成一個可視化的網頁界面。

    和maven安裝類似,可以指定本地的,也可以讓Jenkins自己安裝。

    Jenkins 自動化測試(建構)搭建
  2. 配置建構後操作

    Jenkins 使用maven建構後,要實作測試結果可視化,還要配置Allure來收集測試資訊。

    添加一個Allure Report的建構後操作即可,Path中填寫的是Allure生成的可視化頁面的位置。

    Jenkins 自動化測試(建構)搭建
  3. 測試

    添加了Allure後,執行測試就可以看到可視化的測試報告了。

    注意,要使的Allure生效,我們的maven項目中,要添加Allure的插件。這樣才能在測試時收集測試資訊。

    下面是一個可運作的pom:

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.source>1.8</maven.compiler.source>
            <junit.version>5.7.1</junit.version>
            <aspectj.version>1.8.10</aspectj.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>4.0.1</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <!--        allure-->
            <dependency>
                <groupId>io.qameta.allure</groupId>
                <artifactId>allure-junit5</artifactId>
                <version>RELEASE</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-engine</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.3.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                    <configuration>
                        <testFailureIgnore>false</testFailureIgnore>
                        <argLine>
                            -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                        </argLine>
                        <systemProperties>
                            <property>
                                <name>junit.jupiter.extensions.autodetection.enabled</name>
                                <value>true</value>
                            </property>
                        </systemProperties>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.junit.platform</groupId>
                            <artifactId>junit-platform-surefire-provider</artifactId>
                            <version>1.2.0</version>
                        </dependency>
                        <dependency>
                            <groupId>org.aspectj</groupId>
                            <artifactId>aspectjweaver</artifactId>
                            <version>${aspectj.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>io.qameta.allure</groupId>
                    <artifactId>allure-maven</artifactId>
                    <version>2.10.0</version>
                    <configuration>
                        <reportVersion>2.4.1</reportVersion>
                    </configuration>
                </plugin>
            </plugins>
        </build>
               
    push 該使用了Allure的項目,建構後會生成Allure Report檔案:
    Jenkins 自動化測試(建構)搭建
    點選檢視Allure Report檔案:
    Jenkins 自動化測試(建構)搭建

郵件通知

最後一步啦!配置郵件通知,在建構後向相關人員發送郵件,報告建構情況。

  1. 安裝郵件插件

    由于Jenkins自帶的郵件功能比較雞肋,是以這裡推薦安裝專門的郵件插件,不過下面也會順帶介紹如何配置Jenkins自帶的郵件功能作用。

    可以通過 系統管理→管理插件→可選插件,選擇Email Extension Plugin插件進行安裝:

    Jenkins 自動化測試(建構)搭建
  2. 進行郵件配置

    這裡既可以在 系統管理-->系統設定下配置,也可以在工作下進行配置。隻是說在系統設定下配置的是全局的。

    • 設定jenkins位址和管理者郵箱位址
    Jenkins 自動化測試(建構)搭建
    • 設定發件人等資訊

      PS:這裡的發件人郵箱位址切記要和系統管理者郵件位址保持一緻(當然,也可以設定專門的發件人郵箱,不過不影響使用,根據具體情況設定即可)

      Jenkins 自動化測試(建構)搭建
      上圖的預設收件人郵箱可以添加多人,中間用英文半形逗號隔開即可。
    • 配置郵件内容模版
      Jenkins 自動化測試(建構)搭建
      <!DOCTYPE html>    
      <html>    
      <head>    
      <meta charset="UTF-8">    
      <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次建構日志</title>    
      </head>    
          
      <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"    
          offset="0">    
          <table width="95%" cellpadding="0" cellspacing="0"  style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">    
              <tr>    
                  本郵件由系統自動發出,無需回複!<br/>            
                  各位同僚,大家好,以下為${PROJECT_NAME }項目建構資訊</br> 
                  <td><font color="#CC0000">建構結果 - ${BUILD_STATUS}</font></td>   
              </tr>    
              <tr>    
                  <td><br />    
                  <b><font color="#0B610B">建構資訊</font></b>    
                  <hr size="2" width="100%" align="center" /></td>    
              </tr>    
              <tr>    
                  <td>    
                      <ul>    
                          <li>項目名稱 : ${PROJECT_NAME}</li>    
                          <li>建構編号 : 第${BUILD_NUMBER}次建構</li>    
                          <li>觸發原因: ${CAUSE}</li>    
                          <li>建構狀态: ${BUILD_STATUS}</li>    
                          <li>建構日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>    
                          <li>建構  Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>    
                          <li>工作目錄 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>    
                          <li>項目  Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
                          <li>系統allure測試報告:<a href="${PROJECT_URL}${BUILD_NUMBER}/allure">${PROJECT_URL}${BUILD_NUMBER}/allure</a></li>
                      </ul>    
      
      <h4><font color="#0B610B">失敗用例</font></h4>
      <hr size="2" width="100%" />
      $FAILED_TESTS<br/>
      
      <h4><font color="#0B610B">最近送出(#$GIT_REVISION)</font></h4>
      <hr size="2" width="100%" />
      <ul>
      ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}
      </ul>
      詳細送出: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>
      
                  </td>    
              </tr>    
          </table>    
      </body>    
      </html> 
                 
    • 設定郵件觸發機制
      Jenkins 自動化測試(建構)搭建
      上面的幾步完成後,點選應用,儲存即可。
    • 配置Jenkins自帶的郵件功能

      配置内容如下,和Email Extension Plugin插件同樣的配置,可以通過勾選通過發送測試郵件測試配置按鈕來測試配置是否成功發送郵件,如下圖:

      Jenkins 自動化測試(建構)搭建
      完成上面的系統設定後,點選儲存即可。
    • 配置建構後操作子產品

      進入建構後操作的子產品,然後會看到下面的内容,具體的配置資訊如圖中标注:

      Jenkins 自動化測試(建構)搭建
      接上圖:
      Jenkins 自動化測試(建構)搭建
      配置内容預設即可,郵件内容類型可以根據自己的配置選擇,收件人清單可以從前面的系統設定中預設收件人選項配置。
  3. 建構後,應該收到郵件:
    Jenkins 自動化測試(建構)搭建

對 Jenkins 的了解

沒時間寫了。。以後有時間補上(那就是沒有了呗)。

參考引用

郵件部分:老_張

搭建平台的過程還參考了很多部落客的部落格,沒有一一記錄,感謝部落客們的博文。

這篇部落格更像是資源整合,但是還有很多沒有提及的地方,歡迎補充!

可以轉載,但是請引用一下!