走進Java接口測試之從0到1搭建數據驅動框架(設計篇)

前言

在上文走進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-generatormybatis-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及以上

小結

本文根據需求設計了一個框架,後續將具體看如何去落地。

預備知識:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章