1. 程式人生 > >.NETCore下CI/CD之自動化測試

.NETCore下CI/CD之自動化測試

前言

為了呼應《中國.NET開發者峰會2019上海站》,作為演講嘉賓,我希望和各位同行建立更多的互動,為此,我特地將部分演講內容,整理成文章先行釋出。本文從零開始,一步一步的引導,從安裝JDK/Tomcat/jenkins 到建立第一個 CI/CD 專案,確保按照本文指引,能快速的在 CentOS 下,將 .NET Core 通過 jenkins 進行持續整合/持續部署,通過 jenkins,實現整合測試自動化,最終達到,快速構建專案,執行單元測試,生成測試報告,傳送測試報告等工作,讓測試工作伴隨著 CI/CD 的持續進行而不斷的對輸出進行測試和校正,真正實現讓本地單元測試在 CI/CD 中發揮其巨大的威力。

大會詳情介紹請看文章末尾介紹。

安裝JDK

首先安裝Java環境,在Centos7上,搜尋倉庫內的包包

yum search java | grep --color OpenJDK

可以看到一堆顏色鮮豔的Java包包,接下來執行安裝openjdk

yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

安裝完成後,執行命令

java -version
# 輸出 OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) 表示安裝成功

安裝 Tomcat

安裝Tomcat的話,直接下載Tomcat的zip包,下載地址:http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.27/bin/apache-tomcat-9.0.27.tar.gz 到官網下載是個好習慣,認準這隻貓;然後上傳到伺服器,解壓

比如我目前上傳到目錄: /usr/local/,執行解壓命令,然後刪除壓縮包

tar -zxf apache-tomcat-9.0.27.tar.gz tomcat
rm -f apache-tomcat-9.0.27.tar.gz

實際上,按照一般情況下,直接執行下面的命令可以直接執行 Tomcat

/usr/local/tomcat/bin/startup.sh

但是作為測試要儘量貼近實際環境的極客追求來說,我們要把 Tomcat 作為系統服務,在系統開關機的時候隨系統啟動,那麼就需要多做點小工作,不需要擔心,下面的工作一共就花了2分鐘左右

首先,我們需要指定 Tomcat.PID 程序檔案,進入 /usr/local/tomcat/bin,編輯檔案

vi /usr/local/tomcat/bin/setenv.sh
// 輸入
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
JAVA_OPTS="-server -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"
// 儲存,退出編輯

增加 tomcat 賬戶並賦予許可權

getent group tomcat || groupadd -r tomcat
getent passwd tomcat || useradd -r -d /opt -s /bin/nologin -g tomcat tomcat
chown -R tomcat:tomcat /usr/local/tomcat

防止Jeknins報錯,先打個預防針,建立 .jenkins 目錄

mkdir /opt/.jenkins
chown -R tomcat:tomcat /opt/.jenkins

編寫系統服務檔案

進入目錄 cd /usr/lib/systemd/system,執行 ls -l,可以看到很多服務檔案,然後我們直接執行下面的命令新建並編輯檔案 tomcat.service

vi tomcat.service

tomcat.service 輸入以下內容

[Unit]
Description=tomcat
After=syslog.target network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
Environment = "JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64" 
PIDFile=/usr/local/tomcat/tomcat.pid
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
ExecReload=/bin/kill -s HUP $MAINPID
PrivateTmp=true
User=tomcat
Group=tomcat
 
[Install]
WantedBy=multi-user.target

// 儲存,退出

系統服務檔案建立完成,輸入命令3連

systemctl enable tomcat.service
systemctl start tomcat.service
system status tomcat.service

如果以上的命令沒有報錯,那麼恭喜你,你已經成功部署了 Tomcat 服務,接下來就是部署 jenkins 到 Tomcat

部署並執行jenkins

下載 jenkins 的war 包包,地址:https://jenkins.io/zh/download/ ,由於我們使用 Tomcat 託管,直接選擇 Generic Java package(.war)下載即可

下載完成,直接將該 jenkins.war 包上傳到 Tomcat 伺服器目錄 /usr/local/tomcat/webapps/ 下,這個時候你應該喝杯咖啡;稍等一會,Tomcat 馬上就把 jenkins 做好了,大概在1分鐘後,訪問 jenkins 站點的地址

http://172.16.1.202:8080/jenkins

在 CentOS上,正常情況下,你是無法訪問該地址的,需要開啟 Tomcat 這隻貓貓的偵聽埠:8080,執行下面的命令,完成防火牆的設定

firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd reload

再次訪問 jenkins 的地址,你應該看到下面這個介面:

首次訪問,按照提示,直接複製密碼 cat /opt/.jenkins/secrets/initialAdminPassword 到輸入框中進入 jenkins,稍後還需要建立使用者,一併設定完成即可

等待 jenkins 初始化完成,可選擇安裝推薦的外掛

請耐心等待外掛安裝完成....

設定賬號密碼

Jenkins已就緒

安裝 .NET Core 環境

相信來到這個環節,大家都鬆了一口氣,畢竟安裝 sdk/runtime 這種事情,微軟已經幫我們把指令碼寫好了,直接 copy 使用即可。訪問 https://dotnet.microsoft.com/download/linux-package-manager/centos7/sdk-current

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

// 本文演示還是使用 2.2
sudo yum install dotnet-sdk-2.2

安裝完成,按照國際慣例,輸入 dotnet --version,輸出版本號即為安裝成功

建立一個.NET Core 的解決方案,包含單元測試

一個相對標準的解決方案結構如下,解決方案中必須包含 src/test 兩個基礎專案,表示該專案有單元測試,沒有單元測試的專案是不完整的,這應當成為一種良好的程式設計規範。專案建立完成,我們本地執行單元測試看看結果。

dotnet test

其中,Ron.XUnitTest 專案使用了託管測試主機的方式執行單元測試,預設的測試結果檔案是 .trx 格式,在 jenkins 上執行傳送測試報告的時候, jenkins 將無法解析,為了使用測試結果檔案,我們還必須引用另外一個 nuget 包:XunitXml.TestLogger,該元件賦予我們將 dotnet test 的結果檔案轉換為 xUnitXml 檔案的能力。

控制檯輸出結果如下:

一共有12項測試,其中全部通過。本地測試已經通過。接下來我們就開始使用 jenkins 構建 .NET Core 程式。

jenkins配置郵件通知

為了實現傳送測試報告的功能,我們需要在 jenkins 中配置郵件伺服器,點選 Manage Jenkins -> Configure System -> Email notification

配置系統管理員郵件地址

配置 Smtp 伺服器

建立第一個 CI/CD 專案

建立任務

點選 “開始建立一個新任務”,輸入任務名稱,選擇自由風格的專案,點選確定,然後馬上就進入了任務詳細配置的介面。

原始碼管理,選擇 git

由於我的測試專案託管在 GitHub 上,所以我填入 GitHub 的專案地址:https://github.com/lianggx/RonTest.git,身份驗證,我選擇新增一個認證資訊。

編寫構建指令碼

接下來,直接拉到底部,在構建選項這裡選擇“增加構建步驟”,選擇 “執行 shell”。輸入構建指令碼。

echo '==============準備開始構建=================='
pwd

cd src/Ron.Blogs
sudo dotnet restore
sudo dotnet build
sudo dotnet publish --framework netcoreapp2.2 -o /data/sites/RonTest

echo '==============構建完成=================='

編寫測試指令碼

再次增加一個構建步驟,“執行 shell”。輸入指令碼

sudo dotnet test test/Ron.XUnitTest/Ron.XUnitTest.csproj --logger:"xunit;LogFileName=TestResult.xml"

這裡有一個細節,就是在執行命令的時候帶了一個引數 --logger:"xunit;LogFileName=TestResult.xml",表示輸出測試結果為 xunit 格式的 xml 檔案,該檔案將在下面的測試報告環節使用。

演示到了這裡,有點走不下去,因為我們要解析測試報告,但是這個時候我們需要去安裝一個外掛,否則無法解析

安裝 jenkins 必須外掛

返回 jenkins 首頁,依次點選 Manage Jenkins -> Manage Plugins -> Available(可選外掛),搜尋 TestComplete xUnit ,勾選,選擇直接安裝即可。

傳送測試報告配置

安裝完成後,再次進入任務配置頁,新增構建後操作,選擇:Publish xUnit test result report,Report Type 選擇 xUnit.NET-v2(default),Pattern 輸入測試報告生成的路徑:

test/Ron.XUnitTest/TestResults/TestResults.xml

配置郵件接收人

繼續新增構建後操作步驟 E-mail notification

儲存配置,立即構建!

構建成功,獲得報表

收到郵件通知

一個小細節

