我是靠谱客的博主 细心雨,最近开发中收集的这篇文章主要介绍python实现mock测试,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

python + flask+mock实现简单的mock测试

#pip install flask
from flask import Flask, request, json,jsonify
#实例化Flask类
app = Flask(__name__)
#flask 轻量级web框架
#jsonify 用来序列化返回的json格式的数据
#request 用来获取调用接口时传入的数据
#app.route定义的路由,第一个参数为接口路径,第二个参数为请求方法,不写默认为get
@app.route('/mock', methods=['POST'])
def mock():
""" 模拟运营商系统
:param mobile:用户手机号
:param password:运营商密码
:return:性别、身份证号、话费
"""
#获取表单数据
mobile = request.form['mobile']
password = request.form['password']
#获取请求中的入参
user=request.get_json()
#获取请求头
header=request.headers
# 获取传入的参数pwd
例如传入的是 {"pwd":"123456"}
pwd=request.values.get('pwd')
try:
assert password == 'a123456', u'运营商密码错误'
if mobile == "12345678901":
data = {'sex': 'man', 'Id number': '111111111111111111', 'charge': 105}
elif mobile == "12345678902":
data = {'sex': 'woman', 'Id number': '1111111111111112', 'charge': 120}
elif mobile == "12345678903":
data = {'sex': 'man', 'Id number': '111111111111111113', 'charge': 135}
else:
data = {'msg': 'mobile number not found'}
except:
data = {'msg': 'password error'}
return json.dumps(data)
if __name__ == '__main__':
#启用服务 debug=True,加上这个参数之后不用重新执行,他会自动执行
app.run(debug=True)

调用时可用postman,jmeter,python等

另外还可以使用unittest自带的mock 和pytest自带的mock

#payment.py
import requests
class Payment:
"""
定义第三方支付类
"""
def auth(self, card_num, amount):
"""
请求第三方外部支付接口的方法, 返回响应状态码
:param card_num: 卡号
:param amount: 金额
:return: 返回状态码, 200 代表支付成功, 500 代表支付异常, 失败
"""
url = "http://第三方支付url.payment"
data = {"card_num": card_num, "amount": amount} # 请求参数
self.res = requests.post(url, data=data)
return self.res.status_code
# 返回的状态码
def pay(self, user_id, card_num, amount):
"""
支付方法
:param user_id: 用户ID
:param card_num: 卡号
:param amount: 支付金额
:return:
"""
try:
status_code = self.auth(card_num, amount)
except TimeoutError:
status_code = self.auth(card_num, amount)
# 如果支付超时, 再请求一次
if status_code == 200:
print("[{}]支付[{}]成功!!! 进行扣款并登记支付记录".format(user_id, amount))
return "success"
elif status_code == 500:
print("[{}]支付[{}]失败!!! 不进行扣款".format(user_id, amount))
return "Fail"
#test_pay.py
import unittest
from unittest import mock
from unittest_mock.payment import Payment
class PaymentTest(unittest.TestCase):
"""
测试支付接口
"""
def setUp(self):
self.payment = Payment()
def test_1_success(self):
"""
测试支付成功
:return:
"""
self.payment.auth = mock.Mock(return_value=200)
res = self.payment.pay(user_id=1001, card_num=12345678, amount=5000000)
self.assertEqual('success', res)
def test_2_fail(self):
"""
测试支付失败
:return:
"""
self.payment.auth = mock.Mock(return_value=500)
res = self.payment.pay(user_id=1001, card_num=12345678, amount=5000000)
self.assertEqual('Fail', res)
def test_3_retry_success(self):
"""
测试调用第三方接口超时之后, 再次支付成功
:return:
"""
self.payment.auth = mock.Mock(side_effect=[TimeoutError, 200])
res = self.payment.pay(user_id=1001, card_num=12345678, amount=5000000)
self.assertEqual('success', res)
def test_4_retry_fail(self):
"""
测试调用第三方接口超时之后, 再次支付失败
:return:
"""
# side_effect 第一次会得到列表第一个值抛出TimeoutError的异常,抛出异常payment.py里会再次调用第
# 三方支付接口auth,接着将列表第2个值 500返回给auth,pay函数里面代码判断 500 为失败 Fail.
# side_effect 参数可以等于另外一个函数 函数的返回值,作为Mock函数的返回值,例子这里就不举了。
self.payment.auth = mock.Mock(side_effect=[TimeoutError, 500])
res = self.payment.pay(user_id=1001, card_num=12345678, amount=5000000)
self.assertEqual('Fail', res)
if __name__ == '__main__':
unittest.main()

 后面内容转载自:Mock:unittest - 简书 

最后

以上就是细心雨为你收集整理的python实现mock测试的全部内容,希望文章能够帮你解决python实现mock测试所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部