自制快速冒烟测试小工具--基于python多线程(1)
前言
在項(xiàng)目測(cè)試的過(guò)程中,發(fā)現(xiàn)經(jīng)常會(huì)有下面這些情況:
?新版本升級(jí)后,有時(shí)會(huì)因?yàn)榇a或部署時(shí)配置錯(cuò)誤,某個(gè)菜單報(bào)類似404或500的錯(cuò)誤;
?為避免以上問(wèn)題,實(shí)施部署人員升級(jí)完后,需要手動(dòng)冒煙一遍所有菜單頁(yè)面;
?發(fā)布當(dāng)天還有修改提測(cè),來(lái)不及再全部手動(dòng)回歸一遍;
?項(xiàng)目周期不長(zhǎng),沒(méi)有時(shí)間來(lái)做業(yè)務(wù)流程的自動(dòng)化。
如果所有的菜單都通過(guò)手動(dòng)來(lái)冒煙一遍的話,我們假定一個(gè)菜單頁(yè)面要5秒,那么如果一個(gè)項(xiàng)目有600個(gè)菜單頁(yè)面,那么就需要3000秒,整整一個(gè)小時(shí)啊,而且是每次升級(jí)都要來(lái)這么一次。于是我就想,雖然沒(méi)時(shí)間將所有功能都做成自動(dòng)化,那能不能實(shí)現(xiàn)對(duì)所有的菜單頁(yè)面都自動(dòng)去訪問(wèn)一遍,然后根據(jù)訪問(wèn)結(jié)果判斷是不是都是正常的,以此做個(gè)快速的冒煙測(cè)試呢?
一、實(shí)現(xiàn)步驟分析
想法有了,那就得分析該怎么實(shí)現(xiàn)了。最大的問(wèn)題就在于所有菜單對(duì)應(yīng)的url要怎么獲取了,通過(guò)各種嘗試之后,發(fā)現(xiàn)所測(cè)項(xiàng)目由于框架原因,無(wú)法直接通過(guò)爬蟲來(lái)獲取所有的url。
但是在數(shù)據(jù)庫(kù)里,對(duì)應(yīng)前后臺(tái)都有兩張表,如eclp_A存放有域名,eclp_B則存有各個(gè)菜單頁(yè)面的具體路徑,那么只需要把兩張表的數(shù)據(jù)取出來(lái)拼接在一起就成了一個(gè)完整的url了。
具體步驟:
(1)在數(shù)據(jù)庫(kù)里將客戶端和后臺(tái)管理端(客戶端是uc,后臺(tái)管理端是eclp)域名和路徑取出來(lái)進(jìn)行拼接放到一個(gè)新表,并加入對(duì)應(yīng)斷言關(guān)鍵詞;
(2)不同項(xiàng)目的數(shù)據(jù)庫(kù)配置不一樣,所以把數(shù)據(jù)庫(kù)配置放在配置文件,再通過(guò)程序獲取;
(3)獲取到數(shù)據(jù)庫(kù)的配置后,連接數(shù)據(jù)庫(kù),從表里獲取到所有的url;
(4)取到所有的url之后遍歷去request,但是這個(gè)需要先登錄獲取到cookie后做個(gè)cookie綁定,那么登錄需要用到的用戶密碼也需要放到配置文件;
(5)遍歷訪問(wèn)所有url,并記錄其訪問(wèn)結(jié)果,成功與失敗個(gè)數(shù);
(6)在程序執(zhí)行訪問(wèn)頁(yè)面時(shí),把成功與失敗的日志都記錄下來(lái),方便后續(xù)查找問(wèn)題;
(7)因?yàn)閡rl可能比較多,訪問(wèn)所有頁(yè)面會(huì)很慢,所以實(shí)現(xiàn)多進(jìn)程或多線程的方式;
(8)將所有頁(yè)面訪問(wèn)結(jié)果利用HTML報(bào)告輸出;
二、前期準(zhǔn)備
1. 在數(shù)據(jù)庫(kù)(此處是oracle)拼接URL
1.1 創(chuàng)建存放url的表
查看后臺(tái)存放主域名和路徑的表
select t.*,t.rowid from eclp_A t orderby id desc; select t.*,t.rowid from eclp_B t orderby id desc;創(chuàng)建存放完整url的表
CREATETABLE eclp_uc_url ( ID NUMBER(20) DEFAULT0 NOTNULL , SUB_SYSTEM_ID NUMBER(20) DEFAULT0 NOTNULL , SUB_SYSTEM_CODEVARCHAR2(100 BYTE) DEFAULT'' NULL , NAME VARCHAR2(255 BYTE) DEFAULT'' NULL , DOMAINVARCHAR2(100 BYTE) DEFAULT'' NULL , PATH VARCHAR2(100 BYTE)DEFAULT'' NULL , URL VARCHAR2(100 BYTE) DEFAULT'' NULL , ASSERT_WORD VARCHAR2(255 BYTE) DEFAULT'' NULL )創(chuàng)建主鍵
ALTERTABLE eclp_uc_url ADDPRIMARYKEY (ID);創(chuàng)建id自增序列 drop SEQUENCE SEQ_ECLP_UC_URL; CREATE SEQUENCE SEQ_ECLP_UC_URL INCREMENTBY1 START WITH1 MAXVALUE9999999999999 CYCLE CACHE 20;1.2 從兩個(gè)表分別插入域名和路徑到存放url的新表
eclp的路徑path插入表
INSERTINTO eclp_uc_url(id,SUB_SYSTEM_ID,NAME,PATH) SELECTSEQ_ECLP_UC_URL.NEXTVAL,SUB_SYSTEM_ID,NAME,URL from eclp_A;eclp的域名domian插入表
updateeclp_uc_url set DOMAIN = (select DOMAIN from eclp_B whereeclp_uc_url.SUB_SYSTEM_ID = eclp_B.id) whereexists (select 1 from eclp_B where eclp_uc_url.SUB_SYSTEM_ID =eclp_sub_system.id);將domain和path拼接成url
MERGEINTO eclp_uc_url A USING( select t.id, t.domain || '/' || t.path as urls from eclp_uc_url t) B ON (A.ID= B.ID) WHENMATCHED THEN UPDATE SET A.URL = B.URLS;2. 數(shù)據(jù)庫(kù)配置與前后臺(tái)用戶配置文件
創(chuàng)建一個(gè)DbUser.ini文件:
存有數(shù)據(jù)庫(kù)連接配置、前后臺(tái)用戶信息、瀏覽器選擇(chrome、firefox、ie)
3. 前后臺(tái)登錄元素定位方式配置文件
包含用戶名、密碼、登錄按鈕的定位方位,UiObjectMap.ini
[eclp] LoginAccount=id>account LoginPassword=id>password LoginButton=xpath>//input[@class='btn2'][uc] LoginAccount=id>account LoginPassword=id>password LoginButton=id>button(未完待續(xù):代碼實(shí)現(xiàn))
總結(jié)
以上是生活随笔為你收集整理的自制快速冒烟测试小工具--基于python多线程(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python学习教程,猜数字游戏开发
- 下一篇: 用Python处理图片九宫格