【Flask】測試平臺開發,集成禪道

概述:

由于公司多數測試人員還是在使用禪道,為了方便,就將禪道直接集成在我們的測試平臺中

一般可以有幾種實現方法

  • 調用禪道的API集成
  • 集成本地部署的禪道-可能有跨域問題,需要解決

由于我這里已經部署了一臺本地的禪道系統,那么這里我將以最簡單的方式集成,通過代理集成到測試平臺系統中,代理這里我們又可以分為以下方式

  • 前端vue代理
  • 后端代理
  • Nginx代理

一般我們選擇nginx這種方式進行集成,能夠高并發,滿足業務需求使用,先來看看本地開發環境式如何使用

訪問nginx的官網下載nginx

nginx

首頁如下

在這里我下載的是中間的穩定版本下載在本地你任意一個磁盤,然后解壓,解壓后效果如下

打開nginx的配置文件,配置如下

worker_processes  1;
events { worker_connections  1024; }http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       81;server_name  172.16.60.60;# 前端系統代理(Vue)location / {proxy_pass http://localhost:9528;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;}# 禪道代理(完美復刻直接訪問環境)location /zentao/ {# 1. 目標地址:禪道服務器(與直接訪問完全一致)proxy_pass http://172.16.50.80/zentao/;# 2. 復刻直接訪問的請求頭(關鍵!)proxy_set_header Host 172.16.50.80;  # 強制使用禪道原始 Host(直接訪問時的 Host)proxy_set_header X-Real-IP $remote_addr;proxy_set_header Referer http://172.16.50.80/zentao/;  # 模擬原域名 Refererproxy_set_header User-Agent $http_user_agent;  # 傳遞客戶端瀏覽器信息# 3. 復刻直接訪問的 Cookie 環境(核心!)proxy_cookie_path / /;  # Cookie 路徑與直接訪問一致(根路徑 /)proxy_cookie_domain 172.16.50.80 172.16.60.60;  # 將 Cookie 域名為 Nginx 服務器 IP# 4. 關閉 Nginx 緩沖(確保請求與直接訪問完全一致)proxy_request_buffering off;proxy_buffering off;# 5. 移除安全限制頭(允許表單提交和跳轉)proxy_hide_header Content-Security-Policy;proxy_hide_header X-Frame-Options;# 6. 重定向處理(登錄后跳轉 Nginx 地址)proxy_redirect http://172.16.50.80/ http://172.16.60.60:81/;  # 注意末尾斜杠!}}
}

注意

ngin每次配置操作,啟用時最好都檢查一下語法,windows操作命令如下

nginx -t 檢查語法
nginx -s reload 重啟nginx
nginx -s stop 停用
start nginx 啟動

編寫前端vue的頁面展示部分以及路由

