Cypress與多語言后端集成指南

Cypress 簡介

  • 基于 JavaScript 的前端測試工具,可以對瀏覽器中運行的任何內容進行快速、簡單、可靠的測試
  • Cypress 是自集成的,提供了一套完整的端到端測試,無須借助其他外部工具,安裝后即可快速地創建、編寫、運行測試用例,且對每一步操作都支持回看
  • 不同于其他只能測試 UI 層的前端測試工具,Cypress 允許編寫所有類型的測試,覆蓋了測試金字塔模型的所有測試類型【界面測試,集成測試,單元測試】
  • Cypress 底層協議不采用 WebDriver

Cypress 原理

Webdriver 運行的方式
  • 大多數測試工具(如:Selenium/webdriver)通過在外部瀏覽器運行并在網絡上執行遠程命令來運行
  • 因為 Webdriver 底層通信協議基于 JSON Wire Protocol,運行需要網絡通信
Cypress 運行的方式

Cypress 和 Webdriver 方式完全相反,它與應用程序在相同的生命周期里執行

Cypress 運行測試的大致流程

運行測試后,Cypress 使用 webpack 將測試代碼中的所有模塊 bundle 到一個 js 文件中
然后,運行瀏覽器,并且將測試代碼注入到一個空白頁中,然后它將在瀏覽器中運行測試代碼【可以理解成:Cypress 將測試代碼放到一個 iframe 中運行】

Cypress 運行測試的技術流程
  1. 每次測試首次加載 Cypress 時,內部 Cypress Web 應用程序先把自己托管在本地的一個隨機端口上【如:http://localhost:65874】
  2. 在識別出測試中發出的第一個 cy.visit() 命令后,Cypress 會更改本地 URL 以匹配你遠程應用程序的 Origin【滿足同源策略】,這使得你的測試代碼和應用程序可以在同一個 Run Loop 中運行
Cypress 運行更快的根本原因
  • Cypress 測試代碼和應用程序均運行在由 Cypress 全權控制的瀏覽器中
  • 且它們運行在同一個Domain 下的不同 iframe 中,所以 Cypress 的測試代碼可以直接操作 DOM、Window Objects、Local Storages而無須通過網絡訪問
Cypress 穩定性、可靠性更高的原因
  • Cypress 還可以在網絡層進行即時讀取和更改網絡流量的操作
  • Cypress 背后是 Node.js Process 控制的 Proxy 進行轉發,這使得 Cypress 不僅可以修改進出瀏覽器的所有內容,還可以更改可能影響自動化操作的代碼
  • Cypress 相對于其他測試工具來說,能從根本上控制整個自動化測試的流程

Cypress 架構圖

C++ 與 Cypress 集成概述

Cypress 主要用于前端自動化測試,而 C++ 是后端開發語言。兩者結合通常涉及以下場景:

  • 測試 C++ 應用的 Web 接口(如 REST API)。
  • 通過 Cypress 驗證 C++ 編譯的 WebAssembly 模塊。

方法 1:測試 C++ 后端 API

C++ 后端暴露 HTTP API 時,可用 Cypress 進行端到端測試。

步驟
編寫 C++ 服務(例如使用 cpp-httplib)提供 REST API:

#include <httplib.h>
using namespace httplib;int main() {Server svr;svr.Get("/api/data", [](const Request& req, Response& res) {res.set_content("{\"value\": 42}", "application/json");});svr.listen("localhost", 8080);
}

在 Cypress 測試文件中調用 API:

describe('API Test', () => {it('fetches data from C++ backend', () => {cy.request('GET', 'http://localhost:8080/api/data').then((response) => {expect(response.body.value).to.eq(42);});});
});

注意
確保 C++ 服務在運行 Cypress 測試前啟動。

方法 2:測試 WebAssembly 模塊

若 C++ 代碼編譯為 WebAssembly(如通過 Emscripten),可用 Cypress 測試其前端集成。

步驟
編譯 C++ 為 WebAssembly:

emcc -o wasm_module.js wasm_module.cpp -s EXPORTED_FUNCTIONS="['_add']"

在 HTML 中加載 WASM 模塊:

<script src="wasm_module.js"></script>
<script>Module.onRuntimeInitialized = () => {window.add = Module.cwrap('add', 'number', ['number', 'number']);};
</script>

Cypress 測試驗證功能:

describe('WASM Test', () => {it('calls C++ function via WASM', () => {cy.visit('index.html');cy.window().then((win) => {expect(win.add(2, 3)).to.eq(5);});});
});


方法 3:C++ 驅動 Cypress 執行

通過 C++ 程序調用系統命令啟動 Cypress 測試(需 Node.js 環境)。

示例代碼

#include <cstdlib>
int main() {system("npx cypress run --headless");return 0;
}


