實現 JDBC 2.0 介面代理,攔截所有 JDBC 調用,兩種模式:
String driver = "nl.griffelservices.proxy.jdbc.oracle.StubTracerDriver";
String url = "jdbc:tracer::COM.ibm.db2.jdbc.app.DB2Driver:jdbc:db2:SAMPLE";
// 格式: jdbc:tracer:::
// logFile 為空輸出控制台
輸出示例:每個方法調用、參數、返回值、異常完整記錄,含 Connection/Statement/ResultSet 對象狀態快照。
String url = "jdbc:stubtracer:output:COM.ibm.db2.jdbc.app.DB2Driver:jdbc:db2:SAMPLE";
// 格式: jdbc:stubtracer:::
// output 目錄下生成 request_0_0.txt, response_0_0.txt ... (id_status)
Request 示例:
<request>
<class>java.sql.Driver</class>
<id>0</id>
<status>0</status>
<method>connect</method>
<parameter><class>java.lang.String</class><value>jdbc:db2:SAMPLE</value></parameter>
<parameter><class>java.util.Properties</class><value>{language=C}</value></parameter>
</request>
Response 示例:返回新對象代理標識 ProxyObject(id=1, status=0)。
// 命令行
java nl.griffelservices.proxy.stub.StubTracerMerger output
// 參數: [ []]
// 輸出: 整合 XML 到控制台,手工保存為 merger.xml
合併邏輯:按調用順序將所有 Request/Response 串聯在 <response> 根節點下,對象狀態用 ProxyObject(id, status) 追蹤。
String driver = "nl.griffelservices.proxy.jdbc.oracle.StubTracerDriver";
String url = "jdbc:stub:localhost:80:1000";
// 格式: jdbc:stub:::
// 需將 merger.xml 放入 HTTP 服務器根目錄 (如 Apache htdocs/index.xml)
流程:應用發起 JDBC 調用 → 代理發 HTTP 請求 → 服務器從 merger.xml 匹配 Request 返回 Response → 代理構造結果返回應用。
原版 JdbcProxy 不支持,作者擴展實現:
FileStubTracerDriver、FileClient、FileStubHandler、FileCombinedHandlerStubTracerHandler.invoke() 直接內存合併,生成 mergerfile.xml
// 生成合併文件
String url = "jdbc:stubtracer::COM.ibm.db2.jdbc.app.DB2Driver:jdbc:db2:SAMPLE";
// 運行應用後調用
new GenerateMergerFile("output/mergerfile.xml").generateFile();
// 回放使用
String driver = "nl.griffelservices.proxy.jdbc.oracle.FileStubTracerDriver";
String url = "jdbc:stub:output/mergerfile.xml";
// 格式: jdbc:stub:
| 場景 | 構建方法 |
|---|---|
| 空結果集 | 編輯 merger.xml 刪除 ResultSet 相關 Response,或修改 rowCount=0 |
| 單行結果 | 保留一行數據 |
| 分頁測試 | 構造 100 行數據,驗證 LIMIT/OFFSET 邏輯 |
| 異常模擬 | 在 Response 中注入 SQLException |
| 多用戶並行測試 | HTTP 模式共享同一 merger.xml,數據天然一致 |