欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

軟件測(cè)試培訓(xùn)之基于Docker快速部署多需求Spark自動(dòng)化測(cè)試環(huán)境

2018-03-12 11:05:47 2140瀏覽

在進(jìn)行數(shù)據(jù)分析時(shí),Spark 越來(lái)越廣泛的被使用。在測(cè)試需求越來(lái)越多、測(cè)試用例數(shù)量越來(lái)越大的情況下,能夠根據(jù)需求快速自動(dòng)化部署 Spark 環(huán)境、快速完成所有測(cè)試越來(lái)越重要。

本文基于 Docker、Jenkins、Apache Ant、Apache Tomcat、Git、Shell 等技術(shù)或工具,根據(jù)用戶對(duì) Spark 版本、Scala 版本、JDK 版本、測(cè)試范圍、測(cè)試版本等需求的不同,快速完成 Spark Cluster 環(huán)境以及相應(yīng)的 Client 端測(cè)試環(huán)境的部署,進(jìn)而實(shí)現(xiàn)快速自動(dòng)化測(cè)試、結(jié)果呈報(bào),從而提高開(kāi)發(fā)測(cè)試效率。

Docker 等相關(guān)技術(shù)和工具介紹

Docker 介紹

Docker 是世界領(lǐng)先的開(kāi)源應(yīng)用容器引擎,提供了一個(gè)可供開(kāi)發(fā)者打包其應(yīng)用的可移植容器。開(kāi)發(fā)者可以使用 Docker 來(lái)消除合作編碼時(shí)所出現(xiàn)的"我的機(jī)器"問(wèn)題,運(yùn)營(yíng)商可以使用 Docker 來(lái)運(yùn)行和管理不同容器中的應(yīng)用,企業(yè)可以使用 Docker 更加快速安全的建立敏捷軟件交付管道。Docker 主要包括四部分:Docker Client、Docker Image、Docker Daemon、Docker Container。

Dockerfile 是為了快速構(gòu)建 Docker Image 設(shè)計(jì)的,是一個(gè)包含了可用來(lái)創(chuàng)建鏡像命令的腳本。當(dāng)執(zhí)行 docker build 命令時(shí),Docker 可以通過(guò)從 Dockerfile 中自動(dòng)讀取指令來(lái)創(chuàng)建鏡像。

Docker Compose 是一個(gè)用來(lái)定義和運(yùn)行多容器復(fù)雜應(yīng)用的工具。你可以使用一個(gè) YAML 文件來(lái)配置你的應(yīng)用和服務(wù),然后僅使用一條命令就可以啟動(dòng)已配置的所有服務(wù)。

本系統(tǒng)中我們使用 Docker 來(lái)快速部署不同 Spark 版本、Scala 版本、JDK 版本的 Spark Cluster Server 和 Test 客戶端,通過(guò) Docker Compose 啟動(dòng)所需要的服務(wù)。

Spark 介紹

Spark 是一種與 Hadoop 相似的專門為大數(shù)據(jù)處理設(shè)計(jì)的開(kāi)源集群計(jì)算環(huán)境,使用 Scala 語(yǔ)言實(shí)現(xiàn),以通用、易用為目標(biāo)。Spark 的中間輸出結(jié)果可以保存在內(nèi)存中,不必重新讀寫 HDFS,從而使其具有 Hadoop MapReduce 所沒(méi)有的優(yōu)點(diǎn),更適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等算法。

本系統(tǒng)中我們將不同版本的 Spark 部署在 Docker 中,通過(guò) Dockerfile 控制 Spark 的版本選擇,從而快速部署不同版本 Spark Cluster Server。

Jenkins 介紹

Jenkins 是一種開(kāi)源的持續(xù)集成工具,提供一個(gè)開(kāi)放易用的平臺(tái)用于監(jiān)控持續(xù)重復(fù)工作,使得我們可以進(jìn)行持續(xù)的軟件版本發(fā)布和測(cè)試。

本系統(tǒng)中我們使用 Jenkins 創(chuàng)建 job 來(lái)控制測(cè)試的啟動(dòng)與停止,也可以進(jìn)行周期性任務(wù)。

Git 介紹

Git 是一個(gè)免費(fèi)開(kāi)源的分布式版本控制系統(tǒng),可以高效地處理各種大小項(xiàng)目。Git 易于學(xué)習(xí),性能高效,在廉價(jià)本地分支、方便的中轉(zhuǎn)區(qū)、多工作流等方面都超越了傳統(tǒng)的 SCM 工具,如 Subversion,Perforce,CVS,ClearCase 等。

