本篇文章主要列舉一些測試人員常用的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:不但可以指定一個根節點,還可以指定多個根節點。
新手上路,有問題歡迎指正【手動謝謝】~