在金融应用的测试过程中,总是会面临一些与合作方交互的情况,最常见的就是http调用合作方服务。合作初期测试工作通常比较顺利,合作方会积极的提供测试环境供调用,但是上线之后,合作方不再维护/提供测试环境,这个时候就需要mock来代替合作方提供服务,应对这种场景,能够支持动态返回的mock是必须的。
先说重点,如何让wiremock动态的处理请求,wiremock(1.57,最新的2.X版本wiremock应该有些变化,还未细看)中提供了自定义返回结果的类ResponseTransformer,要做的就是继承这个类并实现自己的处理方法,在示例代码中写了一个将POST请求body原样返回的mock接口
启动wiremock,发起POST请求curl '127.0.0.1:18800/sample' -d 'a=3&b=3' ,返回结果就是a=3&b=3
到这里一个最简单的动态返回mock就完成了,之后只需要根据需要进行改写 gitlab:ssh://git@g.hz.netease.com:22222/hzchengziliang/mock-pub.git
金融mock的接口大多是后台服务器间的接口,动态返回属于最基本的需求
拿一个接口举例,某合作方的开户接口 > /trade/open POST //XX开户接口
请求参数为msg+sign,msg为json串base64后的结果,sign为签名
msg在base64前的数据 > {
"user":"userA",
"account":"userA@163.com",
"order_type":"1"
}
需要的返回结果中的json如下 > {
"user":"userA",
"account":"userA@163.com",
"tradeId":"20160808trade12345",
"date":"当前日期",
"order_type":"1"
}
是将请求中的user,account,orderType原样返回,并生成一个随机的订单号,同样将这个jsonbase64编码成msg,并对msg进行RSA加密并返回最终结果,处理流程如下图
1、提供平台化的mock配置,只需要在页面上配置好mock就可以直接使用
2、基于常规的mock进行扩展,支持动态的返回结果
3、依业务需求对返回结果进行处理/加密/延迟返回等
发起请求(可以自己调一下)
curl 'http://jrqa.netease.com/trade/open' -d
'msg=eyAgDQogICAgInVzZXIiOiJ1c2VyQSIsICANCiAgICAiYWNjb3VudCI6InVzZXJBQDE2My5jb20iLCAgDQogICAgIm9yZGVyX3R5cGUiOiIxIiAgDQp9'
返回结果
msg=eyJ1c2VyIjoidXNlckEiLCJhY2NvdW50IjoidXNlckFAMTYzLmNvbSIsInRyYWRlSWQiOiIyMDE2MDgxMnRyYWRlMDQ3MD
QiLCJkYXRlIjoiMjAxNjA4MTIxNDAyMjMiLCJvcmRlcl90eXBlIjoiMSJ9&sign=ULAAjRLBW/
zneRq2Ls0cXZrMd96zR4xMBynBRksiN/Y9GgXoReWph7YlVJtq4yj4Y93YCpMxrE2WJEhO/
FVcZTA9FLuKW2pshnFa7AVHQmfbdB+ivD1ax1HXWXoSZzd077qRWosu6lrYUnBzukkRwscS9gem9jMnqhlb6fqR42Q=
简单的FAQ
Q:如果是https的接口,如何绕过https校验
A:wiremock本身提供了对https的支持,不过这种支持不够灵活,我们的平台mock使用nginx来处理https请求并proxy_pass给后台的mock服务,使用mock的主机绑定host到nginx服务器。
Q:压测也需要动态的返回结果,能支持吗
A:
扛不住
wiremock本身承载能力不强,加上这边又做了杂七杂八的工作,所以单台的TPS是不高的,不过可以部署多台mock服务然后通过nginx负载均衡强化承载能力。(这方面moco的处理效率很高)
最后是广告
平台mock的配置在金融质量平台(marvel)上,marvel平台是金融事业部QA的工作管理平台,集测试效率提升、测试工具平台化、测试技术创新、测试流程规范化、测试数据可视化等于一体,关于该平台详细介绍后续会单独起一篇文章来介绍,有兴趣的同学可以关注下金融QA的知识圈,即互联网金融QA,关注后续的更新,
网易云新用户大礼包:https://www.163yun.com/gift
本文来自网易实践者社区,经作者程子量授权发布。