@yanglfyangl
2018-11-26T03:47:26.000000Z
字数 1727
阅读 576
复化文旅
标签: 复化文旅
Overall
Test-Assured是基于Rest-Assured开发的适用于我们的一个测试框架。
虽然Rest-assured很强大了,但因为我们的服务的特殊性,还有如下困难
- 接口通,如果不通过其它接口做闭环测试的话,无法保证内部逻辑正确。
- 根据不同的数据测试不同的场景,也很困难。
我们的调用时序图示例:
如果要弄清楚需要什么样的测试框架,需要先了解架构,我们的架构中有类似如下的调用关系:
架构的优势和劣势:
我们的架构中:
1. 多个中件间不同程度的参与。
2. 通过队列进行了解耦。
这样的优势是:
1. 性能高;计算与主流程是分离的。
2. 易扩容。
这样的劣势是:
1. 开发难度高。
2. 组件之间代码的互相影响概率高。
3. 难于测试。如果不做很全面的业务闭环测试,很难发现一些细小的逻辑错误。
Test-Assured的建议:
//调用Rest接口。given().config(RestAssuredConfig.config().headerConfig(HeaderConfig.headerConfig().overwriteHeadersWithName("header1"))).header("header1", "value1").spec(specification).then().get("/multiHeaderReflect").expect().body(containsString("abc")).body(contains("abc"))//调用接口后进行数据库验证。String dbresult = DBGiven().config().then().getQuery("select * from mysql where XXX").expect().Results().string(containsString("abc")).Results().list(contains("abc"))//调用接口后进行redis验证。RedisGiven().config().then().getQuery("key").expect().Results().string(containsString("abc")).Results().list(contains("abc"))//调用接口后进行ES验证。EsGiven().config().then().getQuery("match:{}").expect().Results().string(containsString("abc")).Results().list(contains("abc"))//调用接口后进行ES验证。String tuResult = TuGiven().config().then().getQuery("g.V(...)").expect().Results().string(containsString("abc")).Results().list(contains("abc"))
未来的开发方式变化
开发新功能:
- 第一步:讨论设计方案
- 第二步:接口设计
- 第三步:数据库或其它数据源设计
- 第四步:缓存、队列设计
- 第五步:根据之前讨论的结果,将主要流程用上面的方式写出测试用例。
- 第六步:开发代码,代码结束的标志是上面的case全部跑通。
功能回归或bug修改:
- 第一步:分析bug
- 第二步:进行调试并修改。
- 第三步:修改完成后跑本模块的test (使用上面的case),提交前不能有失败。
- 第四步:提交后跑整个系统的case,不能出现新增的失败。如果失败,则需要在当天解决。