您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
测试引擎——整合测试引擎
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
测试引擎——整合测试引擎
Apache ShardingSphere
2021-01-19
IP归属:未知
26880浏览
## 流程 Junit 中的 `Parameterized` 会聚合起所有的测试数据,并将测试数据一一传递给测试方法进行断言。数据处理就像是沙漏中的流沙: ![](//img1.jcloudcs.com/developer.jdcloud.com/7537cef7-a49a-456d-8ee2-933937da5dde20210119105014.jpg) ### 配置 - 环境类文件 - /shardingsphere-integration-test-suite/src/test/resources/env-native.properties - /shardingsphere-integration-test-suite/src/test/resources/env/`SQL-TYPE`/dataset.xml - /shardingsphere-integration-test-suite/src/test/resources/env/`SQL-TYPE`/schema.xml - 测试用例类文件 - /shardingsphere-integration-test-suite/src/test/resources/cases/`SQL-TYPE`/`SQL-TYPE`-integration-test-cases.xml - /shardingsphere-integration-test-suite/src/test/resources/cases/`SQL-TYPE`/dataset/`FEATURE-TYPE`/*.xml - sql-case 文件 - /shardingsphere-integration-test-suite/src/main/resources/sql/sharding/`SQL-TYPE`/*.xml ### 环境配置 集成测试需要真实的数据库环境,根据相应的配置文件创建测试环境: 首先,修改配置文件 `/shardingsphere-integration-test-suite/src/test/resources/env-native.properties` ,例子如下: ```properties # 测试主键,并发,column index等的开关 it.run.additional.cases=false # 测试场景,可指定多种规则 it.scenarios=db,tbl,dbtbl_with_replica_query,replica_query # 要测试的数据库,可以指定多种数据库(H2,MySQL,Oracle,SQLServer,PostgreSQL) it.databases=MySQL,PostgreSQL # MySQL配置 it.mysql.host=127.0.0.1 it.mysql.port=13306 it.mysql.username=root it.mysql.password=root ## PostgreSQL配置 it.postgresql.host=db.psql it.postgresql.port=5432 it.postgresql.username=postgres it.postgresql.password=postgres ## SQLServer配置 it.sqlserver.host=db.mssql it.sqlserver.port=1433 it.sqlserver.username=sa it.sqlserver.password=Jdbc1234 ## Oracle配置 it.oracle.host=db.oracle it.oracle.port=1521 it.oracle.username=jdbc it.oracle.password=jdbc ``` 其次,修改文件 `/shardingsphere-integration-test-suite/src/test/resources/env/SQL-TYPE/dataset.xml` 在`dataset.xml`文件中定义元数据和测试数据。例如: ```xml <dataset> <metadata data-nodes="tbl.t_order_${0..9}"> <column name="order_id" type="numeric" /> <column name="user_id" type="numeric" /> <column name="status" type="varchar" /> </metadata> <row data-node="tbl.t_order_0" values="1000, 10, init" /> <row data-node="tbl.t_order_1" values="1001, 10, init" /> <row data-node="tbl.t_order_2" values="1002, 10, init" /> <row data-node="tbl.t_order_3" values="1003, 10, init" /> <row data-node="tbl.t_order_4" values="1004, 10, init" /> <row data-node="tbl.t_order_5" values="1005, 10, init" /> <row data-node="tbl.t_order_6" values="1006, 10, init" /> <row data-node="tbl.t_order_7" values="1007, 10, init" /> <row data-node="tbl.t_order_8" values="1008, 10, init" /> <row data-node="tbl.t_order_9" values="1009, 10, init" /> </dataset> ``` 开发者可以在 `schema.xml` 中自定义建库与建表语句。 ### 断言配置 `env-native.properties` 与 `dataset.xml ` 确定了什么SQL在什么环境执行,下面是断言数据的配置: 断言的配置,需要两种文件,第一类文件位于 `/shardingsphere-integration-test-suite/src/test/resources/cases/SQL-TYPE/SQL-TYPE-integration-test-cases.xml` 这个文件类似于一个索引,定义了要执行的SQL,参数以及期待的数据的文件位置。这里的 test-case 引用的就是`sharding-sql-test`中 SQL 对应的`sql-case-id`,例子如下: ```xml <integration-test-cases> <dml-test-case sql-case-id="insert_with_all_placeholders"> <assertion parameters="1:int, 1:int, insert:String" expected-data-file="insert_for_order_1.xml" /> <assertion parameters="2:int, 2:int, insert:String" expected-data-file="insert_for_order_2.xml" /> </dml-test-case> </integration-test-cases> ``` 还有一类文件 -- 断言数据,也就是上面配置中的 expected-data-file 对应的文件,文件在 `/shardingsphere-integration-test-suite/src/test/resources/cases/SQL-TYPE/dataset/FEATURE-TYPE/*.xml` 这个文件内容跟 dataset.xml 很相似,只不过`expected-data-file`文件中不仅定义了断言的数据,还有相应SQL执行后的返回值等。例如: ```xml <dataset update-count="1"> <metadata data-nodes="db_${0..9}.t_order"> <column name="order_id" type="numeric" /> <column name="user_id" type="numeric" /> <column name="status" type="varchar" /> </metadata> <row data-node="db_0.t_order" values="1000, 10, update" /> <row data-node="db_0.t_order" values="1001, 10, init" /> <row data-node="db_0.t_order" values="2000, 20, init" /> <row data-node="db_0.t_order" values="2001, 20, init" /> </dataset> ``` 所有需要配置的数据,都已经配置完毕,启动相应的集成测试类即可,全程不需要修改任何 `Java` 代码,只需要在 `xml` 中做数据初始化以及断言,极大的降低了ShardingSphere数据测试的门槛以及复杂度。 ## 注意事项 1. 如需测试Oracle,请在pom.xml中增加Oracle驱动依赖。 1. 为了保证测试数据的完整性,整合测试中的分库分表采用了10库10表的方式,因此运行测试用例的时间会比较长。
原创文章,需联系作者,授权转载
上一篇:测试引擎——SQL解析/改写测试引擎
下一篇:测试引擎——序章
Apache ShardingSphere
文章数
96
阅读量
231327
作者其他文章
01
突破关系型数据库桎梏:云原生数据库中间件核心剖析
数据库技术的发展与变革方兴未艾,NewSQL的出现,只是将各种所需技术组合在一起,而这些技术组合在一起所实现的核心功能,推动着云原生数据库的发展。 NewSQL的三种分类中,新架构和云数据库涉及了太多与数据库相关的底层实现,为了保证本文的范围不至太过发散,我们重点介绍透明化分片数据库中间件的核心功能与实现原理,另外两种类型的NewSQL在核心功能上类似,但实现原理会有所差别。
01
Apache ShardingSphere数据脱敏全解决方案详解(上)
Apache ShardingSphere针对新业务上线、旧业务改造分别提供了相应的全套脱敏解决方案。
01
Shardingsphere整合Narayana对XA分布式事务的支持(4)
ShardingSphere对于XA方案,提供了一套SPI解决方案,对Narayana进行了整合,Narayana初始化流程,开始事务流程,获取连接流程,提交事务流程,回滚事务流程。
01
从中间件到分布式数据库生态,ShardingSphere 5.x革新变旧
5.x 是 Apache ShardingSphere从分库分表中间件向分布式数据库生态转化的里程碑,从 4.x 版本后期开始打磨的可插拔架构在 5.x 版本已逐渐成型,项目的设计理念和 API 都进行了大幅提升。欢迎大家测试使用!
最新回复
丨
点赞排行
共0条评论
Apache ShardingSphere
文章数
96
阅读量
231327
作者其他文章
01
突破关系型数据库桎梏:云原生数据库中间件核心剖析
01
Apache ShardingSphere数据脱敏全解决方案详解(上)
01
Shardingsphere整合Narayana对XA分布式事务的支持(4)
01
从中间件到分布式数据库生态,ShardingSphere 5.x革新变旧
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号