1

我正在尝试创建一个应用程序,该应用程序将显示当前项目中的所有测试集及其通过/失败总数的状态。我面临的问题(顺便说一句,昨天刚开始学习 ExtJS 和 Rally SDK):
- 我需要了解如何使用当前选择的项目作为网格中被起诉的项目作为过滤器
- 测试集通过/失败总计应该如何查询然后显示在网格中的列中 - 示例:测试集 123 | 45/70

4

1 回答 1

1

这是一个使用项目选择器并按项目构建测试集网格的应用程序示例。另请参阅这篇文章中的代码示例。Web 服务 API中没有计算通过/失败总数的字段。您将不得不迭代结果并计算代码中的总数。我会鼓励通过某些标准来限制测试用例结果的数量,例如 CreationDate。在测试用例结果自动化的场景中,庞大的数据量可能会带来问题。

Ext.define('CustomApp', {
    extend: 'Rally.app.App',
    componentCls: 'app',

        launch: function() {
            var c = Ext.create('Ext.Container', {
                items: [
                    {
                    xtype: 'rallyprojectpicker',
                    fieldLabel: 'select project',
                        listeners:{
                            change: function(combobox){
                                if ( this.down('#g')) {
                                    console.log('grid exists');
                                    Ext.getCmp('g').destroy();
                                    console.log('grid deleted');
                                }
                                this.onProjectSelected(combobox.getSelectedRecord());
                            },
                            scope: this
                        }
                    },
                ],
            });
            this.add(c);
        },

        onProjectSelected:function(record){
            var project = record.data['_ref'];
            console.log('project', project);
            var testSetStore = Ext.create('Rally.data.WsapiDataStore', {
            model: 'TestSet',
            fetch: ['FormattedID','Name', 'Project', 'TestCaseStatus'],
            pageSize: 100,
            autoLoad: true,
            filters: [
        {
            property: 'Project',
            value: project
        }
        ],
            listeners: {
                load: this.onTestSetsLoaded,
                scope: this
            }
        }); 


        },

    onTestSetsLoaded:function(store, data){
                var testSets = [];
                Ext.Array.each(data, function(testset) {
                    var ts  = {
                        FormattedID: testset.get('FormattedID'),
                        _ref: testset.get("_ref"),  
                        Name: testset.get('Name'),
            TestCaseStatus: testset.get('TestCaseStatus')
                    };
                    testSets.push(ts);
                 });
                this.updateGrid(testSets);

    },


        updateGrid: function(testSets){
        var store = Ext.create('Rally.data.custom.Store', {
                data: testSets,
                pageSize: 100
            });
        if (!this.down('#g')) {
        this.createGrid(store);
        }
        else{
        this.down('#g').reconfigure(store);
        }
    },

        createGrid: function(store){
    console.log("load grid", store);

    var g = Ext.create('Rally.ui.grid.Grid', {
                id: 'g',
        store: store,

        columnCfgs: [
        {
                   text: 'Formatted ID', dataIndex: 'FormattedID', xtype: 'templatecolumn',
                    tpl: Ext.create('Rally.ui.renderer.template.FormattedIDTemplate')
                },
                {
                    text: 'Name', dataIndex: 'Name'
                },
        {
                    text: 'TestCaseStatus', dataIndex: 'TestCaseStatus'
                }
        ]
    });
    this.add(g);
   },
});

此示例的完整 html 源代码可从此repo获得

于 2013-11-11T19:10:59.690 回答