Python接口测试之moco(八)
在现在的软件开发过程中,特别是app的部分,需要的很多数据以及内容,都是来自server端的API,但是不能保证
在客户端开发的时候,api在server端已经开发完成,专门等着前端来调用,理想的情况是前端在开发的时候,已经有人写
好了接口,直接调用就可以了,但是这仅仅是理想的情况,很多时候,现实总是比理想多一层思考和磨难,如果在前端开发
的时候,提供api的同学没有提供,那么怎么办?等待还是自己先开发,等待肯定是愚蠢的做法,那么自己开发怎么来解决
api提供数据的这个问题,那么使用mock就可以很好的解决,什么是mock?mock简单的理解就是开发在开发的过程中,
需要依赖一部分的接口,但是对方没有提供或者环境等等情况,总之是没有,那么开发使用mock server自己来mock
数据,方便自己正常的进行开发和对编写的功能进行自测。
在https://github.com/dreamhead/moco地址中可以下载到moco-runner-0.11.0-standalone.jar,下载下来
就是一个jar,在该地址中,作者对这部分有详细的说明和启动mock server方法,这里不在重复的再次说明。下来我们
简单的编写一个登录的,见编写的login.json字符串:
[ { "request": { "method":"post", "uri":"/login", "json": { "username":"admin", "password":"admin", "roleID":22 } }, "response": { "json": { "username":"wuya", "userID":22, "token":"asdgfhh32456asfgrsfss" } } } ]
在运行命令前,最好让mock server与编写的login.json文件是在同一个目录下,见执行的命令:
java -jar moco-runner-0.10.0-standalone.jar http -p 12306 -c login.json
在如上的命令中,java -jar moco-runner-0.10.0-standalone.jar是启动jar,没什么可说的,http表示进行的是http协议,
-p后面跟的是端口号,这里端口号指的是12306,-c后面跟编写的json文件,这里是login.json,见执行如上的命令后出现的
信息(切记无任何的错误信息表示OK,如果有错误,慢慢的进行检查错误),见截图:
OK,下来我们使用postman来验证下,我们mock的登录接口是不是OK的,见postman中填写的信息,见截图:
header为:
- Content-Length →63
- Content-Type →application/json
OK,学习到这里,我们使用python编写一个接口测试用例,来验证换这个登录的接口和获取它的token,见实现的代码:
#!/usr/bin/env python # -*- coding:utf-8 -*- import unittest import requests class MockLoginTest(unittest.TestCase): def setUp(self): self.url='http://localhost:12306' def tearDown(self): pass def getUrl(self,path): return self.url+path def getToken(self): '''获取token''' data={ "username":"admin", "password":"admin", "roleID":22 } r=requests.post(self.getUrl('/login'),json=data) return r.json()['token'] def test_login(self): '''验证登录的接口''' data={ "username":"admin", "password":"admin", "roleID":22 } r=requests.post(self.getUrl('/login'),json=data) self.assertEqual(r.status_code,200) self.assertEqual(r.json()['username'],'wuya') if __name__=='__main__': unittest.main(verbosity=2)
OK,在上面的python代码中,实现了对登录接口的验证和获取了它的token,当然关于mock server的