Pact验证不起作用 - 在消息提供程序测试期间找不到带注释的方法

时间:2017-09-12 16:00:30

标签: microservices pact pact-jvm

我有一个项目,我们正在使用消息提供程序,因为它涉及基于Apache kafka的消息传递。

消费者端的maven目标在当地和Jenkins都很好。

提供者端pact-verify在Jenkins中失败说"没有为交互发现带注释的方法"。

我的POM.xml配置如下:

from keras import backend as K
from tensorflow.python.framework import graph_util

sess = K.get_session()
K.set_learning_phase(0)
constant_graph = graph_util.convert_variables_to_constants(sess, 
    sess.graph.as_graph_def(), outputs)

tf.train.write_graph(constant_graph, out_dir, "model.pb", False)

2 个答案:

答案 0 :(得分:2)

在进行生产者端测试时,您需要提供JSON合同。在那些合同中,您有生产者的名字。从提供商测试中,您需要参考合同的位置和提供商的名称。

@RunWith(RestPactRunner.class) // Custom pact runner, child of PactRunner which runs only REST tests
@Provider("myProducersNameAsItApearsInContract") // Set up name of tested provider
@PactFolder("path/to/pact/contracts") // Point where to find pacts (See also section Pacts source in documentation)

提供商的名称在合同中如下:

    "provider": {
    "name": "myProvider"
},

编辑:

  

这里的问题是测试运行正常,当从我的本地机器运行时,注释的方法被拾取但是当我们从Jenkins运行时,在pact:verify中抛出了特定的错误。

您必须将完整的pact文件夹相对于项目的Jenkins工作区。由于我们将契约契约保留在src/test/resources/pacts中,因此我们的@PactFolder值如下:

@PactFolder("src/test/resources/pacts")

答案 1 :(得分:0)

解决了这个问题。这是我们通过使用-Dskiptests跳过测试类来编译项目的时候。所以在我们运行协议之后:验证测试类路径不包含在搜索中。

通过使用mvn test-compile编译然后运行pact:verify来编译测试类来修复它。现在每次都会上课。