51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2491|回复: 1
打印 上一主题 下一主题

修改TestLink,使其适应大数据量

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-9-24 14:06:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
即使安装在Oracle数据库上,testlink仍无法充分利用数据库的性能。做了个实验,从QC的数据库中转换了9万个案例(包括目录结构、设计步骤)到TL的库,发现没法使用。主要的问题是TL设计时没有考虑性能问题,大量使用IN(id, id, id...)的形式做查询。

为此需要对TL做一些改动。因为仅适用于Oracle库,所以不适合提交到TL项目,就自己用吧。

到目前为止的改动:

1、首页上有一个判断是否有Testcase的函数,是取所有TestCaseID,然后判断列表长度是否大于0(-_-!);修改这个sql,直接查tcversion有无记录即可;再进一步,完全可以把这个判断去掉。

2、改造 IN (list)。思路是把它改为子查询。

具体实现有些费劲,因为子查询中的select语句参数中也不能支持大文本数据。但(insert + 绑定变量)可以。 于是在数据库建立global temporary table,是仅有一个ID字段的表,设置成on commit preserve rows;在testlink的database.inc.php新增一个wrap_list函数,内容是:先删除临时表;再用存储过程把逗号分隔的list参数分解成id,插入临时表,然后返回一个子查询语句“select id from temp_id_table”。这样,testlink的 in ({$idList})就可以改写成 in ({$this->db->wrap_list($idList)})。

另外,testlink的database类不支持绑定参数,稍微改造一下就可以了。


这两步做好以后,浏览和编写案例基本上就没问题了;但搜索案例仍有问题。继续改搜索:

1、搜索代码中有个逻辑,如果没填caseID,就在sql中加一个 and id in (项目中所有caseid)。这个地方唯一的作用就是把搜索限制在指定的项目中。我的思路是在案例上增加项目信息,就可以筛选了。具体做法有点取巧:在nodes_hierarchy的tcversion节点的name字段记录projectID(反正这个字段没有被TL使用)。为此需要修改create testcase version的方法(有两处)。

2、搜索时会查两遍,第一遍查count(*),第二遍才查具体信息。这个没有必要,改为只查一遍(加limit)。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    开心
    2022-11-3 14:42
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    2#
    发表于 2014-5-7 17:57:06 | 只看该作者
    回复 1# MountLion


        你好,我对你的帖子很感兴趣,我们的testlink现在非常慢,以至于测试人员根本不想用了。但是我对testlink不太熟悉,最近花点时间研究下,有什么疑问再来问你。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-8 12:09 , Processed in 0.070527 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表