Python接口测试之moco
在现在的软件开发过程中,特别是app的部分,需要的很多数据以及内容,都是来自server端的API,但是不能保证
在客户端开发的时候,api在server端已经开发完成,专门等着前端来调用,理想的情况是前端在开发的时候,已经有人写
好了接口,直接调用就可以了,但是这仅仅是理想的情况,很多时候,现实总是比理想多一层思考和磨难,如果在前端开发
的时候,提供api的同学没有提供,那么怎么办?等待还是自己先开发,等待肯定是愚蠢的做法,那么自己开发怎么来解决
api提供数据的这个问题,那么使用mock就可以很好的解决,什么是mock?mock简单的理解就是开发在开发的过程中,
需要依赖一部分的接口,但是对方没有提供或者环境等等情况,总之是没有,那么开发使用mock server自己来mock
数据,方便自己正常的进行开发和对编写的功能进行自测。
在https://github.com/dreamhead/moco地址中可以下载到moco-runner-0.12.0-standalone.jar,下载下来
就是一个jar,在该地址中,作者对这部分有详细的说明和启动mock server方法,这里不在重复的再次说明。下来我们
简单的编写一个登录的,见编写的login.json字符串,一个是登录请求,一个是根据车牌查询停车费的请求:
[ { "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为:
- Content-Length →63
- Content-Type →application/json
下面我们通过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)
Python接口测试之moco的更多相关文章
- python接口测试之mock(二)
上一篇对mock-server已经做了初步的介绍,今天这里继续接着之前的介绍进行,我们先看之前的mock-server部分,之前编写了一个登录的mock,具体json文件见如下的内容: 小王子1110 ...
- python接口测试之新手篇
嗨,大家好,我是小白,好久没写博客了,最近公司搞什么python的接口测试,心里一阵狂喜,在公司上百个接口里拿出一个主要接口一顿乱搞,好在搞通了 但是在这过程中也碰到了好多的问题,决定将问题分享出来能 ...
- python接口测试之mock(三)
前面介绍了moco的详细的使用,它主要是基于moco-runner-0.11.0-standalone.jar,通过编写json的文件来实现,mock翻译过来就是模拟的意思,也就是说,它是将测试对象所 ...
- Python接口测试之对MySQL/unittest框架/Requests 的操作
单元测试支持测试自动化. 共享的安装程序和关闭代码测试. 聚合成集合,测试和报告框架从测试的独立性.单元测试模块提供可以很容易地支持这些素质的一组测试的类.关于unittest 测试框架建议可以到官方 ...
- Python接口测试之报告(十五)
在本文章中,主要使用jenkins和编写的自动化测试代码,来生成漂亮的测试报告,关于什么是CI这些 我就不详细的介绍了,这里我们主要是实战为主. 首先搭建java的环境,这个这里不做介绍.搭建好jav ...
- Python接口测试之对MySQL的操作(六)
本文章主要来说python对mysql数据库的基本操作,当然,前提是已经搭建了python环境和搭建了Mysql 数据库的环境,python操作mysql数据库提供了MySQLdb库,下载的地址为: ...
- Python接口测试之unittest框架(五)
Test-driven development(TDD)开发模式在今天已经不是什么新奇的事了,它的开发思维是在开发一个产品功能的时候,先 编写好该功能的测试代码,在编写开发比如,比如要写二个数相除的函 ...
- python接口测试之序列化与反序列化(四)
在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式 字符串解码为python数据对象.在python的标准库中,专门提供了jso ...
- python接口测试之Http请求(三)
python的强大之处在于提供了很多的标准库,这些标准库可以直接调用,本节部分,重点学习和总结在 接口测试中Python的Http请求的库的学习. 首先来看httplib,官方的解释为:本模块定义了类 ...
随机推荐
- rhel 6.5--samba
配置匿名共享: 服务端: [root@master ~]# yum install -y samba 或者 [root@master ~]# yum groupinstall -y "CIF ...
- spark Listener和metrics实现分析
在spark内部,rpc可以用来实现不同组件(Driver, executor,client)之间的远程交互.而在同一组件内,spark还有事件监听机制,如spark中各种指标的采集主要就是通过事件监 ...
- 【C#】为什么有可能会被多个线程修改的对象要加线程锁
例1.不用线程锁的情况下,两个线程对同一个变量进行加减操作 static void Main(string[] args) { Counter counter = new Counter(); var ...
- 2019/05/13 JAVA虚拟机堆内存调优
-Xms4000m 堆内存初始值 * -Xmx4000m 堆内存最大值 * -XX:+PrintGCDetails 打印GC信息 * -XX:+UseSerialGC 使用串行GC * -XX:+Pr ...
- AJPFX:求两个城市之间的距离
键盘录入多个城市: 城市1,城市2,城市3 以 ### 结束输出然后再键盘录入各个城市之间的距离: 格式如下:0,12,4512,0,2245,22,0### 然后按照输入的两个城市,求得两个城市 ...
- [转]合理使用ArrayMap代替HashMap
合理使用ArrayMap代替HashMap 2016年07月08日 15:34:44 阅读数:5938 转载请标注: 披萨大叔的博客 http://blog.csdn.net/qq_27258799/ ...
- 洛谷P2742 【模板】二维凸包
题意 求凸包 Sol Andrew算法: 首先按照$x$为第一关键字,$y$为第二关键字从小到大排序,并删除重复的点 用栈维护凸包内的点 1.把$p_1, p_2$放入栈中 2.若$p_{i{(i & ...
- jQuery选择器之表单元素选择器
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...
- ThreadPoolExecutor 线程池
TestThreadPoolExecutorMain package core.test.threadpool; import java.util.concurrent.ArrayBlockingQu ...
- RHEL5.8上SAMBA源码修改打包安装流程
之前一直使用系统自带的SAMBA,近期需要对SAMBA代码做一些修改,然后还是打算用RPM包的方式来安装部署. 这个流程本身不复杂,在这里记录下来,免得在另外写说明文档. 关键词:RHEL5.8, s ...