繁体   English   中英

连接重置错误 - 运行 mvn clean install 以运行功能时

[英]Connection reset error - when running mvn clean install to run features

我们使用 Maven 原型生成了一个空手道测试项目,以测试几个不同的 API 服务。 我们有一个使用端点进行测试的功能文件,当这个端点在我们的机器上本地运行时,它可以正常工作。 但是,我们希望在 CI 环境中运行这些空手道测试,我们在开发环境中使用我们(部署的)服务的 url。 当我们在 CI 管道上运行mvn clean install时,我们在运行该功能时遇到错误:

 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

感觉跟karate-apache客户端有关系,不过我们也试过用apache-jersey。 不幸的是,当我们使用 jersey 客户端时也会遇到同样的问题。 我们还认为它可能与 SSL 有关。 但是,即使使用非 ssl 服务(并从功能中删除 ssl 配置),也会出现同样的问题。 我们曾尝试测试来自非 https 网站(如 web.archive.org 以及 https 网站(如 google.com)的响应),这是徒劳的尝试,也只是简单地测试了 GET 请求。 尽管如此,还是会出现同样的问题。

听起来很像您有一个 HTTP 代理要处理。

如果是这种情况,请参阅文档: https : //github.com/intuit/karate#configure

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM