python + flask+mock实现简单的mock测试
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42#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
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37#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"
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48#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测试内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复