pact的python实现(http://pact.io/)

pact-test的Python项目详细描述


https://img.shields.io/badge/license-MIT-brightgreen.svghttps://img.shields.io/badge/python-2.7,%203.3,%203.4,%203.5,%203.6-brightgreen.svghttps://img.shields.io/badge/pypi-0.1.1-brightgreen.svghttps://img.shields.io/pypi/wheel/Django.svghttps://travis-ci.org/Kalimaha/pact-test.svg?branch=masterhttps://coveralls.io/repos/github/Kalimaha/pact-test/badge.svg?branch=developmenthttps://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg

python的pact测试

此存储库包含Pact的python实现。契约是 消费者驱动的合同测试。有关pact项目、合同测试、优缺点和 有用的资源请参考Pact website

消费者驱动的契约测试有两个阶段:消费者建立契约(它是消费者驱动的 毕竟!),供应商将予以尊重。但是,在此之前…

安装

pact测试通过PyPi分发,因此它可以很容易地包含在 requirements.txt文件或通常与pip一起安装:

$ pip install pact-test

提供者测试(set the contracts

https://img.shields.io/badge/Pact-1.0-brightgreen.svghttps://img.shields.io/badge/Pact-1.1-red.svghttps://img.shields.io/badge/Pact-2.0-red.svghttps://img.shields.io/badge/Pact-3.0-red.svghttps://img.shields.io/badge/Pact-4.0-red.svg

消费者运行提供者测试以创建契约并在 他们和服务提供商。使用pact测试的python客户机示例如下 可在here购买。消费者定义 所有与供应商的交互方式如下:

@service_consumer('PythonEats')@has_pact_with('PyzzaHut')classPyzzaHutTest(ServiceProviderTest):@given('some pizzas exist')@upon_receiving('a request for a pepperoni pizza')@with_request({'method':'get','path':'/pizzas/pepperoni/'})@will_respond_with({'status':200,'body':{'id':42,'type':'pepperoni'}})deftest_get_pepperoni_pizza(self):pizza=get_pizza('pepperoni')assertpizza['id']==42assertpizza['type']=='pepperoni'

此测试针对模拟服务器验证预期的交互,并创建 json文件(the pact)将存储在本地,并发送到 契约经纪人,如果有的话。可以为同一个定义多个测试 例如,为了验证所有感兴趣的场景,我们可以 测试不愉快的情况:

@given('some pizzas exist')@upon_receiving('a request for an hawaiian pizza')@with_request({'method':'get','path':'/pizzas/hawaiian/'})@will_respond_with({'status':404,'body':{'message':'we do not serve pineapple with pizza'}})deftest_get_hawaiian_pizza(self):pizza=get_pizza('hawaiian')assertpizza.status_code==404assertpizza.json()['message']=='we do not serve pineapple with pizza'

消费者测试(履行合同

https://img.shields.io/badge/Pact-1.0-brightgreen.svghttps://img.shields.io/badge/Pact-1.1-red.svghttps://img.shields.io/badge/Pact-2.0-red.svghttps://img.shields.io/badge/Pact-3.0-red.svghttps://img.shields.io/badge/Pact-4.0-red.svg

供应商运行消费者测试以验证他们是否遵守了与消费者的协议。很少有例子 使用最流行的python web框架实现的假设餐厅服务:

设置和运行使用者测试几乎不需要什么。

契约助手

pact测试使用这个helper类在测试前后启动和停止web应用程序。它还定义了 要由测试使用的端口和终结点。下面是pact助手的示例:

classRestaurantPactHelper(PactHelper):process=Nonedefsetup(self):self.process=subprocess.Popen('gunicorn start:app -w 3 -b :8080 --log-level error',shell=True)deftear_down(self):self.process.kill()

帮助程序有几个规则:

  • 必须pact_test扩展PactHelper
  • 必须定义一个setup方法
  • 必须定义一个tear_down方法

也可以覆盖默认url(localhost)和端口(9999):

classRestaurantPactHelper(PactHelper):test_url='0.0.0.0'test_port=5000

状态

当消费者制定一个协议时,它定义了某些州。状态基本上是测试的先决条件。以前 为了遵守协议,提供者需要定义这样的状态。例如:

@honours_pact_with('UberEats')@pact_uri('http://Kalimaha.github.io/src/pacts/pact.json')classUberEats(ServiceConsumerTest):@state('some menu items exist')deftest_get_menu_items(self):DB.save(MenuItem('spam'))DB.save(MenuItem('eggs'))

在本例中,提供者将一些测试数据存储在其db中,以便使系统准备好接收模拟调用 从消费者那里,因此核实协议。

配置

pact测试的默认配置假定以下值:

  • 消费者测试路径:tests/service_consumers
  • 提供程序测试路径:tests/service_providers
  • pact_broker_uri:None

可以通过在项目根目录中创建名为.pact.json的文件来覆盖这些值。以下 是有效配置文件的示例:

{"consumer_tests_path":"mypath/mytests","provider_tests_path":"mypath/mytests","pact_broker_uri":"http://example.com/"}

所有字段都是可选的:只有指定的字段将覆盖默认配置值。

开发

设置

python3 setup.py install

测试

可以使用docker通过以下命令在本地运行测试:

$ ./bin/test

默认情况下,此命令根据Python3.6测试库。可以按如下方式指定python版本:

$ ./bin/test <ENV>

env的可用值为:py27py33py34py35py36。它也是 可以使用:

$ ./bin/test all

上传新版本

$ python3 setup.py sdist upload

使用Python Wheels

$ python3 setup.py sdist bdist_wheel
$ twine upload dist/*

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Cassandra复制因子大于节点数   java J2EE JTA事务回滚不适用于OSE Glassfish 4.0(Build 89)   java spring安全预认证用户登录   org的java类文件。反应流。从RxJava编译示例时未找到Publisher?   java在使用dataFormat作为POJO通过Camel调用Web服务时无法设置SOAP标头   Javafx类的java静态实例   java如何防止一个部件在关闭时覆盖另一个部件的位置   sql server无法从我的java代码连接到数据库   java在JList(Swing)中显示带有的ArrayList   从Java中的CXF服务获取WSAddressing数据   使用资产文件夹进行java简单json解析(本地)   java LDAPException未绑定的无效凭据   JavaJSFspring部署到weblogic   JAVA中字符数组中的特定元素排列?   如果脚本位于不同的目录中,则ant不会使用exec标记运行Javashell脚本