我有一个项目,我们正在使用消息提供程序,因为它涉及基于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)
答案 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来编译测试类来修复它。现在每次都会上课。