1

我有一系列测试用例,我正试图使用​​拉力赛 api 添加到拉力赛中的测试集。

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

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' ] }

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

4

3 回答 3

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。

于 2018-03-09T16:15:51.500 回答
1

为了社区的利益...我也收到了此错误消息,但原因有所不同。我会把它放在这里,因为它是唯一在更广泛的网络上讨论过的地方。(如果在 Rally 自己的论坛中某处隐藏了有关它的讨论,请随时链接!)

我在尝试保存一个我已经在其中进行了很长时间编辑但没有保存的投资组合特征项目时遇到了错误(因为它是一个很大的字段,而且我不喜欢滚动浏览无尽的修订历史记录)。

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

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

于 2020-11-09T18:00:10.783 回答
0

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

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

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

我没有使用任何库......相反,我只是调用了集会 API(这非常糟糕,让我想起了 90 年代)

于 2019-12-20T15:23:21.007 回答