微服务契约测试框架Pact-Python实战

这篇具有很好参考价值的文章主要介绍了微服务契约测试框架Pact-Python实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Pact是一个契约测试框架,有多种语言实现,本文以基于pact-python探究契约测试到底是什么?以及如何实现

官网:自述文件 |契约文档 (pact.io)

契约测试步骤

1、为消费者写一个单元测试,让它通过,并生成契约文件。

2、在生产者服务执行该契约文件,验证测试是否通过。

 安装pact-Python

官方介绍的是直接使用pip下载,但是国内下载有问题。

下载方法参考:契约测试第一步--pact-python安装_51CTO博客_pact 契约测试

下载安装包:

https://pypi.org/project/pact-python/0.19.0/#modal-close

微服务契约测试框架Pact-Python实战,微服务测试,微服务,架构,云原生

 点击下载后手动解压:

入主目录,与setup.py同级,进入命令行执行:

python setup.py build      

微服务契约测试框架Pact-Python实战,微服务测试,微服务,架构,云原生

python setup.py install

微服务契约测试框架Pact-Python实战,微服务测试,微服务,架构,云原生

 消费者测试

新建项目,创建contract_miku.py文件

微服务契约测试框架Pact-Python实战,微服务测试,微服务,架构,云原生

 代码

# -*- coding: utf-8 -*-
"""
@author dongfangbubai
@date 2023年07月27日 18:08:14
@packageName 
@className contract_miku
@describe 模拟消费者去请求真实的生产者
"""
import atexit
import unittest
# from query import get_cartoon_characters
import requests

from pact import Consumer,Provider
#构造pact对象,定义消费者服务的名字并给他绑定一个生产者服务
pact = Consumer('consumer').has_pact_with(Provider('provider'))
pact.start_service()#start mock service
# # #注册推出的时候关闭pact服务
atexit.register(pact.stop_service)

class GetMikuInfoContract(unittest.TestCase):
    def test_miku(self):

        #定义期望的结果
        expected={
            "salary":20000,
            "name":"miku",
            "national":"Chinese",
            "contract":{
                "Email":"dongfangbubai@163.com",
                "Phone":"13265523433"
            }

        }
        #定义expected响应头
        headers={
            "Content-Type":"application/json"
        }
        #定义预期请求以及响应的方式(consumer will request in this way and expected to get the repsponed from the procide)
        (
            pact
                .upon_receiving("a request for UserA")#请求的名字
                .with_request(
                method="GET",
                path='/information',
                query={"name":"miku"}) #期望的请求方法,请求url
                .will_respond_with(200,headers, expected)#期望请求的返回
        )
        #定义消费者服务向模拟生产者发生请求,并获得响应
        #the url and port is the mockservice not real provider 
        with pact:#定义pact
            result=requests.get('http://127.0.0.1:1234/information',{"name":"miku"})
            print(result)
            print(result.headers)
            print(result.json())
        #做最后的断言
        self.assertEqual(result.json(),expected)
if __name__ == '__main__':
    unittest.main()

可以看到首先构造一个pact,并使用pact启动mock服务。

在具体的测试类和方法中采用了unittest测试框架,采用什么测试框架可以根据所使用的语言,这里也可以用pytest。js语言就可以用mocha框架。

在test_miku函数中定义了expected,headers,在pact中定义消费者预期的请求方式和响应结果。后续会根据这些生成契约。

在with pact里定义向mock服务的请求,最后断言请求的结果与预期是否一致。

需要注意的是,with pact里的url是pact带的mock服务对应的1234端口,而不是真实的服务,也不能填写真实服务。

运行结果

使用python方式运行contract_miku.py

微服务契约测试框架Pact-Python实战,微服务测试,微服务,架构,云原生

在窗口输出了一些关于ruby编码的提示,对结果好像没有影响。

在result.json的打印中可以看到打印的内容与我们的expected内容一致。

测试用例为通过状态。其实消费者端的单元测试代码无论expected怎么写,测试用例都是通过的,因为我们的目的就是写一个单元测试让测试用例通过。

契约文件

代码运行后,会生成consumer-provider.json文件,这就是契约文件。

契约文件里定义了consumer,provider的名称,和交互。

交互包括request,response,请求body。

契约文件就是消费者的需求,而生产者应该满足这些需求。

微服务契约测试框架Pact-Python实战,微服务测试,微服务,架构,云原生

 生产者测试

这里采用flask框架生成了一个接口

api_server.py

# -*- coding: utf-8 -*-
"""
@author 
@date 2023年07月28日 09:31:25
@packageName 
@className api_server
@describe TODO
"""
import json

from flask import Flask, request, jsonify

app = Flask(__name__)

rsp_body=[{
            "salary":20000,
            "name":"miku",
            "national":"Chinese",
            "contract":{
                "Email":"dongfangbubai@163.com",
                "Phone":"13265523433"
            }

        }]
@app.route('/information')
def test():
    get_name=request.args.get("name","").lower()
    print(get_name)
    if get_name=='miku':
        rsp=jsonify(rsp_body[0])
    elif get_name=='nanpha':
        rsp = jsonify(rsp_body[1])
    else:
        rsp=jsonify({'status':'404 not found'})
    return rsp


if __name__ == '__main__':
    app.run(host='0.0.0.0',port=8080)

运行api_server.py,使用postman请求接口

