本篇文章主要列举一些测试人员常用的SQL技能,作为一名测试从业人员,一般涉及到数据库的那些方面,希望给一些入门但是没头绪的小伙伴一些帮助。
首先梳理一下本人在工作中遇到的一些数据库使用场景(我目前从事的是管理系统网站的测试):
- 本地搭建测试环境,数据库的导出导入
- 页面上报SQL异常分析
- 数据库简单的增删改查
- 批量插入数据或者是查询
- 树结构查询
1、本地搭建测试环境,数据库的导出导入
项目开发的初期,或者说测试介入测试的时候,一般是集成测试阶段,一般是在开发库上开发,如果开发人数较多,经常会造出一些脏数据,不利于我们验证,或者测试,此时我们需要有一个专门用于测试的干净数据库,如果公司服务器可以开个账号最好,如果不可以,也可以在本地导入一个数据库辅助测试。
流程一般是:从服务器导出dmp文件 >> 在指定服务器创建用户、赋权>> 将导出的dmp文件导入到指定数据库的指定用户(以ORACLE数据库11G为例)
- 导出
将user1的所有资源导出为/home/oracle目录下的test.dmp文件,输入日志为同级目录下的log.log文件
exp user1/123456 file=/home/oracle/test.dmp log=/home/oracle/log.log owner=user1
- 创建用户、赋权
创建表空间,表空间名字为TEST,存储文件为TEST.ORA,初始带下为524兆,空间不够时每次自增100兆。
create tablespace TEST datafile 'TEST.ORA' size 524m autoextend on next 100m;
创建用户名为test,密码默认为123456,指定表空间为TEST
create user test identified by 123456 default tablespace TEST;
赋权,给test增加连接、访问资源、管理员权限
grant connect,resource,dba to test;
- 导入
将导出的dmp文件导入到指定用户
imp test/123456 file=E:/test.dmp log=E:/log.log fromuser=user1 touser=test ignore=y
2、页面上报SQL异常分析
上文也说了,项目初期,问题肯定会存在,比如说表缺失或者字段缺失等等问题,web界面上会报比较明显的问题,此时你需要把日志中的对应sql拎出来执行分析问题,找到缺失的表或者对应的表和字段,在SVN上找到对应的脚本,在测试数据库执行一下,此时问题就解决了(这种小问题,需要测试人员自己解决,不然都找开发,一方面是效率太低,一直打扰别人工作,因为很常见,另一方面是显得测试价值更低【手动捂脸】)
PS:一般情况下,开发库都是齐全的,可以直接找到然后生成对应的脚本,刷一下即可。
3、数据库简单的增删改查
数据库其实还是和测试息息相关的技能,像简单的查询定位问题,插入测试数据来减少工作量,以及部分字段类型长度的修改这些简单技能还是需要掌握的,市面上搜一下测试工程师,SQL基本都是必备技能了,可以不精通,但是必须要会~
4、批量插入数据或者是查询
----循环修改记录 declare P_id varchar2(100); P_Name varchar2(100); conNum number; begin --循环记录中的 P_id、P_Name(查询结果集循环)-- for item in (select A.P_id,A.P_Name from VIEW_1 A) loop -- 将查询到的数据赋值给变量 -- P_id := item.P_id; P_Name := item.P_Name; -- 获取 P_Name 是否存在(查询结果集赋值)--- select COUNT(*) into conNum from VIEW_2 where NAME=P_Name; --判断是否存在,存在则将结算单位ID赋给货主的TmsCode -- if conNum = 1 then dbms_output.put_line('存在'); --执行修改-- update VIEW_2 set VIEW_2.VIEW_2 = P_Name where NAME = P_Name; else dbms_output.put_line('不存在'); --执行新增-- end if; end loop; end;
5、树结构查询
connect by 是结构化查询中用到的,其基本语法是: select * from tablename start with 条件1 connect by 条件2 where 条件3; 例: select * from table start with org_id = 'AAA' connect by prior org_id = parent_id;
其中 :
CONNECT BY :代表的是父子连接关系, PRIOR运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。
START WITH:不但可以指定一个根节点,还可以指定多个根节点。
新手上路,有问题欢迎指正【手动谢谢】~