小工具知识网

当前位置: 首页 > 行业知识 > python实现mock测试

行业知识

python实现mock测试

2026-10-19 11:15:34 来源:互联网转载

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

()
#pip install flaskfrom 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.pyimport requestsclass 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.pyimport unittestfrom unittest import mockfrom unittest_mock.payment import Paymentclass 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 - 简书 

上一篇:揭秘定时特效制作秘诀,轻松掌握制作技巧!

下一篇:服务器产品配置详解怎么写?