我正在测试一种应该工作大约 5-6 小时的方法。guid 通过 Post 请求传递给方法。完成后,它将数据写入数据库并返回 OK 200。(非常奇怪的解决方案,但它是什么)。
我正在通过 jmeter + groovy 进行测试,但是有一个请求,运行它并不重要。
我试图设置超时:
connection.setConnectTimeout(6*60*60*1000);
connection.setReadTimeout(6*60*60*1000);
但这不起作用,并且连接在 20 分钟(加/减 1 分钟)后因服务器错误导致文件意外结束而中断。其实问题就在标题里。可能是什么问题以及如何不中断第 6 小时的连接?(最好更长)
import groovy.util.*;
import org.apache.jmeter.services.FileServer
import javax.net.ssl.*
import java.net.*
def nullTrustManager = [
checkClientTrusted: { chain, authType -> },
checkServerTrusted: { chain, authType -> },
getAcceptedIssuers: { null }
]
def nullHostnameVerifier = [
verify: { hostname, session -> true }
]
KeyStore ks = KeyStore.getInstance("JKS");
FileInputStream fis = new FileInputStream("Путь к keystore.keys");
def password = "0000000".toCharArray()
ks.load(fis, password);
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, password);
ctx = SSLContext.getInstance("TLSv1.2");
ctx.init(kmf.getKeyManagers(), [nullTrustManager as X509TrustManager] as TrustManager[], null);
SSLSocketFactory socketFactory = ctx.getSocketFactory();
def connection
def address = ""
address = "https://someserver.qwe/path/toMethod";
connection = new URL(address).openConnection() as HttpsURLConnection
connection.setConnectTimeout(6*60*60*1000);
connection.setReadTimeout(6*60*60*1000);
connection.setDefaultSSLSocketFactory(ssl_socket_factory);
connection.setDefaultHostnameVerifier(null_host_verifier) as HostnameVerifier)
connection.setDoOutput(true);
connection.setRequestProperty("User-Agent", "jmeter");
connection.setRequestProperty("Content-Type", "application/json; charset=utf8");
connection.setRequestProperty("Accept", "application/json");
SampleResult.setRequestHeaders(connection.getRequestProperties().toString())
def body = """[
"c6881ad2-a504-49c1-928b-4a1d0a952d14",
"e9f15af2-a8f3-48c9-97f2-610e1b81b355"
]""";
connection.outputStream.withWriter("utf-8", {
Writer writer -> writer << body;
})
def response = "";
try{
if(connection.responseCode < HttpURLConnection.HTTP_BAD_REQUEST){
SampleResult.setResponseMessage("OK")
SampleResult.setSuccessful(true)
response = connection.inputStream.withReader("utf-8", {
Reader reader -> reader.text
})
}else{
SampleResult.setResponseMessage("Fail")
SampleResult.setSuccessful(false)
response = connection.errorStream.withReader("utf-8", {
Reader reader -> reader.text
})
}
}
catch(Exception e){
log.error "" + e.getMessage() + "\n" + e.getStackTrace();
}
SampleResult.setSamplerData(body)
SampleResult.setResponseCode(connection.responseCode.toString())
SampleResult.setResponseData