走进Java接口测试之从0到1搭建数据驱动框架(设计篇)

举报
zuozewei 发表于 2021/09/21 10:25:26 2021/09/21
【摘要】 本文根据需求设计了一个框架,后续将具体看如何去落地。

前言

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

小结

本文根据需求设计了一个框架,后续将具体看如何去落地。

预备知识:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。