常見問題與優化

  • 跨平臺支持:C++ 編譯需兼容目標平臺(如 Windows 需 MinGW)。
  • 調試技巧:結合 cy.log() 和 C++ 日志輸出(如 std::cout)排查問題。
  • 性能優化:并行運行 C++ 服務與 Cypress 測試(如 Docker 容器化)。

通過上述方法,可實現 C++ 與 Cypress 的高效協作,覆蓋從后端到前端的自動化測試需求。

C#與Cypress的實踐指南

C#通常用于后端開發,而Cypress是一個前端測試框架。雖然兩者屬于不同領域,但可以通過以下方式結合實踐:

后端API測試

使用C#編寫后端API,Cypress測試前端調用API的邏輯。C#示例代碼:

[ApiController]
[Route("api/products")]
public class ProductsController : ControllerBase
{[HttpGet]public IActionResult GetProducts(){return Ok(new[] { "Product1", "Product2" });}
}

Cypress前端測試代碼:

describe('API Tests', () => {it('Should fetch products', () => {cy.request('GET', '/api/products').then((response) => {expect(response.status).to.eq(200);expect(response.body).to.have.length(2);});});
});

數據庫驗證

C#處理數據持久化,Cypress驗證前端顯示:

public class ProductService
{public List<Product> GetAllProducts(){// 數據庫查詢邏輯}
}

Cypress測試:

it('Displays products from database', () => {cy.visit('/products');cy.get('.product-item').should('have.length.gt', 0);
});

組件測試

對于Blazor等前端框架:

@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button @onclick="IncrementCount">Click me</button>@code {private int currentCount = 0;private void IncrementCount() { currentCount++; }
}

Cypress測試

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

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

相關文章

計算機畢業設計ssm基于JavaScript的餐廳點餐系統 SSM+Vue智慧餐廳在線點餐管理平臺 JavaWeb前后端分離式餐飲點餐與桌臺調度系統

計算機畢業設計ssm基于JavaScript的餐廳點餐系統0xig8788&#xff08;配套有源碼 程序 mysql數據庫 論文&#xff09; 本套源碼可以在文本聯xi,先看具體系統功能演示視頻領取&#xff0c;可分享源碼參考。掃碼點單、手機支付、后廚實時出票已經成為食客對餐廳的基本預期。傳統的…

wedo稻草人-----第32節(免費分享圖紙)

夸克網盤&#xff1a;https://pan.quark.cn/s/ce4943156861 高清圖紙源文件&#xff0c;需要的請自取

Jmeter函數的使用

函數名作用用法${__Random(,,)}${__RandomString(,,)}隨機生成一些東西${__Random(000,999,)} ${__Random(${test1},${test2},)}${__RandomString(${__Random(3,9,)},asdfghjkl,)}${__time(,)}獲取當前的時間戳&#xff0c;也可以定義格式${__CSVRead(,)}讀取CSV文件的格式&…

Windows 用戶賬戶控制(UAC)繞過漏洞

漏洞原理CVE-2021-31199 是一個 Windows 用戶賬戶控制&#xff08;UAC&#xff09;繞過漏洞&#xff0c;CVSS 3.1 評分 7.8&#xff08;高危&#xff09;。其核心原理如下&#xff1a;UAC 機制缺陷&#xff1a;Windows UAC 通過限制應用程序權限提升系統安全性&#xff0c;但某…

comfyUI-controlNet-線稿軟邊緣

{WebUI&comfyUI}∈Stable Diffuision&#xff0c;所以兩者關于ContrlNet的使用方法的核心思路不會變&#xff0c;變的只是comfyUI能夠讓用戶更直觀地看到&#xff0c;并且控制生圖的局部過程。 之前的webUI中涉及到ContrlNet部分知識&#xff1a;SD-細節控制-CSDN博客 概…

SOEM build on ubuntu

1.配置 soem2.編譯 soem3.結果4.記錄一下自己的開發環境家里臺式機

STM32--USART串口通信的應用(第一節串口通信的概念)

咱們今天呢給大家講解咱們 stm32 開發當中的串口的應用啊 &#xff0c; 串口這個專題呢啊是我們那 個學習上必須要掌握的一個外設串口有什么作用呢&#xff0c;其實在我們以后的這個開發程序當中&#xff0c;咱們可能經常需要用到一些調試 信息&#xff0c;對吧&#xff1f; 啊…

STM32F407ZGT6天氣時鐘+實時溫濕度顯示(附源碼)

文章目錄實現功能&#xff1a;項目展示&#xff1a;代碼解析&#xff1a;實現功能&#xff1a; 1.主要功能&#xff1a;通過485通信獲取傳感器溫濕度&#xff0c;溫濕度數據顯示、實時時鐘顯示與用戶交互。使用LVGL在顯示屏上展示傳感器溫濕度數據&#xff0c;并提供UI設置溫度…

和鯨社區深度學習基礎訓練營2025年關卡4

使用 pytorch 構建一個簡單的卷積神經網絡&#xff08;CNN&#xff09;模型&#xff0c;完成對 CIFAR-10 數據集的圖像分類任務。 直接使用 CNN 進行分類的模型性能。 提示&#xff1a; 數據集&#xff1a;CIFAR-10 網絡結構&#xff1a;可以使用 2-3 層卷積層&#xff0c;ReLU…

前端性能優化全攻略:從加載到渲染

目錄 前言網絡請求優化資源加載優化JavaScript執行優化渲染優化用戶體驗優化性能監控與分析總結 前言 隨著Web應用復雜度不斷提升&#xff0c;前端性能優化變得尤為重要。本文將系統性地介紹從資源加載到頁面渲染的全鏈路性能優化策略&#xff0c;幫助開發者構建高效、流暢的…

hiredis: 一個輕量級、高性能的 C 語言 Redis 客戶端庫

目錄 1.簡介 2.安裝和配置 2.1.源碼編譯安裝&#xff08;通用方法&#xff09; 2.2.包管理器安裝&#xff08;特定系統&#xff09; 2.3.Windows 安裝 3.常用的函數及功能 3.1.連接管理函數 3.2.命令執行函數 3.3.異步操作函數 3.4.回復處理函數 3.5.錯誤處理 3.6.…

TCP套接字

1.概念套接字是專門進行網絡間數據通信的一種文件類型&#xff0c;可以實現不同主機之間雙向通信&#xff0c;包含了需要交換的數據和通信雙方的IP地址和port端口號。2.套接字文件的創建int socket(int domain, int type, int protocol); 功能&#xff1a;該函數用來創建各種各…

Go語言高并發聊天室(一):架構設計與核心概念

Go語言高并發聊天室&#xff08;一&#xff09;&#xff1a;架構設計與核心概念 &#x1f680; 引言 在當今互聯網時代&#xff0c;實時通信已成為各類應用的核心功能。從微信、QQ到各種在線協作工具&#xff0c;高并發聊天系統的需求無處不在。本系列文章將手把手教你使用Go語…

Java基礎:泛型

什么是泛型&#xff1f; 簡單來說&#xff0c;Java泛型是JDK 5引入的一種特性&#xff0c;它允許你在定義類、接口和方法時使用類型參數&#xff08;Type Parameters&#xff09;。這些類型參數可以在編譯時被具體的類型&#xff08;如 String, Integer, MyCustomClass 等&…

RMSNorm實現

當前Qwen、Llama等系列RMSNorm實現源碼均一致。具體現實如下&#xff1a; class RMSNorm(nn.Module):def __init__(self, hidden_size, eps1e-6):super().__init__()self.weight nn.Parameter(torch.ones(hidden_size))self.variance_epsilon epsdef forward(self, hidden_s…

智能Agent場景實戰指南 Day 11:財務分析Agent系統開發

【智能Agent場景實戰指南 Day 11】財務分析Agent系統開發 文章標簽 AI Agent,財務分析,LLM應用,智能財務,Python開發 文章簡述 本文是"智能Agent場景實戰指南"系列第11篇&#xff0c;聚焦財務分析Agent系統的開發。文章深入解析如何構建一個能夠自動處理財務報表…

人工智能安全基礎復習用:可解釋性

一、可解釋性的核心作用1. 錯誤檢測與模型改進發現模型的異常行為&#xff08;如過擬合、偏見&#xff09;&#xff0c;優化性能。例&#xff1a;醫療模型中&#xff0c;可解釋性幫助識別誤診原因。2. 安全與可信性關鍵領域&#xff08;醫療、軍事&#xff09;需透明決策&#…

Qt:QCustomPlot類介紹

QCustomPlot的核心類就是QCustomPlot類。這個類繼承自QWidget&#xff0c;因此可以像其他QWidget一樣使用&#xff0c;比如放入布局中。QCustomPlot類基本結構一個QCustomPlot對象可以包含多個圖層&#xff08;通過QCPLayer表示&#xff09;&#xff0c;通常使用默認圖層。它包…

Visual Studio 2022 上使用ffmpeg

目錄 1. 添加包含目錄 2. 添加庫目錄 3. 添加依賴項 4. 添加動態庫目錄 5. 測試 在解決方案中右擊項目名稱&#xff0c;彈出的窗口中選擇 "屬性"。 1. 添加包含目錄 "C/C" -> "常規" -> "附加包含目錄"中添加 ffmpeg中的…

Elasticsearch 線程池

Elasticsearch 線程池「每個線程池到底采用哪種實現策略」&#xff1a;Elasticsearch 線程池&#xff08;ThreadPool&#xff09;中 **所有內置線程池名稱的常量定義**。 每個字符串常量對應一個 **線程池的名字&#xff08;name&#xff09;**&#xff0c;也就是你在 Thread…