微服务契约测试框架Pact-Python实战,微服务测试,微服务,架构,云原生 测试生产者服务只需要在命令行执行

pact-verifier --provider-base-url=http://localhost:8080 --pact-url=consumer-provider.json

 这里指定了生产者服务的url和契约文件即消费者测试生成的文件

微服务契约测试框架Pact-Python实战,微服务测试,微服务,架构,云原生

运行结果显示没有失败,说明执行成功。

可以看到生产者服务返回的状态码,响应体和响应头都与契约文件匹配,所以验证成功。

契约测试与接口测试和集成测试的区别

微服务契约测试框架Pact-Python实战,微服务测试,微服务,架构,云原生

 微服务契约测试框架Pact-Python实战,微服务测试,微服务,架构,云原生

 

 参考

【软件测试课程中——微服务架构测试中的契约测试。】 https://www.bilibili.com/video/BV1Qf4y1F76L/?p=4&share_source=copy_web&vd_source=1aab39b433529f6f488e61847b342350文章来源地址https://www.toymoban.com/news/detail-617453.html

到了这里,关于微服务契约测试框架Pact-Python实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium+python web自动化测试框架项目实战实例教程

    自动化测试对程序的回归测试更方便。 由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行... 可以运行更加繁琐的测试 自动化测试的一个明显好处就是可以在很短的时间内运行更多的测试。学习自动化测试最终目的是应用到

    2024年02月06日
    浏览(56)
  • 【实战详解】如何快速搭建接口自动化测试框架?Python + Requests

    本文主要介绍如何使用Python语言和Requests库进行接口自动化测试,并提供详细的代码示例和操作步骤。希望能对读者有所启发和帮助。 随着移动互联网的快速发展,越来越多的应用程序采用Web API(也称为RESTful API)作为数据交换的主要方式。针对API进行自动化测试已经变得非

    2024年02月09日
    浏览(54)
  • Python+Appium+Pytest+Allure实战APP自动化测试框架

    Hi,大家好。今天我们来聊聊Python+Appium+Pytest+Allure实战APP自动化测试,pytest只是单独的一个单元测试框架,要完成app测试自动化需要把pytest和appium进行整合,同时利用allure完成测试报告的产出。 编写常规的 线性 脚本具体的步骤如下: 1、设计待测试APP的 自动化测试 用例 2、

    2023年04月09日
    浏览(74)
  • python+excel的接口自动化测试框架实战教程(视频讲解+源码)

    目录 设计流程图 Excel和结果预览 框架结构 Excel相关 日志封装 正则操作 核心操作 测试操作 测试报告发送邮件类 运行 这张图是我的excel接口测试框架的一些设计思路。 首先读取excel文件,得到测试信息,然后通过封装的requests方法,用unittest进行测试。 其中,接口关联的参数

    2024年02月03日
    浏览(47)
  • 〖Python WEB 自动化测试实战篇⑫〗- 实战 - PageObject框架设计(亦叫做 “页面对象” 模式)

    订阅 Python全栈白宝书-零基础入门篇 可报销! 白嫖入口-请点击我。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏, 免费阶段订阅数量4300+ , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:加入社区的小伙

    2024年02月02日
    浏览(66)
  • 区块链实战:用python编写最简单的比特币区块链本地测试框架

    比特币本身并不是特别复杂,中本聪的白皮书只有十页左右。 可从该链接下载(有各种语言版本):Bitcoin: A Peer-to-Peer Electronic Cash System 但是,真正投入使用的比特币系统实际上非常复杂,包含诸多因素,涉及诸多细节,甚至对一个手续费机制研究几天还云里雾里。 如何有效地

    2024年02月05日
    浏览(46)
  • APP自动化测试-Python+Appium+Pytest+Allure框架实战封装(详细)

    pytest只是单独的一个单元测试框架,要完成app测试自动化需要把pytest和appium进行整合,同时利用allure完成测试报告的产出。 编写常规的线性脚本具体的步骤如下: 1、设计待测试APP的自动化测试用例 2、新建app测试项目 3、配置conftest.py文件等 4、编写整体app测试用例运行文件

    2024年02月14日
    浏览(61)
  • Python+Requests+Pytest+Excel+Allure 接口自动化测试项目实战【框架之间的对比】

            --------UnitTest框架和PyTest框架的简单认识对比与项目实战-------- 定义: Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标准单元测试框架。 Pytest是Python的另一个第三方单元测

    2024年02月09日
    浏览(54)
  • Python+Selenium+Pytest+Allure自动化测试框架实战实例(示例为我司网盘产品)

    应公司要求,组织员工培训自动化测试,所以也趁此机会把我所学习的自动化框架整理一下,虽说不是很完美,但也有所收获。 序号 库、插件、工具 版本号 1 Python 3.11 2 Pycharm 22.2.3 3 pytest 7.2.0 4 pywin32 305 5 selenium3 4.6.0 6 openpyxl 3.0.10 7 Chromedriver 与当前浏览器版本对应即可 8 al

    2023年04月16日
    浏览(90)
  • pytest 测试框架使用和实战

    目录 一、pytest测试框架概述 二、使用pytest测试框架的使用规范和使用格式 三、pytest案例 and 实战         pytest是一个非常成熟的测试框架,pytest可以让不懂代码的人也可以使用pytest框架进行测试,且容易上手,对比其它框架也更为灵活,pytest可以结合一些python库来实现web自

    2024年02月14日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包