[英]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.