CA Rally - 并发冲突:[对象在此上下文中被读取以进行更新时已被修改]错误

时间:2018-03-08 22:53:52

标签: javascript rally code-rally

我有一系列测试用例,我试图使用集会api将其添加到Rally的测试集中。

我遍历数组并为数组中的每个测试用例调用此方法。它们都被添加到同一个测试集中。

RallyConnect.prototype.addTestCaseToSet = function (tcObjectID, tcRef, tsObjectID, tsRef) {
    return new Promise((resolve, reject) => {

        // check to make sure it doesn't already exist
        rallyApi.query({
            ref: '/testset/' + tsObjectID + '/testcases',
            fetch: "true",
            query: queryUtils.where('ObjectID', '=', tcObjectID)
        }, function (error, result) {
            if (error) {
                reject(error);
            } else {
                if (result.TotalResultCount > 0) {
                   resolve({ tsRef: tsRef, tcRef: tcRef, action: 'exists' });
                } else {
                        rallyApi.add({
                            ref: tsRef,
                            collection: 'TestCases',
                            data: [{ _ref: refUtils.getRelative(tcRef) }]
                        }, function (error, result) {
                            if (error) {
                                reject(error);
                            } else {
                                resolve({ tsRef: tsRef, tcRef: tcRef, action: 
 'added' });
                            }
                        });
                }
            }
        });
        //});
    });
}

我收到了以下错误并且进程失败

Error: Could not add artifact to collection
    at generateError (C:\src\testing_utility\node_modules\rally\dist\request.js:38:11)
    at Request._callback (C:\src\testing_utility\node_modules\rally\dist\request.js:118:22)
    at Request.self.callback (C:\src\testing_utility\node_modules\rally\node_modules\request\request.js:187:22)
    at emitTwo (events.js:125:13)
    at Request.emit (events.js:213:7)
    at Request.<anonymous> (C:\src\testing_utility\node_modules\rally\node_modules\request\request.js:1044:10)
    at emitOne (events.js:115:13)
    at Request.emit (events.js:210:7)
    at Gunzip.<anonymous> (C:\src\testing_utility\node_modules\rally\node_modules\request\request.js:965:12)
    at emitNone (events.js:110:20)
  errors:
   [ 'Could not add artifact to collection',
     'Concurrency conflict: [Object has been modified since being read for update in this context] - ConcurrencyConflictException : Modified since read on update
: Object Class : com.f4tech.slm.domain.TestSet : ObjectID : 203533554680' ] }

是否有其他人遇到过这个问题并且知道我能做些什么来确保我没有得到它。

3 个答案:

答案 0 :(得分:2)

不是一次一个地循环和添加测试用例,而是可以批量添加它们吗?

rallyApi.add({
    ref: tsRef,
    collection: 'TestCases',
    data: [
        { _ref: refUtils.getRelative(tcRef1) },
        { _ref: refUtils.getRelative(tcRef2) }, //include multiples here
        { _ref: refUtils.getRelative(tcRef3) },
        { _ref: refUtils.getRelative(tcRef4) },
    ]
});

请注意,我认为这种方法限制为每批25条记录,因此根据您通常与测试集关联的数据量,您可能需要将其分解为25个块。

要检查的另一件事是,您是否为每个调用使用相同的rallyApi实例?从你的代码看起来像它。只要这是真的,并且只要启用了cookie,我认为您应该将所有请求固定到同一个应用服务器上,并且不应该看到这些异常(这通常是由于在后台快速更新相关对象引起的缓存所有服务器节点的同步。)

您还可以在新增rallyApi实例时尝试添加此配置:

{
    requestOptions: { jar: true }
}

这应该确保您的请求保持cookie。

答案 1 :(得分:1)

为了社区的利益...我也收到了此错误消息,但原因有所不同。我将其放在此处,因为这是在更广泛的网络上进行讨论的唯一位置。 (如果在Rally自己的论坛中隐藏了某个讨论,请随时链接!)

尝试保存我已经长时间编辑但没有保存的投资组合要素项目时出现错误(因为这是一个很大的字段,而且我不喜欢滚动浏览无数英里的修订历史记录)

我在该项目上有四个image.png,这些是我直接内联粘贴的内容,而不是通过“图像”按钮插入作为附件包含的内容,而且其中一个或多个已消失的编辑器(有时确实如此) )。

是无法放置的丢失的image.png“附件”中的一个或多个,导致无法保存。我从附件中删除了image.png文件(没有实际的图像从字段正文中消失!),之后保存得很好。

答案 2 :(得分:0)

https://rally1.rallydev.com/slm/doc/webservice/

具体是:https://rally1.rallydev.com/slm/doc/webservice/bulk.jsp

不幸的是,我还没有弄清楚如何通过批量上传将项目添加到集合中。我专门将缺陷引用添加到缺陷套件中。

我没有使用任何lib ....相反,我只是在调用rally API(这太糟糕了,让我想起了90年代)