WTD ui自動化 和接口自動化測試 開發(fā)手冊

版本更新

v2.2 2018/01/20

  • 更新說明文件和democase

v2.1 2018/01/09

  • 更新最新chromewebdriver解決比較新的chrome打不開的情況

V2.0 2017/3/12

  • 第一個版本

介紹

wtd自動化測試框架支持以下功能:

  • 接口自動化測試,只需簡單的一個接口的xml文件即可
  • 網(wǎng)頁UI自動化測試,編寫一個簡單的java文件放在wtd框架中即可執(zhí)行
  • 測試結(jié)果報(bào)告保存,測試結(jié)果和錯誤原因及網(wǎng)頁截圖文件會保存在本地
  • 測試結(jié)果匯總并自動以郵件形式發(fā)送給相關(guān)測試人員
  • 定時(shí)自動執(zhí)行選定的測試case

wtd是基于selenium開發(fā)的,框架提供了很多通用的方法和接口弥雹,當(dāng)然,開發(fā)的網(wǎng)頁自動化case也可以直接使用webdriver的所有方法。接口測試case非常簡單,只需要新建一個xml文件彤守,里面替換掉接口地址,參數(shù)哭靖,期望返回結(jié)果等就可以了具垫。對于需要登錄的接口case也是支持的。

快速開始

1. 環(huán)境準(zhǔn)備并運(yùn)行demo
  • 下載wtd測試框架: git clone https://github.com/peintune/wtd.git 或者直接download
  • 本地安裝好JDK
  • 本地安裝IDEA開發(fā)環(huán)境试幽。
  • 打開IDEA筝蚕,導(dǎo)入wtd整個項(xiàng)目
  • 在IDEA開發(fā)環(huán)境中,直接運(yùn)行 RunCaseTest類
1.2 運(yùn)行自己開發(fā)好的case
  • 開發(fā)環(huán)境中運(yùn)行:在IDEA開發(fā)環(huán)境中,更改caselist.cfg.xml文件起宽,直接運(yùn)行 RunCaseTest類
  • 正式部署環(huán)境中運(yùn)行洲胖,直接復(fù)制開發(fā)好的接口case(TC_xxx.xml)或者UI自動化case(TC_xxx.java)到正式測試環(huán)境中的對應(yīng)目錄中。更改caselist.cfg.xml文件坯沪,然后雙擊wtd.bat腳本啟動绿映。
  • 正式部署環(huán)境定時(shí)循環(huán)任務(wù):打開window終端運(yùn)行 ./wtd.bat 2 5 3600,(2代表開始小時(shí)時(shí)間為2點(diǎn),5代表循環(huán)執(zhí)行5次屏箍,3600代表每次循環(huán)間隔為3600s)

以上,所有開發(fā)環(huán)境準(zhǔn)備完成橘忱,可以開始寫case了赴魁。

1. WTD 測試框架免費(fèi)下載:wtd
2. 框架目錄結(jié)構(gòu)
wtd.png
3. 程序運(yùn)行界面
run2.png
debugrun.png
4.生成的log文件及截圖
log.png
5.自動生成的郵件報(bào)告
report.png
6. 文檔目錄
  • Case需存放的目錄:
  • Case的形式:
  • Case的命名規(guī)范:
  • Case的具體實(shí)現(xiàn)步驟:
  • Case可使用的變量及方法:
  • 如何調(diào)試運(yùn)行case:
  • 如何部署環(huán)境:
  • 一個Case實(shí)例:
7. Case需存放的目錄:
  • 在WTD項(xiàng)目中,將新功能性case新建在wtdwebuicases包中钝诚,并且此包要確定是一個sources root目錄颖御,默認(rèn)導(dǎo)入的框架中的此目錄已經(jīng)是sources root目錄。
  • 將接口性case放入wtdapicases目錄中凝颇。
8. Case的形式:
  • 功能性Case的實(shí)體是一個java文件潘拱。
  • 接口性Case的實(shí)體是一個xml文件。
9. Case的命名規(guī)范:
  • Case開頭已Tc_開頭拧略,如:Tc_LogIn芦岂。Tc是TestCase的縮寫。
10. Case的具體實(shí)現(xiàn)步驟:
  • ui 自動化 Case:
  1. 在wtdwebuicases包中建立子package比如member,然后建立對應(yīng)的case比如TC_BaiDuSearch.java垫蛆。
  2. 新建case類必須繼承BaseCase類:public class TC_BaiDuSearch extends BaseCase{}
  3. Case必須實(shí)現(xiàn)無參方法execute()禽最;在這個方法里做具體的事情。
  4. 具體參考TC_BaiDuSearch case模板袱饭。
  • 接口測試 Case:
  1. 在wtdapicases中新建TC_XiaomuwuAbout.xml文件川无,支持post,get,jsonrpc類型。
  2. 寫上接口case的測試地址虑乖。
  3. 有需要可以設(shè)置全局變量為以后的case用懦趋。如:
<setGlobalVarible name="guid" value="$Cookie.guid"/>
或者<setGlobalVarible name="sToken" value="$Response.sToken" />
  1. 設(shè)置測試點(diǎn)(可以多個),其中包括期望返回值(可正則表達(dá)式)疹味,執(zhí)行測試點(diǎn)之前可執(zhí)行其他公共接口仅叫。改測試點(diǎn)的各個參數(shù)。如:
    <test name="the correct values"  expectContansString='iStatus":1' preExcution="loginByApp">
    <parameter name="userId" value="1800012315" />
    </test>
    <test name="the wrong values"  expectContansString='iStatus":0'">
    <parameter name="userId" value="1800012111" />
    </test>
    
  2. 接口Case可以自定義全局變量糙捺,也可以用系統(tǒng)的中變量惑芭。系統(tǒng)中的變量包括:
$Cookie,$Response,$PreResponse
11. UI 自動化測試case可使用的變量及方法:
  • SessionData 類:
變量名 描述
webDriver Webdriver 的一個實(shí)例,用于case進(jìn)行頁面各種操作的一個對象继找,可以直接在case中調(diào)用如遂跟,webDriver.get();
hostName 當(dāng)前測試的主要的host name, 可以直接在case中調(diào)用
caseName 當(dāng)前測試的case 名字, 可以直接在case中調(diào)用
logFolder 當(dāng)前case生成log和result文件的目錄, 可以直接在case中調(diào)用
logger 可以用來記錄log到log文件, 可以直接在case中調(diào)用
isOnlineTest 判斷當(dāng)前環(huán)境是否為線上測試環(huán)境
  • screenCapture()方法:返回類型:String
    調(diào)用此方法會截一張當(dāng)前的圖片保存到當(dāng)前case 的log文件夾里。

  • setDescription(String)方法: 返回類型:void
    調(diào)用此方法會為當(dāng)前case設(shè)置描述信息。

  • setErrorInfo(String)方法:返回類型:void
    調(diào)用此方法會為當(dāng)前case設(shè)置一些錯誤的log信息幻锁,便于在log文件中查看錯誤原因凯亮。

  • setPointResult(String name,String description,String result,String errorInfo)方法:返回類型:void
    調(diào)用此方法會將每個測試點(diǎn)的結(jié)果寫進(jìn)result.xml和log文件中。注意:測試點(diǎn)是包含在每個case中的哄尔,每個case至少包含一個測試點(diǎn)假消,也就是說每個case至少調(diào)用此方法一次。

  • clickBy (By by)方法:返回類型:boolean
    調(diào)用此方法會點(diǎn)擊頁面一個控件岭接,并返回是否執(zhí)行成功富拗。

  • clickById(String id)方法:返回類型:boolean
    調(diào)用此方法會點(diǎn)擊頁面一個控件,并返回是否執(zhí)行成功鸣戴。

  • clickByLinkText(String link)方法:返回類型:boolean
    調(diào)用此方法會點(diǎn)擊頁面一個控件啃沪,并返回是否執(zhí)行成功。

  • sendKeys(By by, String value)方法:返回類型:boolean
    調(diào)用此方法會向一個控件輸入信息窄锅,并返回是否執(zhí)行成功创千。

  • sendKeysById(String id, String value)方法:返回類型:boolean
    調(diào)用此方法會向一個控件輸入信息,并返回是否執(zhí)行成功入偷。

  • isExist(By by)方法:返回類型:boolean
    調(diào)用此方法會判斷某個元素是否存在追驴,并返回判斷結(jié)果,true是找到該元素疏之。

  • isTextExist(String content)方法:返回類型:boolean
    調(diào)用此方法會判斷是否存在某個值的元素殿雪,并返回判斷結(jié)果,true是找到該元素锋爪。比如判斷當(dāng)前頁面是否有“注冊”字段冠摄。

  • isCurrentURL(String url)方法:返回類型:boolean
    調(diào)用此方法會判斷當(dāng)前URL是否和傳入的URL一樣,并返回判斷結(jié)果几缭,true是表示一樣的河泳。

