在如今的软件开发过程当中,特别是app的部分,须要的不少数据以及内容,都是来自server端的API,可是不能保证前端
在客户端开发的时候,api在server端已经开发完成,专门等着前端来调用,理想的状况是前端在开发的时候,已经有人写java
好了接口,直接调用就能够了,可是这仅仅是理想的状况,不少时候,现实老是比理想多一层思考和磨难,若是在前端开发python
的时候,提供api的同窗没有提供,那么怎么办?等待仍是本身先开发,等待确定是愚蠢的作法,那么本身开发怎么来解决git
api提供数据的这个问题,那么使用mock就能够很好的解决,什么是mock?mock简单的理解就是开发在开发的过程当中,github
须要依赖一部分的接口,可是对方没有提供或者环境等等状况,总之是没有,那么开发使用mock server本身来mockjson
数据,方便本身正常的进行开发和对编写的功能进行自测。api
在https://github.com/dreamhead/moco地址中能够下载到moco-runner-0.12.0-standalone.jar,下载下来app
就是一个jar,在该地址中,做者对这部分有详细的说明和启动mock server方法,这里不在重复的再次说明。下来咱们ide
简单的编写一个登陆的,见编写的login.json字符串,一个是登陆请求,一个是根据车牌查询停车费的请求:post
[
{
"request":
{
"method":"post",
"uri":"/login",
"json":
{
"username":"admin",
"password":"admin",
"roleID":22
}
},
"response":
{
"file":"login_response.json"
}
},
{
"request":
{
"method":"post",
"uri":"/parkinside",
"json":
{
"token":"asdgfhh32456asfgrsfss",
"vpl":"AJ3585"
}
},
"response":
{
"file":"parkinside.json"
}
}
]
在UI或者接口的自动化测试中,咱们知道在TDD的模式中,对数据进行分离,这样也是为了维护的方便,这样的目的是为了后期自动化测试用例的扩展性,和它的易维护性。
login_response.json文件的内容:
{
"username":"wuya", "userID":22, "token":"asdgfhh32456asfgrsfss" }
parkinside.json文件的内容:
{
"vplInfo": { "userID":22, "username":"wuya", "vpl":"京AJ3585" }, "Parking time long":"20小时18分钟", "Parking fee":"20$" }
在运行命令前,最好让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为:
下面咱们经过python语言,来对如上的二个接口进行实战的操做,切记parkinside的接口是在登陆以后才能够操做的业务,未登陆操做该业务,返回502无效的
token,见实现的代码:
#!/usr/bin/env python # -*- coding:utf-8 -*- import unittest import requests class MockTest(unittest.TestCase): def setUp(self): self.url='http://localhost:12306' def tearDown(self): pass def test_login(self,url='/login'): '''验证登陆的接口''' data={ "username":"admin", "password":"admin", "roleID":22 } r=requests.post(self.url+url,json=data) self.assertEqual(r.status_code,200) self.assertEqual(r.json()['username'],'wuya') def getToken(self,url='/login'): '''登陆成功后获取token''' data={ "username":"admin", "password":"admin", "roleID":22 } r=requests.post(self.url+url,json=data) return r.json()['token'] def test_parkingside(self,url='/parkinside'): '''验证查询停车时长接口''' data={ "token":self.getToken(), "vpl":"AJ3585" } r=requests.post(self.url+url,json=data) self.assertEqual(r.status_code,200) self.assertEqual(r.json()['Parking time long'],u'20小时18分钟') self.assertEqual(r.json()['Parking fee'], u'20$') if __name__=='__main__': unittest.main(verbosity=2)