網站首頁 編程語言 正文
在測試的立場上,希望開發編寫的代碼都是經過開發的單元測試的,但是事實上,這中間總是存在理想和現實的差距,既然如此,我們何不來開發部署環境后,對服務進行自動化測試驗證了。整體的設計思路就是開發編寫的代碼,使用Dockerfile構建成鏡像文件,然后使用docker-compose自動化啟動鏡像文件,下一步其實就很簡單了,我們測試這邊進行智能化的自動驗證,其實在前面的文章體系中,介紹中智能化測試完成后,在測試結束的時候出具體的測試報告以及如果存在問題,觸發整體報警的機制。本文章系列中主要結合CI持續集成的工具,把這個過程完全的自動化,以及智能化的過程。當然,使用的技術棧主要是Spring Boot。
創建Spring Boot的項目后,這地方簡單的寫一個測試的接口,controller層源代碼具體如下:
package com.example.app; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class AppController { @RequestMapping("/index") public String hello() { return "Hello SpringBoot!"; } @RequestMapping("/testDev") public String testDev() { return "測試開發工程師"; } }
這部分的代碼其實相對而言是非常簡單的,這里就不做詳細的解釋了。編寫代碼完成后,下來編寫Dockerfile的文件來構建鏡像,Dockerfile在項目中存放的位置主要是在src/main下的docker文件夾,創建docker文件夾后,在里面創建Dockerfile的文件,然后在里面包編寫需要構建鏡像的內容信息,具體目錄結構如下所示:
Dockerfile文件夾的內容具體為:
FROM java:8 MAINTAINER 樂卻思蜀 VOLUME /tmp RUN mkdir /app COPY app-0.0.1-SNAPSHOT.jar /app/app.jar WORKDIR /app EXPOSE 8081 CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
下來在docker的文件夾創建docker-compose.yml文件,在該文件主要定義鏡像的資源,網絡以及啟動停止的過程,該文件的內容信息具體如下:
version: '3.2' services: app: image: app:0.0.1-SNAPSHOT hostname: localhost ports: - "8081:8081" networks: - mynetwork networks: mynetwork: external: true
在如上的文件中可以看到自定義了網絡是mynetwork,在docker中可以創建網絡,以及查看目前已有的網絡信息,具體如下:
docker network ls NETWORK ID NAME DRIVER SCOPE 5e0d06b35341 bridge bridge local 34f731bed1dc host host local 4b5926f1e44d mynetwork bridge local
下來編寫測試的代碼,測試的代碼這里使用Python語言結合Pytest測試框架來編寫,具體測試模塊test_sprintboot.py的源碼如下:
import requests import pytest def test_springboot_index(): r=requests.get("http://localhost:8081/index") assert r.status_code==200 def test_springboot_testDev(): r=requests.get("http://localhost:8081/testDev") assert r.status_code == 200
這個測試代碼相對而言是比較簡單的,這里主要需要驗證的是服務自動化部署后智能化的驗證。
在如上的準備工作做好,下來在Jenkins中創建Pipeline的項目,Pipeline script的腳本具體如下:
pipeline{ agent any stages{ stage('build the image'){ steps{ sh '''cd /Applications/code/workSpace/data/app mvn clean package -Dmaven.test.skip=true docker:build''' } } stage('run the container'){ steps{ sh '''cd /Applications/code/workSpace/data/app/src/main/docker docker-compose up -d ''' } } stage('smoke test'){ steps{ sh '''cd /Applications/code/workSpace/data/app/src/main/docker sleep 10s python3 -m pytest -v test_springboot.py''' } } } }
下來開始在CI中構建和執行過程,構建后可視化的界面信息如下所示:
輸出的詳細信息在這里只顯示部分,具體如下:
======================== 2 passed, 3 warnings in 0.72s ========================= [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
對于質量交付團隊而言,需要思考的點是,我們怎么樣結合現有的技術來達成我們的目標和質量驗證的手段。其實一種驗證的研發體系流程是開發無論如何需要對自己編寫的代碼進行單元測試,這樣其實一個體系它是通過,整體體系我們完全可以持續流水線的方式來進行驗證,從而提高交付的效率以及提交給測試團隊是高質量的代碼。其實如上的思路很簡單,就是從Docker構建鏡像,到啟動容器,以及我們進行冒煙測試驗證,當然后續還有很多的流程,比如測試團隊其他的驗證手段,比如代碼質量審計,API等驗證。感謝您的閱讀和關注,后續會持續進行更新。
原文鏈接:https://www.cnblogs.com/1024testing/archive/2022/01/05/15768711.html
相關推薦
- 2022-07-21 配置nacos持久化
- 2022-03-22 C++計算圓形、矩形和三角形的面積_C 語言
- 2022-03-14 關于Springboot中跨域問題的解決(Response to preflight request
- 2022-12-05 Linux中的grep?-v、-e、-E用法小結_linux shell
- 2022-08-04 GoFrame框架gset交差并補集使用實例_Golang
- 2022-05-12 在pycharm中設置快速創建
- 2023-01-17 Qt中控件的函數使用教程分享_C 語言
- 2022-09-23 Shell腳本函數傳遞參數的實現方法_linux shell
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支