由於我是從安裝 CentOS 開始做起,在開始構建的時候還有一個錯誤,就是報:sudo: no tty present and no askpass program specified,如果有碰到的同學,請勿驚慌,編輯下面的檔案可解決問題

vi /etc/sudoers

// 定位到檔案末尾,增加兩個使用者的配置,儲存即可
jenkins ALL = NOPASSWD:ALL
tomcat ALL = NOPASSWD:ALL

結束語

本文詳細介紹了從零開始,如何利用 jenkins 對 .NET Core 專案進行 CI/CD 下的整合自動化測試,對於即將開展或者已經開展 CI/CD 化的專案具有一定的參考意義,篇幅較長,由於篇幅較長,難免有所疏漏,歡迎指正。
文章參考:https://www.cnblogs.com/ieinstein/p/7096650.html

中國.NET開發者峰會2019上海站

作為《中國.NET開發者峰會2019上海站》的演講嘉賓,我分享的主題《建立TDD的高效開發模型》,裡面會提到本文的內容,由於本文篇幅較長,所以先放本節內容,在會上我也會做詳細的介紹,歡迎大家到上海現場交流。進入現場的方式請訪問下方的二維碼,獲取大會行程介紹,也請掃描下方的二維碼獲取。

大會資訊

2019年11月9日 09:00-18:00
大會地址:(上海楊浦)佳木斯路777號上海中谷小南國花園酒店
門票優惠:每張門票299, 購買團體票(大於10張)享受整單8折優惠,請通過郵箱聯絡主辦方 [email protected]

報名方式

活動行:https://www.huodongxing.com/event/4514005355700

百格活動:https://www.bagevent.com/event/6069892

演講嘉賓介紹

相關推薦

.NETCoreCI/CD自動化測試

前言 為了呼應《中國.NET開發者峰會2019上海站》,作為演講嘉賓,我希望和各位同行建立更多的互動,為此,我特地將部分演講內容,整理成文章先行釋出。本文從零開始,一步一步的引導,從安裝JDK/Tomcat/jenkins 到建立第一個 CI/CD 專案,確保按照本文指引,能快速的在 CentOS 下,將 .

測試工具自動化測試

測試工具概覽abhttp://httpd.apache.org/docs/2.0/programs/ab.htmlab - Apache HTTP server benchmarking toolab is a tool for benchmarking your Apache Hypertext Trans

CentOS搭建Teuthology Ceph自動化測試平臺(一)

Paddles及資料庫部署 安裝相關軟體 這李只列出一些必用的,每個人使用的環境不一樣,可能還會存在一些包沒有安裝的,搭建環境過程中,注意看輸出的日誌資訊,缺少什麼就安裝。 #yum install python-virtualenv postgresql po

使用 Gitlab CI/CD 實現自動化釋出站點到 IIS

說明 這裡先介紹下兩個東西 CI/CD、GitLab Runner,當然在此之前你需要對 git 有所瞭解,關於 git 這裡不做說明,可以自行百度。 首先介紹 CI/CD :隨著我們開發方式的轉變,程式的釋出變得非常頻繁,而其這些釋出操作都是重複的。CI/CD 就是為了使這些操作能變得自動化,那它是怎麼實現

CI/CDGitlab整合Jenkins多分支pipeline實現質量檢測和自動釋出

本次實施主要實現: 程式碼提交gitlab,自動觸發Jenkins構建 gitlab發起Merge Request, 需要Jenkins檢查通過才可以merge,實現程式碼review和質量管控 gitlab開發分支merge後自動釋出到test環境 gitlab master分支merge後自動釋出到pr

【乾貨】.NetCore Gitlab-CI/CD實踐和排坑指南

引言          看過前文的博友可能注意到我是把 部署dll檔案拷貝到生產機器,之後在生產機器上使用docker-compose即時建立映象, 並沒有完成CI/CD, 只是在原來傳統部署方式下 將部署檔案容器化。      

企業DevOps研發模式CI/CD實踐詳解指南

閱讀全文大概需要 10分鐘。   1. 前言 藉著公司今年新組建的中臺研發部東風,我作為其中的主要負責人,在研發中心主導推行DevOps研發管理模式轉變及質量管理創新建設,本篇文章摘取自今年9月底,筆者在公司內部針對全體研發人員的一次DevOps培訓PPT中的部分內容,涉及公司敏感資訊和部分章

模擬瀏覽器自動化測試工具Selenium五Centos系統命令列部署selenium環境試驗

