1

我发布这个是因为它可能对使用 VersionOne API SDK 客户端的人有所帮助。我想以编程方式将测试状态更改为以下类别之一:Ready、InTesting、Passed 或Failed。我最初试图更改属性“Status.Name”,但是我会收到一个错误,即该属性是只读属性。另一个建议是创建一个具有相同名称的新属性,并且新属性将覆盖以前具有相同名称的只读属性。但是,看来我是在向后看。

internal void TestStatusPassed(string str_TestID)
{
     var testId = Oid.FromToken(str_TestID, _context.MetaModel);
     var query = new Query(testId);
     var testType = _context.MetaModel.GetAssetType("Test");
     var sourceAttribute = testType.GetAttributeDefinition("Status.Name");
     query.Selection.Add(sourceAttribute);
     var result = _context.Services.Retrieve(query);
     var test = result.Assets[0];
     var oldSource = GetValue(test.GetAttribute(sourceAttribute).Value);
     test.SetAttributeValue(sourceAttribute, "Passed");
     _context.Services.Save(test);
 }

此代码将引发异常“无法更改只读属性”...

4

1 回答 1

1

我从 VersionOne Rest API 中提取了一项测试的 XML 数据,并注意到一个名为“TestStatus”的关系,然后分配了一个数字“9123”。所以我手动将该测试移至“测试中”,“TestStatus”更改为“9121”。然后我将其移至失败,“TestStatus”更改为“155”。我用来自不同测试集的几个测试重复了这一点,并注意到每个状态的数字是一致的,然后稍微更改了代码,然后我能够以编程方式更改每个测试的状态。我将“Status.Name”更改为“Status”,将“Passed”更改为“TestStatus:9123”,现在它以编程方式将测试移动到通过的类别中。

internal void TestStatusPassed(string str_TestID)
{
     var testId = Oid.FromToken(str_TestID, _context.MetaModel);
     var query = new Query(testId);
     var testType = _context.MetaModel.GetAssetType("Test");
     var sourceAttribute = testType.GetAttributeDefinition("Status");
     query.Selection.Add(sourceAttribute);
     var result = _context.Services.Retrieve(query);
     var test = result.Assets[0];
     var oldSource = GetValue(test.GetAttribute(sourceAttribute).Value);
     test.SetAttributeValue(sourceAttribute, "TestStatus:9123");
     _context.Services.Save(test);
 }
于 2014-03-29T16:22:21.797 回答