前言
在上文走進Java接口測試之從0到1搭建數據驅動框架(需求篇) 中我們介紹了數據驅動框架中的需求,本文我們將根據需求進入設計階段,廢話不多說,直接進入主題。
技術架構
主要特點
- 使用目前的主流
SpringBoot 2.2.0
作爲項目的主體框架; - 使用 Maven 作爲構建項目,方便管理依賴的 JAR 包;
- 使用 MySQL 集中式管理測試用例,結構化數據;
- 使用 TestNG 作爲測試框架,強大的參數化功能,方便執行測試腳本;
- MySQL 數據庫管理測試用例,SQL 參數化驅動用例運行,實現測試腳本和數據的解耦;
- 基於
Mybatis Generator
或者Mybatis Generator GUI
自動化生成持久層代碼,節省大量重複開發工作; - 使用
TypeHandler
解決自定義類型預處理; - 實現註解式動態數據源,滿足 N 個業務數據源測試需求;
- 豐富的日誌管理功能,支持異常調試,慢SQL監控;
- 友好的代碼結構及註釋,便於閱讀及二次開發。
技術選型
- 核心框架:SpringBoot 2.2.0
- 構建工具:Maven 3.5.4
- 測試用例管理:MySQL 5.7
- 測試用例參數:SQL
- 測試框架:TestNg 6.14.3
- 腳本參數化:
@DataProvider
&Testng.xml
- 日誌框架:Logback
- 持久層框架:Mybatis 3
- 自定義類型處理器:TypeHandler
- 代碼生成工具:
mybatis-generator
或mybatis-generator-gui
- 連接池:阿里 druid
- SQL攔截工具:P6Spy
- 多數據源啓動器:
dynamic-datasource-spring-boot-starter
- 開發插件:Lombok
工具簡介
SpringBoot
SpringBoot 它使用“習慣優於配置”(項目中存在大量的配置,此外還內置一個習慣性的配置,讓你無須手動進行配置)的理念讓 Java 項目快速運行起來。使用 SpringBoot 很容易創建一個獨立運行(運行 Jar ,內嵌 Servlet 容器)、準生產級別的基於 Spring 的框架項目,使用 SpringBoot 你可以不用或者只需要很少的 Spring 配置。
用白話來理解,就是 SpringBoot 其實不是什麼新框架,它默認配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,SpringBoot 整合了幾乎所有的框架。
官網:https://spring.io/projects/spring-boot
Maven
Maven 作爲一個構建工具,不僅能幫我們自動化構建,還能夠抽象構建過程,提供構建任務實現;它跨平臺,對外提供了一致的操作接口,這一切足以使它成爲優秀的、流行的構建工具。
Maven 不僅是構建工具,還是一個依賴管理工具和項目管理工具,它提供了中央倉庫,能幫助我們自動下載構件。
官網:https://maven.apache.org/
MySQL
MySQL是一個關係型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 是最流行的關係型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件之一。
MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
MySQL所使用的 SQL 語言是用於訪問數據庫的最常用標準化語言。MySQL 軟件採用了雙授權政策,分爲社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作爲網站數據庫。
----- 摘抄自百度百科
官網:https://www.mysql.com/
TestNg
TestNG 是一個受 JUnit 和 NUnit 啓發的測試框架,旨在簡化廣泛的測試需求,從單元測試到接口測試。
但引入了一些新功能,使其更強大,更易於使用,例如:
- 註釋。
- 在線程池中運行測試,並提供各種可用策略(單線程,多線程等等)
- 測試的代碼是多線程安全的
- 靈活的測試配置
- 支持數據驅動的測試(使用 @DataProvider)
- 支持參數化
- 強大的執行模型(不再是 TestSuite)
- 由各種工具和插件(Eclipse,IDEA,Maven 等)支持。
- 嵌入 BeanShell 腳本以獲得更大的靈活性
- 用於運行時和日誌記錄的缺省 JDK 函數(無依賴項)
- 應用服務器測試的依賴方法
- TestNG旨在涵蓋所有類別的測試:單元,接口,端到端,集成等…
官網:https://testng.org/
Logback
LogBack 是 Log4j 的改良版本,比 Log4j 擁有更多的特性,同時也帶來很大性能提升,同時天然支持SLF4J。
LogBack 官方建議配合 Slf4j 使用,這樣可以靈活地替換底層日誌框架。
官網:http://logback.qos.ch/
Mybatis
MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)爲數據庫中的記錄。
mybatis-generator
MyBatis Generator
是 MyBatis 的代碼生成器,支持爲 MyBatis 的所有版本生成代碼。非常容易及快速生成 Mybatis 的Java POJO文件及數據庫 Mapping 文件。
官網:http://mybatis.org/generator/
mybatis-generator-gui
mybatis-generator-gui
是基於mybatis generator
開發一款界面工具, 本工具可以使你非常容易及快速生成Mybatis的Java POJO文件及數據庫Mapping文件。
官網:https://github.com/zouzg/mybatis-generator-gui
Druid
Druid 是一個關係型數據庫連接池,它是阿里巴巴的一個開源項目。Druid 支持所有 JDBC 兼容數據庫,包括了Oracle、MySQL、PostgreSQL、SQL Server、H2等。
Druid 在監控、可擴展性、穩定性和性能方面具有明顯的優勢。通過 Druid 提供的監控功能,可以實時觀察數據庫連接池和SQL查詢的工作情況。使用 Druid 連接池在一定程度上可以提高數據訪問效率。
官網:https://druid.apache.org/
P6Spy
p6spy 是一個開源項目,通常使用它來跟蹤數據庫操作,查看程序運行過程中執行的sql語句。
官網:https://github.com/p6spy/p6spy
dynamic-datasource-spring-boot-starter
dynamic-datasource-spring-boot-starter 是一個基於 springboot 的快速集成多數據源的啓動器。
其支持 Jdk 1.7+, SpringBoot 1.4.x、1.5.x、 2.0.x。
官網:https://github.com/baomidou/dynamic-datasource-spring-boot-starter
Lombok
Lombok 項目是一個 Java 庫,它會自動插入您的編輯器和構建工具中,從而使您的Java更加生動有趣。
永遠不要再寫另一個 getter 或 equals 方法,帶有一個註釋的您的類有一個功能全面的生成器,自動化您的日誌記錄變量等等。
官網:https://projectlombok.org/
項目結構
├─logs
│ └─spring-boot-logback # 日誌文件
│ all_api-test-logback.log # 所有日誌
│ err_api-test-logback.log # 錯誤日誌
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─zuozewei
│ │ │ └─springbootdatadrivendemo
│ │ │ │ SpringbootDataDrivenDemoApplication.java # 啓動類
│ │ │ │
│ │ │ ├─db
│ │ │ │ ├─auto # 存放MyBatis Generator生成器生成的數據層代碼,可以隨時刪除再生成
│ │ │ │ │ ├─mapper # DAO 接口
│ │ │ │ │ └─model # Entity 實體
│ │ │ │ └─manual # 存放自定義的數據層代碼,包括對MyBatis Generator自動生成代碼的擴展
│ │ │ │ ├─mapper # DAO 接口
│ │ │ │ └─model # Entity 實體
│ │ │ ├─handler # 數據轉換
│ │ │ └─service # 業務邏輯
│ │ │ └─impl # 實現類
│ │ │
│ │ └─resources
│ │ │ application.yml # 全局配置文件
│ │ │ generatorConfig.xml # Mybatis Generator 配置文件
│ │ │ logback-spring.xml # logback 配置文件
│ │ │ spy.properties # P6Spy 配置文件
│ │ │
│ │ ├─db
│ │ ├─mapper
│ │ │ └─com
│ │ │ └─zuozewei
│ │ │ └─springbootdatadrivendemo
│ │ │ └─db
│ │ │ ├─auto # 存放MyBatis Generator生成器生成的數據層代碼,可以隨時刪除再生成
│ │ │ │ └─mapper # 數據庫 Mapping 文件
│ │ │ │
│ │ │ └─manual # 存放自定義的數據層代碼,包括對MyBatis Generator自動生成代碼的擴展
│ │ │ └─mapper # 數據庫 Mapping 文件
│ │ └─testng
│ │ │ APICollection-TestSuite.xml # 所用測試用例集
│ │ └─jdbcbapi
│ │ jdbcAPI-TestSuite.xml # 某API測試用例集
│ │
│ └─test
│ └─java
│ └─com
│ └─zuozewei
│ └─springbootdatadrivendemo
│ └─demo # 接口測試用例
開發環境
- SUN JDK1.8及以上
- Maven 3.5.4及以上
- IntelliJ IDEA 2018及以上
- windows/macOS
- Git 不限
- MySQL 5.7及以上
- Navicat Premium 11.2.7及以上 或 SQLyog 11.3及以上
小結
本文根據需求設計了一個框架,後續將具體看如何去落地。
預備知識: