mock测试是以可控的方式模拟真实的对象行为.程序员通常创造模拟对象来测试对象本身该具备的行为
之所以使用mock测试,是因为真实场景很难实现或者短期实现起来困难,主要场景有
-真实对象可能还不存在(接口还没完成开发);
-真实对象很难搭建起来(第三方支付联调);
-真实对象的行为很难触发(网络错误)
-真实的对象是用户界面,或包括用户界面在内
客户端mock
接口自动化测试客户端mock:
如:一个接口还没开发好,就要自己造一个接口的返回值,跟预期结果匹配
import unittest
from common.api_case import APICase
def add(a,b):
return a + b
class TestAdd(unittest.TestCase):
def test_add(self):
a = 3
b = 4
expected = 7
#函数还没有开发好
actual = add(a,b)
#自己造一个函数的返回值
actual = 7
self.assertEqual(expected,actual)
通过代码去模拟接口访问接口返回数据,访问接口的过程就能省略
-导入mock
from mock import Mock
-使用mock,使接口无论输入什么参数,最后得到的返回值都是Mock里的值
class TestRequest1:
def test_request(self):
info = {"headers": "","json": "","expected": ""}
#模拟一个假的函数返回值
self.visit = Mock(return_value="")
actual = self.visit(info)
assert info["expected"]==actual
服务端mock
开发的接口实在server,真实的服务器
自己冒充开发人员,写一个假的服务器,写一个假的接口
mock server的实现
-现成的mock服务工具mockoon
mockoon不能代替真实接口,只能做一个简单的响应结果,当做跑流程
-使用测试开发技术,自己开发一个真实接口.可以支持很多的响应
from flask import Flask,request
app= Flask("py44")
@app.route("/member/register",methods = ["post"])
def register():
username = request.form.get("username")
pwd = request.form.get("pwd")
if username == "conlin" and pwd == "123456":
return {"code": 44, "msg": "注册成功"}
else:
return {"code": 55, "msg": "注册失败"}
app.run(debug=True)