mvn pact: verify не выполняет состояние провайдера, но код @State выполняется из IDE - PullRequest
0 голосов
/ 05 июня 2019

Когда я выполняю тест моего провайдера из IDE, выполняется метод @State, но команда mvn pact: verify не выполняет @State провайдера

Класс теста провайдера:

@RunWith(PactRunner.class)
@Provider("wProvider")
@PactFolder("/home/username/workspace/automation/pactProject/pacts/")
public class WpproviderTest {

     @State("wProvider will create new stuff")
    public void providerState(){
         System.out.println("execute the the provider state");

         //some code...

        System.out.println("your new stuff response is: " + jsonResponse)   
    } 

     @TestTarget
    public final Target target = new HttpTarget(url, true);

    @TargetRequestFilter
    public void updateAuthHeaders(HttpRequest request) {
        request.addHeader("some auth headers")
    }
}

мой файл pom.xml:

<plugin>
    <groupId>au.com.dius</groupId>
    <artifactId>pact-jvm-provider-maven_2.12</artifactId>
    <version>3.6.7</version>
    <configuration>
        <serviceProviders>
            <serviceProvider>
                <name>wProvider</name>
                    <requestFilter>
                        request.addHeader('Authorization', 'auth value')
                    </requestFilter>
                    <stateChangeRequestFilter>
                        request.addHeader('Authorization', 'auth value')
                    </stateChangeRequestFilter>
               <stateChangeUrl>http://mywebsite.com/myservice/myaction
                            </stateChangeUrl>
                            <stateChangeUsesBody>true</stateChangeUsesBody>
                            <protocol>http</protocol>
                            <host>http://localhost</host>
                            <path></path>
                            <port>443</port>
                            <pactBroker>
                                <url>https://mypactbroker</url>
                                <authentication>
                                    <username>my_usrname</username>
                                    <password>my_pwd</password>
                                </authentication>
                            </pactBroker>
                            <insecure>true</insecure>
                        </serviceProvider>
                    </serviceProviders>
</plugin>

мой файл пакта:

{
    "provider": {
        "name": "wProvider"
    },
    "consumer": {
        "name": "tConsumer"
    },
    "interactions": [
        {
            "description": "A new interaction with wProvider",
            "request": {
                "method": "POST",
                "path": "/somePath",
                "headers": {
                    "Content-Type": "application/json"
                },
                "body": ""
            },
            "response": {
                "status": 200,
                "headers": {
                    "Content-Type": "application/json"
                },
                "body": " ",
                "matchingRules": {
                    "body": {
                        // some matching rules
                    }
                }
            },
            "providerStates": [
                {
                    "name": "wProvider will create new stuff"
                }
            ]
        }
    ],
    "metadata": {
        "pactSpecification": {
            "version": "3.0.0"
        },
        "pact-jvm": {
            "version": "3.6.7"
        }
    }
}

Когда я выполняю команду mvn pact: verify -X, которую я вижу в консоли:

Данный Wprovider будет генерировать новые вещи

[DEBUG] Вызванное изменение состояния http://mywebsite.com/myservice/myaction -> HTTP / 1.1 200 OK [DEBUG] Изменение состояния: "ProviderState (name = * 1020)* params = {}) "-> Ok (значение = {})

Мне не хватает некоторых настроек, связанных с @State с mvn pact: verify?

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Похоже, аннотация @State не поддерживается для плагина Maven (в отличие от настройки JUnit).

Документы говорят об этом:

Для каждого поставщика вы можете указать URL изменения состояния, который будет использоваться для переключения состояния поставщика. Этот URL будет получать описание и параметры providerState из файла pact перед каждым взаимодействием через POST.

Таким образом, вам может потребоваться добавить динамическую конечную точку (например, /_pact/state), которая может принять запрос и настроить данное состояние.

0 голосов
/ 13 июня 2019

Плагин Maven (как и Gradle) выполняет проверку Pact для работающего провайдера при выполнении pact:verify. Метод @State, который вы определили, предназначен для теста JUnit. Плагин Maven не выполняет тесты JUnit, вы запускаете их как часть фазы test Maven, которая выполняется плагином Maven Surefire.

Ссылка на документацию, предоставленная Мэттом выше, позволит вам узнать, как выполнить изменения состояния с помощью pact:verify, но если вы написали тест JUnit, вам не нужно его использовать.

...