本系統(tǒng)中使用 Git 進(jìn)行代碼的維護(hù)及實(shí)時(shí)更新。

Apache Ant 介紹

Apache Ant 是一種用于在 Java 環(huán)境下進(jìn)行軟件開(kāi)發(fā)的自動(dòng)化工具,可以進(jìn)行編譯、測(cè)試、部署等步驟,其構(gòu)建文件默認(rèn)名為 build.xml,Ant 具有很好的跨平臺(tái)性且操作簡(jiǎn)單。

本系統(tǒng)中我們使用 Ant 進(jìn)行代碼的編譯、測(cè)試以及測(cè)試報(bào)告的生成。

Apache Tomcat 介紹

Apache Tomcat 是一個(gè)開(kāi)源的輕量級(jí) Web 應(yīng)用軟件容器,可以用來(lái)響應(yīng) HTML 頁(yè)面的訪問(wèn)請(qǐng)求,在中小型系統(tǒng)和并發(fā)用戶訪問(wèn)場(chǎng)景中被廣泛使用。

本系統(tǒng)中我們使用 Tomcat 來(lái)展現(xiàn)測(cè)試報(bào)告(即測(cè)試結(jié)果),使得多用戶可以并發(fā)訪問(wèn)測(cè)試報(bào)告。

Shell 介紹

Shell 腳本是在 Linux/Unix 系統(tǒng)中使用的一種類似于 Windows/Dos 批處理的腳本,功能與.bat 類似。Shell 是一種命令語(yǔ)言,可以互動(dòng)式的執(zhí)行用戶命令,將各類命令依據(jù)邏輯關(guān)系放入文件中可以一次性執(zhí)行,是 Linux 系統(tǒng)下廣泛使用的一種腳本。

本文中我們使用的系統(tǒng)是支持 Docker 的 Linux Ubuntu 14.04,依靠 Shell 腳本將各個(gè)步驟聯(lián)系起來(lái)組成一個(gè)完整的流程。

本文主要從自動(dòng)化的系統(tǒng)整體構(gòu)架以及環(huán)境部署流程方面進(jìn)行介紹,扼其重點(diǎn),以求給讀者提供一個(gè)部署此類環(huán)境或系統(tǒng)的操作思路和流程,對(duì)于特別細(xì)節(jié)、特殊或者過(guò)于通用的部分不做詳解,如一些軟件的安裝教程在網(wǎng)絡(luò)上隨處可見(jiàn),本文不再贅述。下面章節(jié)首先介紹整個(gè)系統(tǒng)構(gòu)架,然后對(duì)系統(tǒng)構(gòu)架中各個(gè)部分進(jìn)行具體介紹,最后進(jìn)行總結(jié)。

環(huán)境部署測(cè)試整體架構(gòu)

本章主要介紹自動(dòng)化測(cè)試系統(tǒng)的整體框架和流程,如圖 1 所示。我們通過(guò)在 Jenkins Server 上創(chuàng)建 Job 作為整個(gè)系統(tǒng)的測(cè)試入口,Jenkins 發(fā)起測(cè)試請(qǐng)求之后,接下來(lái)會(huì)進(jìn)行環(huán)境部署(即圖中 Deploy 階段)和測(cè)試(即圖中 Test 階段)。環(huán)境部署包括通過(guò) Docker 部署 Spark Cluster 和 Test Client,即測(cè)試所需要的服務(wù)器端和客戶端。環(huán)境部署完畢后便可進(jìn)行測(cè)試,從指定地方獲取測(cè)試所需要的 Build 和 Code,Code 可以通過(guò) Git 在本機(jī)上維護(hù)更新,通過(guò)對(duì)代碼進(jìn)行測(cè)試所必須的一些配置,然后便可進(jìn)行編譯、測(cè)試,測(cè)試執(zhí)行完畢后對(duì)所生成的 xml 文件進(jìn)行生成報(bào)告(HTML 文件生成),此處編譯、測(cè)試、report 生成均由 Ant 實(shí)現(xiàn),所生成的 report 展示由 Tomcat 實(shí)現(xiàn),最后通過(guò) Linux 系統(tǒng)的郵件功能給指定郵箱發(fā)送郵件完成整個(gè)測(cè)試流程。

圖 1. 自動(dòng)化測(cè)試系統(tǒng)整體架構(gòu)



基于 Docker 的 Spark 環(huán)境部署測(cè)試

