Forum Discussion
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 caseUsage:
//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'});
}
Hello I am using this code to try out TestRail integration myself, however I'm having difficulties handling the object returned from TestRail.
Currently the only way I am able to retrieve data is using the methods you described:
var caseId = jobject.Item('case_id').Value_2.m_value;
var runId = jobject.Item('run_id').Value_2.m_value;
Any way I try to read the data or keys outside of these two lines, I get an empty string.
so a few questions:
1) What type of object is this? (I originally thought JSON but I am unable to use JSON properties to convert to javascript object)
2) Where does "Value_2.m_value" come from?
3) How can I get the keys for 'Item(<key>)' for all items of this object?
Thank you!