Rally 提取属于特定用户故事集的测试用例
我正在尝试提取属于一组用户故事的测试用例列表,这些用户故事属于一个特定的迭代,但是目前我无法这样做Rally 提取属于特定用户故事集的测试用例,rally,Rally,我正在尝试提取属于一组用户故事的测试用例列表,这些用户故事属于一个特定的迭代,但是目前我无法这样做 我尝试过使用应用程序,但仍然不起作用——我知道如何提取测试用例,知道我可以根据测试用例提取用户故事,但我无法提取属于特定用户故事集的测试用例 下面是一个应用程序示例,它构建了用户故事和相关测试用例的网格。用户故事通过迭代过滤 Ext.define('CustomApp', { extend: 'Rally.app.TimeboxScopedApp', componentCls: '
我尝试过使用应用程序,但仍然不起作用——我知道如何提取测试用例,知道我可以根据测试用例提取用户故事,但我无法提取属于特定用户故事集的测试用例 下面是一个应用程序示例,它构建了用户故事和相关测试用例的网格。用户故事通过迭代过滤
Ext.define('CustomApp', {
extend: 'Rally.app.TimeboxScopedApp',
componentCls: 'app',
scopeType: 'iteration',
comboboxConfig: {
fieldLabel: 'Select an Iteration:',
labelWidth: 100,
width: 300
},
onScopeChange: function() {
var filter = this.getContext().getTimeboxScope().getQueryFilter();
filter = filter.and({
property: 'TestCaseStatus',
operator: '<',
value: 'ALL_RUN_ALL_PASSING'
});
Ext.create('Rally.data.WsapiDataStore', {
model: 'UserStory',
fetch: ['FormattedID','Name','TestCases', 'TestCaseStatus'],
pageSize: 100,
autoLoad: true,
filters: [filter],
listeners: {
load: this._onDataLoaded,
scope: this
}
});
},
_onDataLoaded: function(store, data){
var stories = [];
var pendingTestCases = data.length;
_.each(data, function(story) {
var s = {
FormattedID: story.get('FormattedID'),
Name: story.get('Name'),
_ref: story.get("_ref"),
TestCaseCount: story.get('TestCases').Count,
TestCaseStatus: story.get('TestCaseStatus'),
TestCases: []
};
var testcases = story.getCollection('TestCases', {fetch:['FormattedID','LastVerdict']});
testcases.load({
callback: function(records, operation, success){
_.each(records, function(testcase){
s.TestCases.push({_ref: testcase.get('_ref'),
FormattedID: testcase.get('FormattedID'),
Name: testcase.get('Name'),
LastVerdict: testcase.get('LastVerdict')
});
}, this);
--pendingTestCases;
if (pendingTestCases === 0) {
this._createGrid(stories);
}
},
scope: this
});
stories.push(s);
}, this);
} ,
_createGrid: function(stories) {
var myStore = Ext.create('Rally.data.custom.Store', {
data: stories,
pageSize: 100,
});
if (!this.grid) {
this.grid = this.add({
xtype: 'rallygrid',
itemId: 'mygrid',
store: myStore,
columnCfgs: [
{
text: 'Formatted ID', dataIndex: 'FormattedID', xtype: 'templatecolumn',
tpl: Ext.create('Rally.ui.renderer.template.FormattedIDTemplate')
},
{
text: 'Name', dataIndex: 'Name'
},
{
text: 'TestCase Count', dataIndex: 'TestCaseCount'
},
{
text: 'Test Cases', dataIndex: 'TestCases', minWidth: 200,
renderer: function(value) {
var html = [];
Ext.Array.each(value, function(testcase){
html.push('<a href="' + Rally.nav.Manager.getDetailUrl(testcase) + '">' + testcase.FormattedID + '</a>' + ' ' + testcase.LastVerdict);
});
return html.join('</br>');
}
},
{
text: 'TestCase Status', dataIndex: 'TestCaseStatus',minWidth: 200
},
]
});
}else{
this.grid.reconfigure(myStore);
}
}
});
完整的应用程序在中提供