@yanglfyangl
2018-11-26T03:47:26.000000Z
字数 1727
阅读 514
复化文旅
标签: 复化文旅
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,不能出现新增的失败。如果失败,则需要在当天解决。