You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TestRail .Net绑定与TestComplete CLR Bridge时遇SSL/TLS安全连接错误

解决TestComplete调用TestRail API的SSL/TLS安全通道错误

核心问题分析

你遇到的System.Net.WebException: Could not create SSL/TLS secure channel错误,本质是TestComplete的CLR运行环境默认使用的TLS协议版本、证书信任策略,和TestRail服务器的要求不匹配——而Postman会自动适配现代TLS版本,所以能正常工作。

解决步骤

1. 强制指定兼容的TLS版本

TestComplete依赖的.NET运行时可能默认启用旧版TLS(比如TLS 1.0),而现代TestRail服务器通常要求TLS 1.2或更高。在初始化APIClient前,强制设置TLS版本:

testrail.apiClient = function() {
    // 启用TLS 1.2和1.3,覆盖默认协议
    dotNET.System_Net.ServicePointManager.SecurityProtocol = 
        dotNET.System_Net.SecurityProtocolType.Tls12 | dotNET.System_Net.SecurityProtocolType.Tls13;
    
    var client = dotNET.Gurock_TestRail.APIClient.zctor("myTestRailURL");
    client.User = "myUsername"; 
    client.Password = "myPassword"; 
    return client; 
};

2. 处理证书信任问题(测试环境可用)

如果TestRail用的是自签名证书或内部CA颁发的证书,TestComplete的运行环境可能不信任该证书。测试环境下可临时跳过证书验证(生产环境禁止使用):

testrail.apiClient = function() {
    dotNET.System_Net.ServicePointManager.SecurityProtocol = 
        dotNET.System_Net.SecurityProtocolType.Tls12 | dotNET.System_Net.SecurityProtocolType.Tls13;
    
    // 跳过证书验证(仅测试环境)
    dotNET.System_Net.ServicePointManager.ServerCertificateValidationCallback = 
        function(sender, cert, chain, sslPolicyErrors) { return true; };
    
    var client = dotNET.Gurock_TestRail.APIClient.zctor("myTestRailURL");
    client.User = "myUsername"; 
    client.Password = "myPassword"; 
    return client; 
};

生产环境建议将TestRail的SSL证书导入到机器的受信任根证书颁发机构存储中。

3. 验证TestComplete的.NET框架版本

TestComplete的CLR桥依赖的.NET版本如果过低(比如.NET Framework 4.0及以下),可能不支持TLS 1.2。检查TestComplete使用的.NET版本:

  • 打开TestComplete的Tools > Options > Engines > Scripting > .NET
  • 确保选择的.NET Framework版本是4.5及以上(推荐4.8)
  • 同时,构建Gurock.TestRail库时,目标框架要和TestComplete使用的版本兼容

4. 绕开CLR桥,直接用TestComplete原生HTTP对象调用API

如果上述方法无效,可以放弃CLR桥,直接用TestComplete的aqHttp对象发送请求,完全控制HTTP参数:

testrail.passCase = function(runId, caseId, additionalFields) {
    var baseUrl = "myTestRailURL";
    var username = "myUsername";
    var password = "myPassword";
    
    // 构建请求URL
    var apiUrl = baseUrl + "/index.php?/api/v2/add_result_for_case/" + runId + "/" + caseId;
    
    // 构建请求体
    var payload = JSON.stringify({
        status_id: 1,
        comment: additionalFields.comment || ""
    });
    
    // 创建HTTP请求
    var httpRequest = aqHttp.CreatePostRequest(apiUrl, "application/json", payload);
    
    // 设置Basic Auth
    var authHeader = "Basic " + Utilities.Base64Encode(username + ":" + password);
    httpRequest.SetHeader("Authorization", authHeader);
    
    // 发送请求并处理响应
    var response = httpRequest.Send();
    Log.Message("Response: " + response.Text);
};

这种方式完全避开CLR桥的SSL限制,更灵活。

5. 检查URL格式和API权限

  • 确保myTestRailURL是完整的HTTPS地址(比如https://your-testrail-domain.com),末尾不要加斜杠
  • 再次确认TestRail用户已启用API访问权限,且密码/API密钥正确

内容的提问来源于stack exchange,提问作者SuperMarioRPG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:13:25