本章將根據(jù)上一章節(jié)中的自動(dòng)化系統(tǒng)整體架構(gòu)對(duì)流程中所涉及的各部分進(jìn)行具體介紹,重點(diǎn)介紹自動(dòng)化系統(tǒng)中基于 Docker 所部署的 Spark Cluster Server 端和 Client 端。

Jenkins 任務(wù)

測(cè)試請(qǐng)求由 Jenkins 發(fā)起,安裝 Jenkins 并新建 Remote SSH 任務(wù)后,在 Script 執(zhí)行窗口指定配置信息,如圖 2 所示,包括 build_num、scope、sparkVersion、javaVersion、model,分別表示要進(jìn)行測(cè)試的 build 版本(以 jar 包的形式存在),測(cè)試的范圍(Regression、Smoke、MiniSmoke 所定義 case 的范圍依次減小),Spark 版本(如 1.6.0、1.6.2、2.0.1、2.1.1 等,scala 版本由 spark 決定),Java 版本(如 openjdk8、ibmjdk8 等),模塊(代碼中所包含的要測(cè)試的模塊)。這些配置信息通過(guò)位于遠(yuǎn)程機(jī)器上的 Shell 腳本 getPropsFromJenkins.sh 下發(fā)到機(jī)器上的配置文件中以便進(jìn)行后續(xù)部署和測(cè)試流程。機(jī)器上的 buildScope.props 和 model.props 文件用于存儲(chǔ)從 Jenkins 上獲取的信息,后續(xù)所有需要這些信息的操作均從這兩個(gè)文件中讀取。需要特別說(shuō)明的是 model 的各模塊間逗號(hào)表示串行執(zhí)行,分號(hào)表示并行執(zhí)行,串行只需要啟動(dòng)一個(gè) Client 端即可,并行需要啟動(dòng)多個(gè) Client 端并發(fā)執(zhí)行,這部分將在后續(xù)章節(jié)具體介紹。

圖 2. Jenkins 任務(wù)配置



Spark Cluster

Deploy 階段將根據(jù) Jenkins 下發(fā)的配置信息進(jìn)行 Docker Spark Cluster 和 Client 的部署。

用于創(chuàng)建 Docker Spark Cluster 鏡像及啟動(dòng) Container 的腳本很多,代碼內(nèi)容也過(guò)于復(fù)雜,本節(jié)難以一一完全介紹,依舊依據(jù)之前約定對(duì)重點(diǎn)部分進(jìn)行介紹,以為讀者提供思路,具體細(xì)節(jié)可通過(guò)網(wǎng)絡(luò)或者參考資料進(jìn)一步深入研究。

每個(gè)版本的 Spark Docker 腳本我們都放在一個(gè)獨(dú)立文件夾中,按照"spark-$spark_version-$java_version"的方式命名。以 spark-2.1.1-openjdk-8 為例,該文件夾結(jié)構(gòu)如圖 3 所示,文件夾中所含 xml 格式文件與實(shí)際安裝的 Spark 環(huán)境對(duì)應(yīng)文件類似,只是在 Docker 中我們使用 namenode 作為 container 的名字,core-site.xml 中要使用"hdfs://namenode:9000"替代實(shí)際環(huán)境中的"fs.default.name"。yarn-site.xml 中可以使用"yarn.nodemanager.resource.memory-mb"對(duì) YARN 可使用的物理內(nèi)存總量進(jìn)行控制,默認(rèn) 8192M,本系統(tǒng)我們?yōu)榱瞬⑿袃蓚€(gè) Client 端同時(shí)測(cè)試設(shè)置為 65536M。

圖 3. spark-2.1.1-openjdk-8 文件夾結(jié)構(gòu)



yarn-cluster 文件夾下的 Dockerfile 文件是整個(gè) cluster 的核心,用于創(chuàng)建 Spark Cluster 鏡像,內(nèi)容主要包括配置 SSH 無(wú)密碼訪問(wèn)、安裝 Java 并配置環(huán)境變量、下載安裝 Hadoop、加載 xml 文件(core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml)、下載安裝 Spark、開(kāi)放 Spark 運(yùn)行所需端口等。如圖 4 所示為 Dockerfile 部分內(nèi)容。

圖 4. Dockerfile 片段



bootstrap.sh 文件主要用于在啟動(dòng) container 時(shí)自動(dòng)啟動(dòng)對(duì)應(yīng)的 Spark 進(jìn)程,如 start-dfs.sh、start-yarn.sh。其主要內(nèi)容如圖 5 所示。

