Как опубликовать результат проверки пакта брокеру пакта в Gradle?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как опубликовать результат проверки пакта брокеру пакта в Gradle?

Сообщение Anonymous »

У меня есть сервис, созданный с помощью весенней загрузки с использованием gradle (при необходимости файл gradle внизу) и Junit5. Многие вопросы по stackoverflow касаются maven и Junit4, и мне сложно перевести ответы. Мой тест производителя пакта работает и правильно проверяет контракт на брокере. Однако результат успешной проверки не отправляется брокеру. Что мне нужно сделать, чтобы это произошло?
Пакт исходит от «другой службы» и проверяет, что «мой сервис» правильно возвращает трех милых котиков. Вот как выглядит тест:
package com.miau.package;

// imports

@Provider("my_service")
@Consumer("other_service")
@PactBroker(authentication = @PactBrokerAuth(username = "pact",
password = "${pactPassword}"), //NOSONAR hardcoded password hint no password, just variable
host = "pact-broker.apps.home.io/", port = "443",
tags = "sandbox"
)
@SpringBootTest(classes = Application.class,
properties = { "spring.profiles.active=pact,fake-oauth2", "pact.verifier.publishResults=true" },
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Tag("pact")
@ExtendWith({SpringExtension.class})
public class OtherServiceContractVerifier {

@LocalServerPort
int port;

@Autowired
Application application;

@BeforeEach
void before(PactVerificationContext context) {
HttpTestTarget target = new HttpTestTarget("localhost", port, "/my_service");
context.setTarget(target);
}

@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider.class)
void executePact(PactVerificationContext context) {
context.verifyInteraction();
}

@State("3 cute cats exist")
public void stateThreecuteCatsExists() {
// make 3 cute cats exist in database
}
}

При запуске ./gradlew pactTest pactPublish все работает нормально. Тест пройден, и если я изменю состояние, чтобы иметь только 2 кошки, тест завершится неудачей, поскольку договор требует, чтобы служба возвращала 3 кошки. Однако брокер пакта не показывает успешную проверку. Что мне для этого нужно сделать?

Я пробовал, но, похоже, ошибаюсь:
Выполнить ./gradlew pactVerify -> «Поставщики услуг не настроены».
Не уверен, для чего ему нужны поставщики услуг, так как тест дает всю необходимую информацию. Но после некоторого поиска в Google я нашел это и добавил в свой build.gradle:
Pact {
broker {
pactBrokerUrl = "https://pact-broker.apps.home.io/"
pactBrokerUsername = "pact"
pactBrokerPassword = pactPassword
}
serviceProviders {
'my_service' {
fromPactBroker {
selectors = latestTags('Sandbox')
}
}
}
}

Не знаю, зачем ему эта информация, она вся уже есть в тесте Пакта. но, по крайней мере, он меняет вывод ./gradlew pacVerify, теперь он перечисляет контракт и пытается его проверить, но терпит неудачу с подключением к localhost:8080 [localhost/127.0.0.1, localhost/0:0:0 :0:0:0:0:1] не удалось: соединение отклонено (соединение отклонено) Кажется, это неправильный подход, поскольку он вообще не использует существующий тест. Я не нашел, как это определить, используя существующий тест OtherServiceContractVerifier.

Содержимое файла Gradle, связанное с Pact (я включил ответ на этот вопрос безрезультатно):
{
buildscript {
if (!project.hasProperty('pactPassword')) {
pactPassword = ''
}
if (!project.hasProperty('pactTags')) {
pactTags = ''
}
}
}

plugins {
id "au.com.dius.pact" version "4.1.7"
}

apply plugin: 'au.com.dius.pact'

task pactTest(type: Test) {
environment "pactPassword", "$pactPassword"
description = 'Runs pact tests.'
group = 'verification'

useJUnitPlatform()
outputs.upToDateWhen { false }

testClassesDirs = sourceSets.pactTest.output.classesDirs
classpath = sourceSets.pactTest.runtimeClasspath
shouldRunAfter test
}
check.dependsOn pactTest

dependencies {
pactTestImplementation "au.com.dius:pact-jvm-consumer-junit5:4.0.10"
pactTestImplementation "au.com.dius:pact-jvm-consumer-java8:4.0.10"
pactTestImplementation "au.com.dius:pact-jvm-provider-junit5:4.0.10"
pactTestImplementation "au.com.dius:pact-jvm-provider:4.0.10"
}

test {
useJUnitPlatform {
excludeTags "pact"
}
}

pact {
publish {
pactBrokerUrl = "https://pact-broker.apps.home.io/"
pactBrokerUsername = "pact"
pactBrokerPassword = pactPassword
tags = pactTags.tokenize(',')
}
}


Подробнее здесь: https://stackoverflow.com/questions/643 ... -in-gradle
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»