更多方法可以參考com.pub.wtd.common.BaseCase 類和webdiver對象中的方法∧晁ǎ或者登陸 小木屋

12. 如何調(diào)試運(yùn)行case:
  1. 調(diào)試運(yùn)行case:
  2. 在Intellij IDEA 中打開整個WTD項(xiàng)目拆挥。
  3. 編寫接口測試case和ui 自動化測試case,具體可以參考項(xiàng)目中的demo某抓。
  4. 更改config/conf/wtd.cfg.xml中測試的hostname纸兔,測試瀏覽器,測試人員郵箱的信息否副。
  5. 在conig/caselist.cfg.xml中添加要調(diào)試運(yùn)行的case汉矿。
  6. 運(yùn)行或者調(diào)試運(yùn)行runcasestest 包中的RunCaseTest類。
13. 如何部署環(huán)境:
  1. 更改config/conf/wtd.cfg.xml中測試的hostname备禀,測試瀏覽器洲拇,測試人員郵箱的信息奈揍。
  2. 在conig/caselist.cfg.xml中添加要測試的case。
  3. 雙擊運(yùn)行wtd.bat或者通過任意windows shell環(huán)境運(yùn)行wtd.bat(推薦)赋续。
14. 一個接口 Case實(shí)例:
<?xml version="1.0" encoding="utf-8" ?>
<case description="change the userlogin passwd" type="post">
    <testApi api="http://xxx.xxx.qa.ipo.com/api/internal/user/changepwd.html" />
     <setGlobalVarible name="guid" value="$Cookie.guid"/>
      <setGlobalVarible name="token" value="$Response.token"/>
    <test name="the correct values"  expectContansString='iStatus":1' preExcution="logintoManage">
        <parameter name="iUserID" value="$PreResponse.istatus" />
        <parameter name="sOldPassword" value="a592ee46b591ba0c8bcce6a27c109f65" />
        <parameter name="sNewPassword" value="4e1cea91bcd58ab5982ab1b50c2a782b" />
    </test> 
    <test name="the correct values"  expectContansString='iStatus":1'>
        <parameter name="iUserID" value="45671" />
        <parameter name="sOldPassword" value="4e1cea91bcd58ab5982ab1b50c2a782b" />
        <parameter name="sNewPassword" value="a592ee46b591ba0c8bcce6a27c109f65" />
    </test> 
