51Testing软件测试论坛

标题: 【转帖】存储过程在性能测试中的应用 [打印本页]

作者: 啦啦啦啦哈    时间: 2017-7-21 13:53
标题: 【转帖】存储过程在性能测试中的应用
本帖最后由 啦啦啦啦哈 于 2017-7-21 13:54 编辑

存储过程在性能测试中的应用
测试具有重复性,每个测试用例可能执行十几遍,我恨透了每执行一次测试,准备测试数据、还有清理测试数据都要花费大量的时间,怎么样做才能把这个时间减为0?在大量数据处理的性能测试中这个需求更迫切。怎么样做才能让测试环境更健壮呢?我执行了一次测试用例,喝杯水抽支烟的功夫,就能再次执行的同样的测试用例,想想多好呀。
在年前负责的工作流项目的性能测试过程中,遇到一个小问题,我们需要足够多的工作流用户。在实际生产环境中也是需要这么多的登录用户的,不可能出现几百个用户同时登录系统处理同样一条记录的情况吧。怎么解决这样的问题?在界面上一个用户一个用户的增加?800个用户呢?!因为登录用户的信息是维护在数据表里面的,在界面上的操作都会调用持久层的接口把用户信息保存在数据库的,我们如果明白后台SQL语句执行逻辑,是可以使用存储过程批量生成工作流用户的。这样就能保证每个工作流用户的待办任务显示的流程记录是不一样的。
下面是创建存储过程department_insert_test_users的SQL语句,可以像创建一个普通的表对象一样在SQL/PLUS里执行。这里只是演示使用,为避免泄漏项目信息,一些表名和字段已经删改,现在不保证在数据库可以执行通过。
[attach]107942[/attach][attach]107943[/attach]
可以使用下面的语句在sql/plus窗口调用,'BPM'作为前缀需要大写:
SQL> call department_insert_test_users('BPM',100);                               调用完成。
下面的两个存储过程delete_test_users,delete_test_stru_organ可以用于清除工作流用户数据,会清除BPM部门,BPM员工,BPM用户,后台的其他信息。调用方法如下:
SQL> call delete_test_users('BPM');                               调用完成。
SQL>  call delete_test_stru_organ();
调用完成。


create or replace procedure                               delete_test_users(likecount  in                                 varchar2) is
                              likecount2 varchar2(30);
begin
   likecount2 :=likecount ||'%';

  delete from TEST_USER_ROLE                                t where t.user_id like likecount2;
                                delete from TEST_STRU_TYPE_REF                               t where t.user_id like likecount2;
                                delete from  TEST_USER_PROXY                               t where t.user_id like likecount2                                or t.proxy_user_id  like likecount2;
                                delete from TEST_USER_DATAREF                               t where t.user_id  like likecount2;
commit;
  delete from                               TEST_USERS t where t.user_id  like                               likecount2;
  commit;
end                               delete_test_users;

create or replace procedure                               delete_test_stru_organ is
                              p_stru_id varchar2(30);
                              p_organ_id varchar2(30);
begin
                              p_stru_id  :='Sp_stru_id00113';
                              p_organ_id :='Op_organ_id0113';
delete from test_stru where                               STRU_ID=p_stru_id;
delete from                               test_organ where organ_id=p_organ_id;
delete from test_stru t where                               t.organ_id like 'vorgan_id%';
delete from test_organ t where                               t.organ_id like 'vorgan_id%';
commit;
end delete_test_stru_organ;

作者: 草帽路飞UU    时间: 2017-7-21 16:20
楼主棒棒的
作者: 梦想家    时间: 2017-7-22 09:07

作者: Miss_love    时间: 2020-12-30 10:46
支持分享




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2