圖 5. bootstrap.sh 片段



我們使用 docker-compose 啟動(dòng) container 來(lái)保證整個(gè) Spark Cluster 工作為一個(gè)整體,其主要使用文件為 docker-compose.yml,如圖 6 所示。圖中還可以添加其他節(jié)點(diǎn),本處為了簡(jiǎn)化只使用 namenode 一個(gè)節(jié)點(diǎn)。

圖 6. docker-compose.yml 片段



Shell 腳本創(chuàng)建 Spark Cluster 鏡像以及啟動(dòng) container 的命令如圖 7 所示,$spark_version 和$java_version 來(lái)決定切換到對(duì)應(yīng)的 Spark 文件夾進(jìn)行某個(gè)版本的創(chuàng)建,使用"docker build –t spark-2.1.1 ."命令創(chuàng)建 spark-2.1.1 的鏡像,執(zhí)行"docker-compose up -d"用于在后臺(tái)啟動(dòng) spark-2.1.1 的 container。

圖 7. Spark Cluster 鏡像和啟動(dòng)腳本



Test Client

Client 端只需要啟動(dòng)一個(gè)系統(tǒng)為 Linux、帶有所需軟件的 Container,所以與 Server 端相比 Client 端的 Docker 腳本要簡(jiǎn)單的多,只需要一個(gè) Dockerfile 文件用于創(chuàng)建 Client 鏡像即可,針對(duì)各種 Spark 版本的 Dockerfile 文件按照"dockerfile-$spark_version-$java_version"的方式命名存放,執(zhí)行時(shí)根據(jù) Spark 版本信息將對(duì)應(yīng)的文件拷貝成 dockerfile 的文件來(lái)創(chuàng)建鏡像,文件內(nèi)容包括安裝 JDK、Scala、Spark、Ant 等。此處仍然以 Spark-2.1.1 為例,如圖 8 所示,在此腳本中我們下載安裝了 scala-2.11.8、spark-2.1.1-bin-hadoop2.7 以及 Ant,并且配置了部分所需要的環(huán)境變量。

圖 8. Client Dockerfile 腳本



Client 端鏡像的創(chuàng)建命令為"docker build -t client:v1 .",為了使得 Client 端和 Server 端的通信更加通暢可以通過(guò)在上節(jié) docker-compose.yml 中加入 Client 。如圖 9 所示,client1 表示我們只啟動(dòng)一個(gè) Client 端,沒(méi)有并行。如果需要啟動(dòng)兩個(gè) Client 端并行,在腳本后繼續(xù)添加 client2 對(duì)應(yīng)代碼即可,與 client1 類似,client 數(shù)目的控制由 shell 腳本通過(guò) model 信息確定。

圖 9. 添加 client 的 docker-compose.yml



在 Spark Cluster 和 Client 鏡像創(chuàng)建完成后,通過(guò)"docker-compose up -d"啟動(dòng)對(duì)應(yīng)的 Container,Container 運(yùn)行情況如圖 10 所示。

圖 10. namenode 和 client container



環(huán)境部署完畢后接下來(lái)就是要利用代碼進(jìn)行實(shí)際的測(cè)試,即 Test 階段。

Test Configuration 主要是利用 Jenkins 上指定的配置信息對(duì)代碼進(jìn)行特定的配置,比如通過(guò) wget 命令從遠(yuǎn)端下載 Jenkins 上所指定的 build 版本,在此 build 上對(duì)代碼進(jìn)行編譯等。本機(jī)上通過(guò) Git 維護(hù)一套代碼,并且進(jìn)行實(shí)時(shí)更新以獲取最新代碼。如上節(jié)圖 10 所示 Client 啟動(dòng)時(shí)已通過(guò) volumes 命令將本機(jī)的 dockerShare 文件夾共享進(jìn) Client 的 docker container 內(nèi)部,以便于在 docker 內(nèi)部進(jìn)行編譯測(cè)試。

Test 和 Report 為測(cè)試的主題階段,依據(jù)代碼進(jìn)行編譯測(cè)試和報(bào)告生成,這一階段是通過(guò) Apache Ant 實(shí)現(xiàn)的,我們先來(lái)看一下 Ant 的構(gòu)建文件 build.xml。build.xml 的內(nèi)容主要包括以下幾部分:代碼編譯所依賴的 jar 包、編譯命令、測(cè)試命令、創(chuàng)建 report 命令。