一、背景:     Selenium是一個web自動化測試框架,也支援從HTML頁面上爬取javascript生成的或AJAX的內容。     selenium2支援通過各種driver(FirfoxDriver、IternetExplorerDriver、OperaDri

APP接口自動化測試JAVA+TestNG(三)HTTP接口測試實例

ons ace src 沒有 app 9.png 轉載 image try 前言 前兩篇普及相關基礎知識後,本篇主要對舉例對國家氣象局接口自動化測試進行講解(Get請求及結果斷言),以達到自動化測試入門目的,除了前兩篇的一些了解外,需要有一定的JAVA知識(HTTP

java 接口自動化測試數據請求的簡單封裝

public 事業 交互界面 參數 lencod name route cli asi 我們自己用java寫接口自動化測試框架或者做個接口自動化測試平臺的話,是需要自己進行相關的請求的,因此我們需要簡單的封裝下httpclient,我新建了一個http工具類,將

android 自動化測試案例 MonkeyScript

時間 運行 nbsp speed sources patch html 搜索功能 net #文件名 MonkeyScript.mks #功能: 使用monkey script測試app,此案例是測試搜索功能(輸入關鍵字,然後點擊搜索按鈕)#參考: http://blog.

Windows 搭建 Appium + Android+python 自動化測試環境

細節 事情 android view package 效果 框架 比較 framework 前言 本來並不打算寫這麽一篇文章,但是實踐下來發現網上的各種教程裏大致有兩個問題。一是文章有些跟不上時代,目前android開發和測試的技術更新都比較快,內容有些過期。二是細節部分不

測試賦能,騰訊WeTest探索手遊AI自動化測試

面數據 利用 ima 動畫 作者 就會 安全 嘗試 機械 作者:周大軍/孫大偉, 騰訊後臺開發 高級工程師 商業轉載請聯系騰訊WeTest獲得授權,非商業轉載請註明出處。 WeTest導讀 做好自動化測試從來不件容易的事情,更何況是手遊的自動化測試

敏捷開發模式自動化測試研究

測試結果 tro 滿足 需求 能力 沒有 理想 適合 生產 敏捷測試過程中的自動化目前在國內來看基本上還只是停留在概念階段,據我所知,目前不少公司也都在嘗試過程中,而實際的實踐中能取得比較理想成果的,極為有限。而國外不少同仁也都對此持觀望甚至抵觸的態度。比如advanced

Appium移動自動化測試—基於java的iOS環境搭建

res .sh 變更 order edev curl 軟件包 comm 簡單的 本文僅供參考,同時感謝幫助我搭建環境的同事 操作系統的名稱:Mac OS X操作系統的版本:10.12.6 接下來我們開始踏上搭建Appium+java+ios之路,本文只說個大概,畢竟本機已經

Appium python自動化測試系列Capability介紹(五)

語言 路徑 pla apk 過程 5.1 基礎 針對 driver ?5.1 Capability介紹 5.1.1 什麽是Capability 在講capability之前大家是否還記得在講log時給大家看過的啟動時的日誌?在我們的整個啟動日誌中會出現一些配置信息,其實那些

Appium python自動化測試系列元素的定位(六)

keditor logs ren 匹配 4.4 contex 應用 需要 運用 ?6.1 常用定位方法講解 對象定位是自動化測試中很關鍵的一步,也可以說是最關鍵的一步,畢竟你對象都沒定位那麽你想操作也不行。所以本章節的知識我希望大家多動手去操作,不要僅僅只是書本上的知識,畢

Appium python自動化測試系列認識Appium(四)

ndt require 差異 make python自動化 復雜 appium launched interface ?4.1界面認識 在之前安裝appium的時候說過我們有兩種方法安裝,也就有兩種結果,一種是有界面的,一種是沒有界面的,首先我們先講一下有界面的,以及界面有

Appium python自動化測試系列appium環境搭建(二)

ftp 自動化 手動 文件 搭建環境 做到 安裝python reg 成員 ?2.1 基礎環境搭建 當我們學習新的一項技術開始基本都是從環境搭建開始,本書除了第一章節也是的,如果你連最基礎的環境都沒有那麽我們也沒必要去說太多,大概介紹一下: 1、因為appium是支持and

Appium python自動化測試系列Android UIAutomator終極定位(七)

提升 而已 log key find align 寫法 自己 簡單 android uiautomator text定位 可能有人不知道為什麽說android uiautomator是終極定位,而且android uiautomator和appium有什麽關系呢?如果之前