Ошибка сброса соединения - при запуске mvn clean install для запуска функций - PullRequest
1 голос
/ 11 марта 2020

Мы создали тестовый проект по каратэ с использованием архетипа Maven, чтобы протестировать несколько различных сервисов API. У нас есть файл функций, который проводит тест с конечной точкой, который отлично работает, когда эта конечная точка локально работает на нашей машине. Однако мы хотели бы запустить эти тесты каратэ в среде CI, где мы используем URL для нашего (развернутого) сервиса в среде dev. Когда мы запускаем mvn clean install в нашем конвейере CI, мы получаем ошибку при запуске функции:

 com.intuit.karate.exception.KarateException:
 MyFeatureTest.feature:8 -
 java.net.SocketException: Connection reset

Наша конфигурация

pom. xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>our-karate-tests</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <java.version>1.8</java.version>
    <maven.compiler.version>3.6.0</maven.compiler.version>
    <karate.version>0.9.5</karate.version>
  </properties>

  <dependencies>
    <dependency>
        <groupId>com.intuit.karate</groupId>
        <artifactId>karate-apache</artifactId>
        <version>${karate.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.intuit.karate</groupId>
        <artifactId>karate-junit4</artifactId>
        <version>${karate.version}</version>
        <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
        <testResources>
            <testResource>
                <directory>src/test/java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </testResource>
        </testResources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <compilerArgument>-Werror</compilerArgument>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
            </plugin>            
        </plugins>        
    </build>       
</project>

MyFeatureTest. java

import com.intuit.karate.KarateOptions;
import com.intuit.karate.junit4.Karate;
import com.junit.runner.RunWith;

@RunWith(Karate.class)
@KarateOptions(features="classpath:MyFeatureTest.feature")
public class MyFeatureTest {
}

MyFeatureTest.feature

Feature: test an endpoint
    Background:
        * url 'https://dev.myapplication.com/api/signin'
        * configure ssl = true

    Scenario: test request
        Given request {"username":"john", "password":"doe"}
        When method post
        Then status 200
        And match response == {resp:"success"}

Что мы пробовали:

Мы можем без проблем вызвать службу через Postman (как локально, так и развернутую службу). Мы также попытались выполнить разные методы, например, get. Странной частью всего этого является то, что ошибка сброса соединения происходит в нашей среде CI, но когда мы запускаем эту функцию локально, мы получаем org.apache.http.conn.ConnectTimeoutException: connect to https://dev.myapplication.com:443 failed: connection timeout.

У нас есть ощущение, что это связано с каратэ - apache клиент, но мы также пытались использовать apache -jersey. К сожалению, мы сталкиваемся с той же проблемой, когда используем клиент Джерси. Мы также подумали, что это может быть связано с SSL. Однако даже при использовании службы не ssl (и удалении конфигурации ssl из функции) возникает та же проблема. Мы пытались протестировать ответы от не-https сайтов, таких как web.archive.org, а также https, таких как google.com, в тщетной попытке, где мы просто тестируем запрос GET. Тем не менее, возникает та же проблема.

1 Ответ

0 голосов
/ 11 марта 2020

Похоже, у вас есть HTTP-прокси.

В этом случае обратитесь к документации: https://github.com/intuit/karate#configure

* configure proxy = 'http://my.proxy.host:8080'
...