如圖 11 所示,"build"指定了編譯依賴于"clean,prebuild",以及要編譯文件的目錄和文件后綴(.scala 文件)。"run"指定了要執(zhí)行的文件即實(shí)際測(cè)試的文件(.class 文件),"showoutput"指定是否輸出所有的 log 日志,"printsummary"指定是否輸出每個(gè)文件執(zhí)行完畢后的總結(jié)(即總共多少個(gè) case,成功失敗數(shù)目各為多少),"haltonfailure"指定是否遇到錯(cuò)誤就停止,"include name="用于控制要測(cè)試的 scope 和模塊(分別從 buildScope.prop 和 model.props 中獲取),如此處 scope 為"MiniSmoke",模塊為 aa,新增一個(gè)模塊則新加一行"include name=",可通過(guò) Shell 控制。"report"指定利用測(cè)試完畢后所生成的所有名稱為"TEST-*.xml"的文件生成 report。

圖 11. build.xml 片段



編譯、測(cè)試、Report 階段依次執(zhí)行命令為"ant build"、"ant run"和"ant report",測(cè)試并生成 report 之后將生成的 report 文件全部放入 Apache Tomcat 特定目錄中并且啟動(dòng) Tomcat,即可通過(guò) Tomcat 的端口訪問(wèn) report 內(nèi)容。為了完全實(shí)現(xiàn)自動(dòng)化,我們將此訪問(wèn)鏈接通過(guò)郵件系統(tǒng)發(fā)送到指定的郵箱中,可以通過(guò) Linux 系統(tǒng)下的 sendmail 功能發(fā)送,也可以通過(guò) Jenkins 的 mail 功能發(fā)送,即流程中的 Mail Notification 階段。

如圖 12 所示,郵件所收到的 report 鏈接是以"ip:端口/目錄/build 號(hào)_scope/index.xml"的樣式存在,Tomcat 默認(rèn)端口是 8080,可以自行修改(apache-tomcat-7.0.77/conf/server.xml 中),本系統(tǒng)中我們改成了 8888,build 號(hào)_scope 保證了多個(gè) report 并存互不影響從而使得我們可以同時(shí)管理很多歷史 report 以便于后續(xù)查看。

圖 12. report 頁(yè)面



基于 Docker 的環(huán)境部署及測(cè)試涉及大量細(xì)節(jié),如各個(gè)軟件的安裝配置、整個(gè)系統(tǒng)各個(gè)部分是如何通過(guò) shell 腳本一一串聯(lián)起來(lái)以完成整個(gè)流程、report 頁(yè)面上各種信息的顯示、代碼編譯出錯(cuò)后停止后續(xù)流程自動(dòng)發(fā)送郵件將錯(cuò)誤信息通知維護(hù)人員等等,由于內(nèi)容過(guò)于繁瑣且文章篇幅有限在此不能一一介紹,在實(shí)際環(huán)境部署測(cè)試過(guò)程中大家可以具體體會(huì)。文中所涉及的軟件技術(shù)均為當(dāng)今業(yè)界比較流行的技術(shù),參考資料也相對(duì)較多,網(wǎng)絡(luò)或官網(wǎng)上均可以查找到相關(guān)幫助,有興趣的可以做進(jìn)一步深入研究。


以上就是關(guān)于軟件測(cè)試培訓(xùn)之基于Docker快速部署多需求Spark自動(dòng)化測(cè)試環(huán)境的詳細(xì)介紹,最后想要了解更多關(guān)于軟件測(cè)試培訓(xùn)發(fā)展前景趨勢(shì),請(qǐng)關(guān)注扣丁學(xué)堂官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的軟件測(cè)試視頻教程系統(tǒng),通過(guò)千鋒扣丁學(xué)堂金牌講師在線錄制的軟件測(cè)試在線視頻教程,讓你快速掌握軟件測(cè)試從入門到精通開(kāi)發(fā)實(shí)戰(zhàn)技能。


扣丁學(xué)堂微信公眾號(hào)



關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料



查看更多關(guān)于“軟件測(cè)試技術(shù)資訊的相關(guān)文章>>

標(biāo)簽: 軟件測(cè)試培訓(xùn) 軟件測(cè)試工程師 軟件測(cè)試在線視頻 軟件測(cè)試視頻教程 軟件測(cè)試教程 白盒測(cè)試 黑盒測(cè)試

熱門專區(qū)

暫無(wú)熱門資訊

課程推薦

微信
微博
15311698296

全國(guó)免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠(chéng)科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部