</case>                  
15. 一個UI自動化 Case實(shí)例:
public class TC_BaiDuSearch extends BaseCase {
   /**
    * 每一個ui自動化case都必須實(shí)現(xiàn)execute()方法男翰,此方法是此case的入口。
    * 編寫case時(shí)可以參考以下步驟:
    * 1纽乱,打開首頁或者一個鏈接或者自己定義的一個頁面:webDriver.get(String),new HomePage(sessionData).goToPage(),
    * 2蛾绎,設(shè)置這個case的描述信息:setDescription(String)
    * 3,執(zhí)行某些操作鸦列。
    * 4租冠,檢查預(yù)期值或者頁面元素并設(shè)置這個測試點(diǎn)測試通過或者測試失敗:setPointResult("", "", "pass", "NULL");
    * 5,有必要時(shí)可以截取當(dāng)前頁面的截屏:screenCapture()
    *
    * 對于第三步薯嗤,目前支持以下操作顽爹。
    * 1,查找頁面元素:findElement(By),findElementById(String),findElements(By).
    * 2应民,查找元素的值(也就是元素的value),findElvalue(By)
    * 3话原,點(diǎn)擊頁面元素:clickBy(By),clickById(String),clickByLinkText(String)
    * 4夕吻,判斷頁面元素是否存在:isExist(By)
    * 5诲锹,判斷文本是否存在:isTextExist(String)
    * 6,向諸如文本框之類的控件輸入值:sendKeysBy(By,String),sendKeysById(By,String)
    * 7涉馅,所有webdriver支持的操作归园。
    *
    * 更多更新信息請到 snappydata.top
    */
   public void execute() {
      //new HomePage(sessionData).goToPage();// 自定義一個頁面,所有case都可以共享這個頁面,直接在case中打開這個頁面稚矿。

      webDriver.get("http://www.baidu.com");//利用webdriver執(zhí)行打開頁面

      setDescription("測試百度搜索功能");// 設(shè)置case的描述信息
      
      if (isCurrentURL(hostName+"/")|| isCurrentURL(hostName )) {// 判斷當(dāng)前頁面是否是百度主頁

         setPointResult("GoToHome", "回到首頁", "pass", "NULL");//設(shè)置此測試點(diǎn)通過
      } else {
         setPointResult("GoToHome", "回到首頁", "fail","can not go to home page");//設(shè)置此測試點(diǎn)失敗
      }


      String path = screenCapture();// 截取當(dāng)前頁面截屏

      testSearch();//測試搜索功能

   }


   public void testSearch(){
      sendKeysById("kw","snappydata.top");
      clickById("su");
      if(isTextExist("snappydata")){
         setPointResult("測試搜索","測試搜索功能","pass","NULL");
      }else{
         setPointResult("測試搜索","測試搜索功能","fail","百度搜索測試失敗");
         screenCapture();// 截取當(dāng)前頁面截屏
      }

   }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庸诱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晤揣,更是在濱河造成了極大的恐慌桥爽,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昧识,死亡現(xiàn)場離奇詭異钠四,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)跪楞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門缀去,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人甸祭,你說我怎么就攤上這事缕碎。” “怎么了池户?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵咏雌,是天一觀的道長凡怎。 經(jīng)常有香客問我,道長处嫌,這世上最難降的妖魔是什么栅贴? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮熏迹,結(jié)果婚禮上檐薯,老公的妹妹穿的比我還像新娘。我一直安慰自己注暗,他們只是感情好坛缕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捆昏,像睡著了一般赚楚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骗卜,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天宠页,我揣著相機(jī)與錄音,去河邊找鬼寇仓。 笑死举户,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的遍烦。 我是一名探鬼主播俭嘁,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼服猪!你這毒婦竟也來了供填?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤罢猪,失蹤者是張志新(化名)和其女友劉穎近她,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膳帕,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粘捎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了备闲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晌端。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖恬砂,靈堂內(nèi)的尸體忽然破棺而出咧纠,到底是詐尸還是另有隱情,我是刑警寧澤泻骤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布漆羔,位于F島的核電站梧奢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏演痒。R本人自食惡果不足惜亲轨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸟顺。 院中可真熱鬧惦蚊,春花似錦、人聲如沸讯嫂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欧芽。三九已至莉掂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間千扔,已是汗流浹背憎妙。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留曲楚,地道東北人厘唾。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像洞渤,于是被迫代替她去往敵國和親阅嘶。 傳聞我的和親對象是個殘疾皇子属瓣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理载迄,服務(wù)發(fā)現(xiàn),斷路器抡蛙,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法护昧,類相關(guān)的語法,內(nèi)部類的語法粗截,繼承相關(guān)的語法惋耙,異常的語法,線程的語...
    子非魚_t_閱讀 31,625評論 18 399
  • 不懂畫畫的技巧熊昌,全憑感覺绽榛。打卡第二天。
    上米閱讀 268評論 2 7
  • 調(diào)用代碼 1.打電話@"tel://phone number"2.發(fā)短信@"sms://phone number"...
    lewiswon閱讀 310評論 0 0
  • 這些日子一直嚷嚷著要成為豁達(dá)的人,何為豁達(dá)昂利,或許只言片語并不能解釋清楚届腐,只是想成為自己希望的那種人铁坎,不會患得患失...
    不如神經(jīng)病閱讀 599評論 0 2