ContributionsMost RecentMost LikesSolutionsRe: TestComplete integration with TestRail Nice brainwave Colin_McCrae that is indeed how testrail works. If you know the unique case id, and run id, you can get the test id, which is the specific instance of the test case in the test run. It's a bit confusing, but allows you to put unique case ids in your test data or scripts in testcomplete. You can even create new test runs via the testrail api. leandropoblet let us know about that return json if you are having new issues. Glad this worked out, thanks everyone. Happy testing. Re: TestComplete integration with TestRail Hello, Sorry I'm a bit late to the party here. I no longer use testcomplete and testrail, but I'll try to help where I can. leandropoblet, you posted an image that had an exception message that pointed to the testrail script file, line 86, column 5. Can you please post the statement from that line? I'm guessing it's the testrail.apiClient().SendPost(apiArgsAsString, dataDictionaryObj); line. Next, I would put a debug breakpoint on that statement, and then run the function that you've been testing with. Once TC stops at that line, use the Locals panel and/or the Evaluate dialog to get the apiArgsAsString value and dataDictionaryObj (may have to change the latter into a string or json object). Paste those values and we can go from there. My guess is that apiArgsAsString is not a valid string. Another place to check would be the client root endpoint is correct var client = dotNET.Gurock_TestRail.APIClient.zctor("https://testrail.blahblah1234.com/testrail/"); Option to change colors in Ready API for Red/Green color blind people When running a REST test suite in SoapUI NG, The request nodes in the navigator change color based on if the request assertions passed or failed. The colors used are red and green. For a person that is red/green colorblind, the node colors are indistinguishable. Re: TestComplete integration with TestRail I implemented a solution (in JScript) using the .NET api bindings from the testrail website: // Note: this functionality depends on 3rd party .NET libraries that needed to be compiled by you. We downloaded the testrail .NET api bindings // from the testrail website, along with the Json.NET library. Using visual Studio 2010, we built the Gurock.TestRail library, referencing the Newtonsoft.Json // library. We built x86 and x64 versions using .NET 3.5. In this project, the libraries are stored in a folder next to the project, and have // already been linked to the project via the CLR bridge. testrail = {}; // Use these methods for updating test case statuses in TestRail // Use the methods testrail.passCase, testrail.failCase, testrail.blockedCase, and testrail.retestCase to add case results. // The methods require the run id and the case id // A run id in test rail is formatted like 'R4683'. Remove the letter R from the beginning and just supply the integer. // A case id in test rail is formatted like 'C866870'. Remove the letter C from the beginning and just supply the integer. // // Supplying the additionalFields json object is optional. The request fields can be found in the add_result method definition // of the api at http://docs.gurock.com/testrail-api2/reference-results // e.g. {comment: '<A comment to be logged in the result record>', version: '<free form version info>'} testrail.passCase = function(runId, caseId, additionalFields) { testrail.addStatusAndResultForCase(runId, caseId, additionalFields, 1); }; testrail.failCase = function(runId, caseId, additionalFields) { testrail.addStatusAndResultForCase(runId, caseId, additionalFields, 5); }; testrail.blockedCase = function(runId, caseId, additionalFields) { testrail.addStatusAndResultForCase(runId, caseId, additionalFields, 2); }; testrail.retestCase = function(runId, caseId, additionalFields) { testrail.addStatusAndResultForCase(runId, caseId, additionalFields, 4); }; testrail.runIdAndCaseIdFromTestId = function(testId) { test = testrail.getTest(testId); caseId = test.Item('case_id').Value_2.m_value; runId = test.Item('run_id').Value_2.m_value; return {runId: runId, caseId: caseId}; }; // Support functions for the above functions. These do not need to be called directly outside of this file. testrail.addStatusAndResultForCase = function(runId, caseId, additionalFields, statusId) { additionalFields = additionalFields || {}; additionalFields.status_id = statusId; testrail.addResultForCase(runId, caseId, additionalFields); }; testrail.addResultForCase = function(runId, caseId, additionalFields) { dataObj = testrail.dataDictonary(additionalFields); testrail.sendPost("add_result_for_case/" + runId + "/" + caseId, dataObj); }; testrail.getTest = function(testId) { result = testrail.sendGet('get_test/' + testId); return result; }; testrail.sendPost = function(apiArgsAsString, dataDictionaryObj) { testrail.apiClient().SendPost(apiArgsAsString, dataDictionaryObj); }; testrail.sendGet = function(apiArgumentString) { results = testrail.apiClient().SendGet(apiArgumentString); return results; }; testrail.dataDictonary = function(jsonObj) { var dataD = dotNET.System_Collections.Hashtable.zctor(); for (var key in jsonObj) { if (jsonObj.hasOwnProperty(key)) { dataD.Add(key, jsonObj[key]); } } return dataD; }; testrail.apiClient = function() { var client = dotNET.Gurock_TestRail.APIClient.zctor("https://testrail.blahblah1234.com/testrail/"); client.User = "bojack.horseman@blahblah1234.com"; client.Password = "api_key_from_your_testrail_instance_instead_of_users_pwd"; return client; }; //TODO: add error handling //TODO: implement the add_results api call so we can do a bulk update instead of calling add_result_for_case for each case Usage: //USEUNIT TestRail function testUpdateTestRail() { testrail.retestCase(4683, 866867); testrail.passCase(4683, 866868, {version: 'Build 10.0.0.1234'}); testrail.blockedCase(4683, 866869, {comment: 'Blocked due to JIRA-4321'}); testrail.failCase(4683, 866870, {comment: 'Failed. JIRA-5678 logged.', version: 'Build 10.0.0.1234'}); }