【硬核乾貨】10 分鐘徹底搞懂分散式/本地事務測試!資深測試工程師保姆餵飯式教你快速驗證資料一致性(附實戰案例)
最近面試了 7 家公司,戰況還不錯,拿到了 4 家公司的口頭或書面 offer,其中不乏 web3 領域大廠,後面會寫篇文章詳細聊聊這塊經歷。
在這麼多場面試中,有個場景測試題,讓我印象深刻,打算寫篇文章由淺入深聊聊這道題,如果深入去分析這道題,可能會扒出來很多後端技術問題,對於想提高服務端測試技巧的小夥伴來說,可以極大擴寬知識面。
面試題如下:“假如專案中有兩個服務,分別為 A 和 B,使用者在前端頁面新建一條資料提交至 A 服務後端,A 服務要把資料落入本地資料庫中兩個表,然後再同步呼叫 B 服務的介面,進行資料同步,這個場景如果讓你去測試,請列出測試點”。
題目總體來說偏白盒,習慣做黑盒測試的小夥伴,看到這道題可能有點懵圈,不過沒關係,可以看看下圖,為了方便理解,我打算使用電商系統中,訂單服務和物流服務之間某個簡單業務流的互動進行類比:
從截圖中可以看到,這是一個簡單的訂單服務和物流服務的時序圖,描述了使用者提交訂單請求以及訂單服務與資料庫和物流服務的互動流程。具體的業務流程如下:
1、使用者提交訂單請求: 使用者透過前端頁面提交訂單建立請求。
2、插入訂單總表: 訂單服務將訂單的總資訊插入到資料庫的訂單總表中。
3、插入訂單詳情表: 同時,訂單服務將訂單的詳細資訊插入到資料庫的訂單詳情表中。
4、呼叫物流服務介面:訂單服務呼叫物流服務 API,傳送訂單的物流資訊並請求同步物流處理。
5、返回處理結果:
物流服務處理完訂單的物流資訊後,返回處理結果給訂單服務,最後訂 單服務返回訂單處理的結果給使用者。
該圖簡潔地展示了訂單服務如何與資料庫和物流服務進行互動,以確保訂單建立和物流同步的過程。
虛擬碼如下:
// 訂單服務public class OrderService {
private OrderDatabase orderDatabase; private LogisticsService logisticsService;
public OrderService(OrderDatabase orderDatabase, LogisticsService logisticsService) { this.orderDatabase = orderDatabase; this.logisticsService = logisticsService; }
public void processOrder(Order order) { // 1. 使用者提交訂單請求,開始處理訂單 System.out.println("使用者提交訂單請求...");
// 2. 插入訂單總表 boolean orderInsertSuccess = orderDatabase.insertOrder(order); if (orderInsertSuccess) { System.out.println("插入訂單總表成功。"); } else { System.out.println("插入訂單總表失敗。"); return; // 如果插入失敗,終止後續操作 }
// 3. 插入訂單詳情表 boolean orderDetailsInsertSuccess = orderDatabase.insertOrderDetails(order.getOrderDetails()); if (orderDetailsInsertSuccess) { System.out.println("插入訂單詳情表成功。"); } else { System.out.println("插入訂單詳情表失敗。"); return; // 如果插入失敗,終止後續操作 }
// 4. 呼叫物流服務介面,傳送物流資訊 boolean logisticsSyncSuccess = logisticsService.syncLogistics(order); if (logisticsSyncSuccess) { System.out.println("訂單物流資訊同步成功。"); } else { System.out.println("訂單物流資訊同步失敗。"); return; // 如果物流同步失敗,終止後續操作 }
// 5. 返回訂單處理結果 System.out.println("訂單處理成功。"); }}
// 訂單資料庫類public class OrderDatabase {
public boolean insertOrder(Order order) { // 模擬插入訂單總表 // 實際操作中,這裡將執行SQL插入操作 return true; // 返回插入是否成功 }
public boolean insertOrderDetails(List<OrderDetail> orderDetails) { // 模擬插入訂單詳情表 // 實際操作中,這裡將執行SQL插入操作 return true; // 返回插入是否成功 }}
// 物流服務類public class LogisticsService {
public boolean syncLogistics(Order order) { // 模擬呼叫物流服務API // 這裡會呼叫外部API同步物流資訊 return true; // 返回物流同步是否成功 }}
// 訂單類public class Order { private int orderId; private List<OrderDetail> orderDetails;
// 建構函式、getter、setter方法省略}
// 訂單詳情類public class OrderDetail { private int productId; private int quantity; private double price;
// 建構函式、getter、setter方法省略}
相關文章
- 奈學教你五分鐘學會分散式事務分散式
- 測試工程師必看!測試用例設計全解析,讓你徹底掌握工程師
- 5000+字硬核乾貨!Redis 分散式叢集部署實戰Redis分散式
- 分散式事務保姆級教程分散式
- 8年資深測試工程師如何提交有效缺陷工程師
- 效能測試進階實踐篇:10分鐘教你使用JMeter進行websocket測試!JMeterWeb
- 分散式事務實戰分散式
- 測試工程師最怕的事工程師
- HTTP代理如何爬取?保姆式教程(附測試影片)HTTP
- 12張圖帶你徹底理解分散式事務!!分散式
- 10分鐘搞懂:億級使用者的分散式資料儲存解決方案!分散式
- 資深Java工程師推薦新手乾貨教材 《Java Web開發實戰》Java工程師Web
- 在分散式系統中,軟體測試工程師如何測試你不知道的東西?分散式工程師
- 10分鐘徹底搞懂前端頁面效能監控前端
- 搞懂分散式技術17:淺析分散式事務分散式
- 不就是分散式事務,這下徹底清楚了?分散式
- 十分鐘搞懂分散式爬蟲分散式爬蟲
- 資料庫分散式事務的實現原理!資料庫分散式
- Spring Security 實戰乾貨:分散式物件SharedObjectSpring分散式物件Object
- 測試開發進階:一文教你從0到1搞懂大資料測試!大資料
- Jmeter效能測試:高併發分散式效能測試JMeter分散式
- 分散式事務之資料庫事務與JDBC事務實現(一)分散式資料庫JDBC
- 從 Oracle 轉型 MySQL 分散式事務資料庫的實戰旅途OracleMySql分散式資料庫
- Calvin:分割槽資料庫系統的快速分散式事務資料庫分散式
- 分散式事務(2)---強一致性分散式事務解決方案分散式
- 【乾貨分享】面試軟體測試工程師會被問到哪些問題?面試工程師
- 測試工程師必知的10大測試法則工程師
- 搞懂分散式技術19:使用RocketMQ事務訊息解決分散式事務分散式MQ
- Dubbo 分散式事務一致性實現分散式
- 好程式設計師分享乾貨 彈性分散式資料集RDD程式設計師分散式
- Seata-AT 如何保證分散式事務一致性分散式
- (轉載 --- 上篇) 分散式系統測試那些事兒 - 理念分散式
- 分散式事務理論加實戰分散式
- 分散式事務,強一致性方案有哪些?|分散式事務系列(二)分散式
- 大資料工程師分散式思維入門與面試真題講解大資料工程師分散式面試
- Jmeter系列(39)- Jmeter 分散式測試JMeter分散式
- 分散式事務最終一致性的簡單案例分散式
- 真正硬核分散式資料庫:開發分散式SQL資料庫的6種技術挑戰 - YugaByte分散式資料庫SQL