使用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
相关产品推荐
相关产品推荐

