接口测试-工作心得记录九(使用flask尝试接口mock)
目前还没有提测,这两天看的debugtalk的博客,写了有关于接口mock,以前觉得这个实现特别复杂,看他的博客觉得实现简单的还可以,从昨天就调试了一下,根据现有的test环境逻辑写了一个觉得很有意思就想写一篇记录一下,以后想加到自己的接口框架去。因为前端业务测试的时候也会一个接口response返回不同前端会有不同的处理逻辑(比如说跳转不同页面啊,什么的),以前可能是需要改数据库或者造对应的数据,如果mock可以应用的具体业务上就可以实现我们就可以解耦客户端和服务端,测试也会更加全面。
选择flask的也有2方面考虑一方面是可以mock,另一方面是它很轻也可以快速实现制作web(以后的测试报告的展示或者接口脚本触发都可以对接上去),小而轻的东西上手速度也很快。要说的这些,直接上mock代码,如下:
简单的说明一下:我这里想mock的login接口,mobilelist就是模拟数据库(可以理解为user表),@app.route()是flask的装饰器,我理解的就是要匹配的接口一种匹配规则。装饰器修饰的函数就是具体的返回逻辑,这里面我昨天出现了一个理解错误,@app.route("/login/<int:uid>")这里面的<int:uid>我刚开始理解成了requests.post(url,params)里面的请求参数了,后来运行用postman请求一直都是404,当时真的是崩溃了,后来查了好多发现这个是url中“?”前面的东西,只不过app中接口名称固定的,一般不会出现这种情况(我目前测试没有遇到),算是趟了个坑。参数methods表示可以接受的请求方法。使用postman验证结果如下:
这样就表示调用成功了,这里面我进化了一下,链接了数据库,根据mobile查询user表,当长度为0表示user表不存在,非0表示存在并返回userid,代码如下:
使用postman验证结果如图:
这个是在user表中存在并返回userid
这是不存在,返回-1。我再写的时候遇到两个坑目前没有解决。
第一个就是我刚才是想把login放到类里面,但是在运行的时候一直提示参数缺失,如图:
另一个就是不能跨包调用的问题,如图:
我可以调用包MockApi包里面的东西,但是外层Page和PageTest都无法调用,目前还没有解决,准备后面再研究一下,怎么和之前接口代码融合。大体就这些,参考文章如下:
http://debugtalk.com/post/ApiTestEngine-0-setup-CI-test/
http://blog.csdn.net/yannanxiu/article/details/53116652