<template><div class="zentao-container"><!-- 尺寸控制欄 --><div class="zentao-header"><div class="header-title">禪道項目管理系統(rebort)</div><div class="header-actions"><!-- 全屏切換按鈕 --><el-buttonicon="el-icon-full-screen"size="mini"@click="toggleFullScreen":title="isFullScreen ? '退出全屏' : '進入全屏'"/><!-- 固定尺寸按鈕(可選) --><el-buttonicon="el-icon-sizer"size="mini"@click="resetSize"title="重置尺寸"/></div></div><!-- 禪道 iframe --><iframeref="zentaoIframe":src="iframeSrc"class="zentao-iframe":style="{ height: iframeHeight, width: iframeWidth }"sandbox="allow-same-origin allow-scripts allow-forms allow-top-navigation allow-popups"/></div>
</template><script>
export default {data() {return {iframeSrc: '/zentao/user-login.html', // 禪道登錄頁地址iframeWidth: '100%', // 初始寬度(可固定為具體值,如 '1200px')iframeHeight: '80vh', // 初始高度(80% 視窗高度,避免全屏)isFullScreen: false // 全屏狀態標記};},methods: {// 切換全屏/退出全屏toggleFullScreen() {const container = document.querySelector('.zentao-container');if (!this.isFullScreen) {// 進入全屏if (container.requestFullscreen) {container.requestFullscreen();} else if (container.mozRequestFullScreen) { // Firefoxcontainer.mozRequestFullScreen();} else if (container.webkitRequestFullscreen) { // Chrome/Safaricontainer.webkitRequestFullscreen();} else if (container.msRequestFullscreen) { // IE/Edgecontainer.msRequestFullscreen();}this.isFullScreen = true;} else {// 退出全屏if (document.exitFullscreen) {document.exitFullscreen();} else if (document.mozCancelFullScreen) {document.mozCancelFullScreen();} else if (document.webkitExitFullscreen) {document.webkitExitFullscreen();} else if (document.msExitFullscreen) {document.msExitFullscreen();}this.isFullScreen = false;}},// 重置尺寸為初始值resetSize() {this.iframeWidth = '100%';this.iframeHeight = '80vh';this.isFullScreen = false;// 若處于全屏狀態,先退出全屏if (document.fullscreenElement) {document.exitFullscreen();}}},mounted() {// 監聽全屏狀態變化(處理用戶按 ESC 退出全屏的情況)document.addEventListener('fullscreenchange', () => {this.isFullScreen = !!document.fullscreenElement;});document.addEventListener('mozfullscreenchange', () => {this.isFullScreen = !!document.mozFullScreenElement;});document.addEventListener('webkitfullscreenchange', () => {this.isFullScreen = !!document.webkitFullscreenElement;});document.addEventListener('msfullscreenchange', () => {this.isFullScreen = !!document.msFullscreenElement;});}
};
</script><style scoped>
/* 容器樣式 */
.zentao-container {position: relative;width: 100%;border: 1px solid #e6e6e6;border-radius: 4px;overflow: hidden;
}/* 頭部控制欄 */
.zentao-header {display: flex;justify-content: space-between;align-items: center;padding: 8px 16px;background-color: #f5f5f5;border-bottom: 1px solid #e6e6e6;
}.header-title {font-weight: 500;color: #333;
}.header-actions {display: flex;gap: 8px;
}/* iframe 樣式 */
.zentao-iframe {border: none;transition: all 0.3s ease;
}/* 全屏狀態樣式(可選) */
::v-deep .zentao-container:fullscreen {background-color: #fff;z-index: 9999;
}
::v-deep .zentao-container:-webkit-full-screen {background-color: #fff;z-index: 9999;
}
</style>

最終集成后效果如下

?

如果是在生產環境下使用,我們可能會考慮使用加密的方式

server {listen 443 ssl;  # 監聽 HTTPS 端口server_name project.example.com;  # 生產環境域名# SSL 證書配置(替換為實際證書路徑)ssl_certificate /etc/nginx/ssl/project.crt;ssl_certificate_key /etc/nginx/ssl/project.key;# SSL 安全配置ssl_protocols TLSv1.2 TLSv1.3;  # 禁用不安全協議ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;# 強制 HTTP 跳轉 HTTPSreturn 301 https://$host$request_uri;
}# HTTP 重定向到 HTTPS
server {listen 80;server_name project.example.com;return 301 https://$host$request_uri;
}

限制請求速率,防止攻擊

http {# 配置請求限制limit_req_zone $binary_remote_addr zone=zentao_req:10m rate=10r/s;  # 限制單 IP 10 請求/秒limit_conn_zone $binary_remote_addr zone=zentao_conn:10m;  # 限制并發連接
}server {location /zentao/ {proxy_pass http://172.16.50.80/zentao/;# 應用請求限制limit_req zone=zentao_req burst=20 nodelay;  # 突發允許 20 請求limit_conn zentao_conn 50;  # 單 IP 最大 50 并發連接}
}

靜態資源緩存優化,較少后端請求

location ~* /zentao/(css|js|images|fonts)/ {proxy_pass http://172.16.50.80;proxy_cache zentao_cache;  # 定義緩存區proxy_cache_valid 200 304 8h;  # 緩存 8 小時proxy_cache_valid any 1m;  # 非 200/304 緩存 1 分鐘proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;add_header X-Proxy-Cache $upstream_cache_status;  # 響應頭顯示緩存狀態(HIT/MISS)
}

健康檢查與自動恢復

通過 ngx_http_proxy_module 配置后端服務健康檢查,避免請求轉發到故障節點:

location /zentao/ {proxy_pass http://172.16.50.80/zentao/;proxy_next_upstream error timeout http_500 http_502 http_503 http_504;  # 失敗時自動切換備用節點(需配合 upstream)proxy_connect_timeout 3s;  # 連接超時 3 秒proxy_read_timeout 10s;  # 讀取超時 10 秒
}

日志與監控

  • 訪問日志:配置詳細日志格式,記錄請求來源、URL、狀態碼、響應時間,便于故障排查:
  log_format main '$remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time';access_log /var/log/nginx/zentao_access.log main;  # 禪道訪問日志

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94773.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94773.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94773.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《UE5_C++多人TPS完整教程》學習筆記45 ——《P46 待機與跳躍(Idle And Jumps)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P46 待機與跳躍&#xff08;Idle And Jumps&#xff09;》 的學習筆記&#xff0c;該系列教學視頻為計算機工程師、程序員、游戲開發者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; St…

用html+js下拉菜單的demo,當鼠標點擊后展開,鼠標點擊別的地方后折疊

使用html js實現下拉菜單demo&#xff0c;因為copy的網站菜單功能失效&#xff0c;就需要自己寫一個邏輯&#xff0c;點擊其他區域折疊菜單&#xff0c;可以參考&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF…

OpenCV 核心技術:顏色檢測與幾何變換實戰

在計算機視覺任務中&#xff0c;顏色空間轉換和圖像幾何變換是兩大基礎且高頻的操作 —— 前者用于精準分割特定顏色目標&#xff08;如交通信號燈、物體追蹤&#xff09;&#xff0c;后者用于調整圖像的尺寸、位置和視角&#xff08;如文檔矯正、圖像拼接&#xff09;。本文將…

[HFCTF2020]EasyLogin

文章目錄TRYWP總結TRY 注冊admin報錯username wrong。 隨便注冊一個用戶點擊GetFlag&#xff0c;permission deny。 猜測可能是需要admin權限。 看cookie發現有&#xff1a; sses:aok&#xff1a;eyJ1c2VybmFtZSI6ImEiLCJfZXhwaXJlIjoxNzU2NDU1NjczMTAxLCJfbWF4QWdlIjo4NjQwM…

Java接口和抽象類的區別,并舉例說明

Java接口和抽象類是面向對象編程中實現抽象的兩種機制&#xff0c;它們在語法、設計目的和使用場景上有顯著區別&#xff1a;一、核心區別?定義方式?抽象類&#xff1a;使用abstract class聲明&#xff0c;可包含抽象方法和具體方法45。接口&#xff1a;使用interface聲明&am…

docker-相關筆記

1: 導入鏡像 docker load -i myimage.tar# 導出鏡像 docker save myimage:latest > myimage.tar # 導入鏡像 docker load -i myimage.tardocker load -i <文件> 功能&#xff1a;用于導入通過 docker save 命令導出的鏡像歸檔文件&#xff08;通常是 .tar 格式&#…

自然語言提取PDF表格數據

自然語言提取PDF表格數據PDF v8.2的文檔解決方案與OpenAI實現了無縫的AI集成&#xff0c;可將非結構化PDF轉換為可用數據。MESCIUS 推出的 PDF 文檔解決方案 (DsPdf) 是一款軟件開發工具包&#xff0c;它提供了 .NET Core 庫和一個 JavaScript PDF 查看器&#xff0c;用于處理和…

飛牛Nas每天定時加密數據備份到網盤,基于restic的Backrest筆記分享

1. 前言 受前輩“RAID≠備份”的經驗&#xff0c;也考慮到硬盤故障時 RAID 重建步驟繁瑣&#xff0c;我干脆放棄陣列&#xff0c;直接單盤運行。 重要數據則加密后上傳至大廠云盤&#xff1a;一方面文件對外不可讀&#xff0c;規避掃描和諧&#xff1b;另一方面依靠大廠的數據安…

C#連接SQL-Server數據庫超詳細講解以及防SQL注入

C#連接SQL Server數據庫完整指南&#xff0c;整合了ADO.NET原生連接與Entity Framework Core兩種實現方式。這篇文件詳細介紹C#代碼連接數據庫的通用操作數據庫鏈接功能 數據庫的增刪改查操作1 配置全局數據庫鏈接字符串 App.config2 獲取數據庫鏈接字符串先在App.config配置連…

Pico2?ICE FPGA 開發板:從開箱到跑通示例的全歷程

FPGA 和 MCU 結合的開發板不多&#xff0c;而 Pico2?ICE 則把小巧、靈活和易上手完美結合。搭載 RP2350 雙核 RISC-V MCU Lattice iCE40UP5K FPGA&#xff0c;配合官方 SDK&#xff0c;你可以一步步跑通各種示例&#xff0c;從 LED 到 VGA&#xff0c;再到 MCU 與 FPGA 協作應…

Java圖形圖像處理【Swing圖像拖拽】【五】

Java圖形圖像處理【Swing圖像拖拽】 18.3.3 Swing圖像對象拖拽功能 18.3.3 Swing圖像對象拖拽功能 上文討論的是java.awt.dnd包中提供的拖拽API接口&#xff0c;也可稱之為AWT組件的拖拽功能。下面我們要討論的是Swing框架的拖拽功能&#xff1a;Swing組件也提供了對拖拽功能的…

狀態模式與幾個經典的C++例子

1. 狀態模式定義與核心思想 狀態模式解決的是當控制一個對象狀態轉換的條件表達式過于復雜時的情況。通過將狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把復雜的判斷邏輯簡化。 核心思想: 狀態抽象:將對象的每個狀態都封裝到一個獨立的類中。 委托代替條件判斷:…

SyncBackPro 備份及同步軟件中的腳本功能簡介

腳本提供了一種靈活而簡單的方法來自動執行任務和擴展應用程序的功能。腳本是一個小程序&#xff0c;能夠自定義和控制備份作業。例如&#xff0c;用戶可以編寫腳本來復制、重命名或刪除特定文件、自定義用戶界面或更改配置文件設置。SyncBackPro 的腳本功能類似于 Microsoft O…

部署2.516.2版本的jenkins,同時適配jdk8

&#x1f4cc; 前言 在企業級開發中&#xff0c;我們常常面臨 新老項目并存 的復雜局面&#xff1a; 老項目基于 JDK 8 開發&#xff0c;短期內無法升級&#xff1b; 新項目采用 JDK 17&#xff08;LTS&#xff09;甚至更高版本&#xff1b; 而作為 CI/CD 核心的 Jenkins&#…

Autodesk Maya 2026.2 全新功能詳解:MotionMaker AI 動畫、LookdevX 材質增強、USD 工作流優化

軟件介紹 Autodesk Maya 2026.2是一款專業的3D計算機圖形軟件&#xff0c;它為數字內容創作者提供了豐富的工具集&#xff0c;以實現高質量的建模、動畫、模擬和渲染。該版本帶來了多項性能優化和工作流程改進&#xff0c;特別是針對生成式動畫工具MotionMaker進行了重大升級&…

STM32之DMA詳解

一、DMA 1. DMA的引入 在嵌入式系統或計算機系統中&#xff0c;數據的傳輸和處理是非常重要的操作。以下通過一個簡單的示例來展示傳統數據操作方式與 DMA 引入的必要性&#xff1a; int a 10; int b 20;a b;上述代碼包含了變量定義、初始化以及變量數據賦值操作。在傳統…

鏈表有環找入口節點原理

環形鏈表入口檢測算法數學解釋 數學原理假設定義: 鏈表頭到環入口的距離為 a環入口到相遇點的距離為 b相遇點到環入口的距離為 c環的長度為 b c第一次相遇時: 慢指針走了 s a b 步快指針走了 f a b n(b c) 步&#xff0c;其中 n 是快指針在環內轉的圈數由于快指針速度是…

Java 基本類型與包裝類詳解

Java 基本類型與包裝類詳解 在 Java 開發中&#xff0c;理解 基本數據類型與包裝類、字符串處理、以及高精度計算類是非常核心的能力。這不僅關系到程序性能&#xff0c;還影響代碼的正確性和可維護性。本文將詳細講解這些知識點&#xff0c;并給出常見的使用技巧和陷阱。 1?…

CRYPT32!CryptMsgUpdate函數分析之CRYPT32!PkiAsn1Decode函數的作用是得到pci

第一部分&#xff1a; CryptMsgUpdate( #endifIN HCRYPTMSG hCryptMsg,IN const BYTE *pbData,IN DWORD cbData,IN BOOL fFinal) {ContentInfo *pci NULL;if ((PHASE_FIRST_FINAL pcmi->dwPhase) &&(0 pcmi->dwMsgType)) {if (0 …

華為交換機S5700設置acl

1.、配置ACL1.1、定義允許的ACL規則[sw1]acl number 3001[sw1-acl-adv-3001]rule permit ip source 192.168.20.0 0.0.0.255 destination 192.168.40.1 0[sw1-acl-adv-3001]rule permit ip source 192.168.30.0 0.0.0.255 destination 192.168.40.1 01.2、定義禁止的ACL規則[sw…