Python pact契约测试实战

38 篇文章 6 订阅
23 篇文章 0 订阅


1.pact-python契约测试示例

'''
    pact-python契约测试示例
'''
import atexit
import unittest

import requests
from pact import Consumer
from pact import Provider

# 定义一个契约(pact),明确消费者与生产者,明确契约文件的存放路径
pact_demo=Consumer('consumer02').has_pact_with(Provider('provider'),pact_dir='./pacts')
# 服务启动
pact_demo.start_service()
#服务的注册
atexit.register(pact_demo.stop_service)
class PactDemo(unittest.TestCase):
    # 定义契约的内容
    def test_pact(self):
        # 定义预期的响应结果
        expected = {
            'name': 'xuzhu',
            'age': 18
        }

        #定义契约的实际内容
        (pact_demo
         .given('test service')
         .upon_receiving('for pact')
         .with_request('get','/provider') #向生产者发送请求时,需要注意请求方法、路径、参数、头部信息等
         .will_respond_with(status=200,body={'first':'xu','second':'zhu'})) #生产者在被请求之后返回的响应的结果。可以自己定义内容的

        # 基于requests库向pact发送请求,验证契约生成的结果是否正确 ,请求的实际上是pact自带的mock服务,端口默认是1234
        with pact_demo:
            resp = requests.get('http://localhost:1234/provider').json()
            print(resp)

        # 断言校验,判断预期结果是否与pact的结果相符合
        self.assertEqual(expected,resp)

if __name__ == '__main__':
    pd = PactDemo()
    pd.test_pact()

2. 生产者端,用于生成数据内容

'''
    生产者端,用于生成数据内容
'''
from flask import Flask, jsonify

app = Flask(__name__)

## 生产者接口,用于生产数据内容,提供给消费者进行数据消费
@app.route('/provider',methods = ['POST','GET'])
def provider():
    data = {
        'name': 'xuzhu',
        'age': 18
    }
    return jsonify(data)

if __name__ == '__main__':
    app.run(host='127.0.0.1',port=8000,debug=True)

3. 1号消费者

'''
    1号消费者
'''
import requests
from flask import Flask, jsonify

app = Flask(__name__)

#消费者1号,用于消费生产者的数据,进行业务处理
@app.route('/consumer01',methods = ['GET'])
def consumer_first():
    #获取生产者的数据内容
    resp = requests.get('http://127.0.0.1:8000/provider').json()
    #处理数据内容并返回
    result = {
        'address': 'CSC',
        'msg': 'OK',
        'name': resp['name']
    }
    return jsonify(result)

if __name__ == '__main__':
    app.run(host='127.0.0.1',port=5001,debug=True)

4. 2号消费者

'''
    2号消费者
'''
import requests
from flask import Flask, jsonify

app = Flask(__name__)

#消费者1号,用于消费生产者的数据,进行业务处理
@app.route('/consumer02',methods = ['GET'])
def consumer_second():
    #获取生产者的数据内容
    resp = requests.get('http://127.0.0.1:8000/provider').json()
    #处理数据内容并返回
    result = {
        'address': 'CSC',
        'msg': 'OK',
        'name':{
            'first': resp['first'],
            'second': resp['second']
        }
    }
    return jsonify(result)

if __name__ == '__main__':
    app.run(host='127.0.0.1',port=5002,debug=True)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司小幽

真诚赞赏,手留余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值