選了很久的技術(shù)棧片任,最后選了groovy+spock+junit為核心的方案
原因是:
groovy作為腳本語言,和java很好并存振愿,使用起來有比較方便
spock 他的語法使得測試更易于理解易于維護
junit 作為老的測試框架 還是很不錯的
公司的核心框架是springboot 因此也做了點整合
簡單的為自己封裝了一個自己使用的測試工具包萍嬉,把一些重復(fù)的事情處理掉
主要實現(xiàn)了
如何簡化初始化mysql和hbase hbase,mysql操作封裝簡化
mysql使用了h2
hbase使用了hbase mini集群
mysql初始化支持讀sql文件和自定義的data文件
hbase支持讀取data文件 并自動創(chuàng)建相關(guān)表
data文件規(guī)則:
- 文件名即表名
- 具體內(nèi)容
hbase
第二行是 列和列簇的定義 語法: 列簇1(列1芽偏, 列2..) ..
第三行 數(shù)據(jù)定義 語法: rowkey |列1 |列2 ...
hbase
base(ptRule,family,quality) org(schoolId,structId)
role:1 |every_day |count | every_day_uv| 1| schoolId1| structId1|
role:2 |every_day |count | every_day_uv| 1| schoolId1| structId2|
1 |every_day |count | every_day_uv| 1| schoolId1| structId3|
2 |every_day |count | every_day_uv| 1| schoolId1| structId4|
mysql
第二行是 列定義 語法: 列1揽乱, 列2....
第三行 數(shù)據(jù)定義 列1 |列2 ...
mysql
id,name
1 |every_day
2 |every_day
自動讀取data目錄下的mysql相關(guān)的數(shù)據(jù)文件和sql文件
sql文件優(yōu)先于數(shù)據(jù)文件
hbase不會自動讀取名眉,只會在第一次啟動hbase mini集群的時候自動讀取
因為很多時候測試,并不需要啟動hbase mini集群 并且集群啟動要幾十秒 浪味時間
mhysql和hbase只會初始化一次 多次調(diào)用沒用
使用方式
H2Config.getH2Datasource()
H2Config.getSql()
HbaseConfig.start()
HbaseTestUtil.simpleScan("","","")
//還有其他封裝方法HbaseTestUtil.XXX() MysqlTestUtil.XXX()
@Configuration
@Profile("test")
class TestConfig {
@Bean(name = "quotaDataSource")
@Qualifier("quotaDataSource")
@Primary
DataSource tagDataSource() {
return H2Config.getH2Datasource()
}
@Bean
DataInitScript dataInitScript(){
//hbase的啟動太慢 還是手動啟動吧
DataInitScript dataInitScript = new DataInitScript()
dataInitScript.initAll true
return dataInitScript
}
}
spingboot 整合
@WebAppConfiguration
@ContextConfiguration(classes = [App.class], loader = SpringBootContextLoader.class)
class QuotaConditionDaoImplTest extends Specification {
def setupSpec() {}
def setup() {}
def "test demo"(){
given:
A a = new A()
when:
String result = a.doMethod()
then:
result.equal(data)
//expect:
cleanup:
//clean
where:
data |_
"data" |_
"data2" |_
}
}
@SpringBootApplication
@ComponentScan(["com.XXX.core","com.dongweima.data.unit.test"])
class App extends SpringBootServletInitializer {
static void main(String[] args) {
run(App.class, args)
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(App.class)
}
}
maven 發(fā)布在阿里云maven上
<dependency>
<groupId>com.dongweima.test</groupId>
<artifactId>test-util</artifactId>
<version>${test-util.version}</version>
<scope>test</scope>
</dependency>