sell-test是sell应用的webx层接口测试工程,有1600多个case,执行时间约为40min,最近对这个工程作了一些运行时间调优,成果显著,现在执行时间约17min。
优化主要方法就是提取数据,分析数据,改进耗时部分、减少重复工作。
1.分析maven输出的统计信息
>Running com.taobao.qatest.editItem.csellerEditItem.checkSpuEditItem.CCheckSpuInfoItemTest >Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.384 sec <<< FAILURE! >Running com.taobao.qatest.editItem.csellerEditItem.checkSpu.CheckSpuTest >Tests run: 19, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 17.951 sec >Running com.taobao.qatest.editItem.csellerEditItem.checkSkuSort.CheckSkuPropertySortTest >Tests run: 4, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 3.305 sec <<< FAILURE! |
maven用来执行测试的surfire插件会输出如下的基本统计信息,信息非常有限,只能提取到每个类执行的时间,类里面的@Test执行个数。
从以上信息里,我们可以分析出每个类执行的时间,每个类里面case的平均时间,绝大部分的case执行时间都在0-3s,有一个类:
com.taobao.qatest.editItem.csellerEditItem.checkChangeItemProperty.CSellerChangeItemPropertyTest的执行时间特别长,总时间340s,平均每个case执行时间85s。
CSellerChangeItemPropertyTest类5个case耗时接近7分钟,重点解决。接下来review这个类,没有发现问题,只好在每个@Test方法开始和最后都加上时间统计,输出@Test方法本身的执行时间。执行过后发现@Test耗时约 200ms,本身并不慢。
……………………
2. btrace提取耗时用例的执行情况
静态代码review没有结果,就只能提取运行时数据了,写了一个简单的btrace脚本用来提取每个方法(com.taobao.*包)的耗时,单独运行:
CSellerChangeItemPropertyTest这个类并提取数据。
取耗时top前10w,发现SkuDB#queryCountBySkuId()的次数非常多(9.7w),每次约20ms。
>(ps:
>SkuDB是auction-db.jar提供的工具类,auction-db为了屏蔽商品数据库分库分表的细节,封装了基本的删、改、查操作,提供透明的数据访问方法,可以"简单"理解成mini TDDL。)