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

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

前言

在上文 走进Java接口测试之从0到1搭建数据驱动框架(需求篇) 中我们介绍了数据驱动框架中的需求,本文我们将根据需求进入设计阶段,废话不多说,直接进入主题。

技术架构

主要特点

  • 使用目前的主流 SpringBoot2.2.0 作为项目的主体框架;
  • 使用 Maven 作为构建项目,方便管理依赖的 JAR 包;
  • 使用 MySQL 集中式管理测试用例,结构化数据;
  • 使用 TestNG 作为测试框架,强大的参数化功能,方便执行测试脚本;
  • MySQL 数据库管理测试用例,SQL 参数化驱动用例运行,实现测试脚本和数据的解耦;
  • 基于 MybatisGenerator 或者 MybatisGeneratorGUI 自动化生成持久层代码,节省大量重复开发工作;
  • 使用 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

MyBatisGenerator是 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及以上

小结

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

本文分享自微信公众号 - 7DGroup(Zee_7DGroup),作者:左泽位

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 性能工具之网络工具iperf3简单介绍

    以上是测试压力机与服务器之前的网络带宽简单方法,大家做性能测试是否也是这样确定网络带宽大小。

    高楼Zee
  • 走进Java接口测试之工具类库 Hutool

    在 GitHub 上见到过很多开源的自动化框架内都自带了很多 Util 工具类,我们自己在开发自动化框架也必然需要用到工具类库,那么这样就会带来一些问题:

    高楼Zee
  • 走进Java接口测试之多环境配置

    在日常开发过程中,我们都会有多套开发环境,比如:开发、测试、生产等不同的应用环境,这些应用环境都对应不同的配置项,包括不同环境数据库地址、端口号等都是不尽相同的...

    高楼Zee
  • 【JavaWeb】65:JDBC设计思想

    于是Java就制定了一个接口,现在要连接数据库怎么办?直接用接口调用连接数据库的方法:

    刘小爱
  • 数据库流行度11月排行榜:Oracle 意外滑落和 PostgreSQL 再创新高

    2018年11月数据库流行度排行榜已经出炉,让人意外的是,这个月 Oracle 的积分和 MySQL 双双下滑,而且是在 10 月 Oracle OpenWor...

    数据和云
  • 云上未来:沃趣科技数据库融合PaaS云平台建设探索

    云计算、大数据、人工智能、等新兴技术不断发展壮大,驱使更多应用的发展创新,但是我们通过搜索Google引擎的DB-Engines Ranking搜索热度可以看到...

    沃趣科技
  • JDBC编程

    本章要点 •JDBC概述 •JDBC API(Application Programming Interface)应用程序编程接口 •使用JDBC-ODBC桥连...

    程序源代码
  • Python之Django环境搭建(MAC+pycharm+Django++postgreSQL)

    Python之Django环境搭建(MAC+pycharm+Django++postgreSQL)

    上帝
  • Python之Django环境搭建(MAC+pycharm+Django++postgreSQL)

    上帝
  • JDBC(一)获取数据库连接

    持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固...

    leeqico

扫码关注云+社区

领取腾讯云代金券