Web自動(dòng)化解決方案 [開源項(xiàng)目]基于Selenium的Web自動(dòng)化測試框架完美版

歡迎查閱Selenium(Web自動(dòng)化測試框架體系)


Selenium

Selenium是一個(gè)用于Web應(yīng)用程序的自動(dòng)化測試工具漫玄,直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣
    ?  支持的瀏覽器包括IE、Mozilla Firefox觉壶、Google Chrome等
    ?  支持多種語言瘤运,如Java株扛、C#缨睡、Python搔弄、Ruby颁褂、PHP等
    ?  跨平臺(tái)故响,如Windows、Linux颁独、iOS彩届、Andriod等
    ?  開源免費(fèi)

源碼地址:

?Gitee地址:https://gitee.com/hagyao520/Selenium.git
?GitHub地址:https://github.com/hagyao520/Selenium.git

框架介紹

Java + Selenium + Maven + TestNG + JDBC + Xml+ Git + +Ant + Jenkins 
    ?  使用Java作為項(xiàng)目編程語言
    ?  使用Selenium作為Web項(xiàng)目底層服務(wù)驅(qū)動(dòng)框架
    ?  使用Maven作為項(xiàng)目類型,方便管理架包
    ?  使用TestNG作為項(xiàng)目運(yùn)行框架誓酒,方便執(zhí)行測試用例樟蠕,生成測試報(bào)告
    ?  使用JDBC作為數(shù)據(jù)庫管理工具,方便連接數(shù)據(jù)庫靠柑,執(zhí)行SQL
    ?  使用Xml作為用例管理工具寨辩,方便編寫測試用例,維護(hù)測試腳本
    ?  使用Git作為倉庫管理工具歼冰,方便管理項(xiàng)目代碼
    ?  使用Ant作為Java的build打包工具靡狞,方便項(xiàng)目代碼打包
    ?  使用Jenkins作為自動(dòng)化持續(xù)集成平臺(tái),方便自動(dòng)編譯隔嫡,自動(dòng)打包甸怕,自動(dòng)運(yùn)行測試腳本甘穿,郵件發(fā)送測試報(bào)告

主要功能

1.  實(shí)現(xiàn)了基于Selenium,WebDriver等常用操作方法的二次封裝梢杭,包括(滑動(dòng)温兼,點(diǎn)擊,輸入武契,元素定位)等募判,使用起來更簡便
2.  實(shí)現(xiàn)了基于Windows操作系統(tǒng)的cmd常用DOS命令的快速調(diào)用
3.  實(shí)現(xiàn)了基于Windows操作系統(tǒng)等鍵盤按鍵功能的調(diào)用,可模擬實(shí)際的鍵盤操作
4.  實(shí)現(xiàn)了基于Selenium的斷言功能咒唆,檢查點(diǎn)失敗自動(dòng)截圖保存届垫,可在測試報(bào)告中查看,一個(gè)檢查點(diǎn)失敗不影響后續(xù)用例執(zhí)行
5.  實(shí)現(xiàn)了基于Xml文件內(nèi)容的基本解析全释,包括(Unit敦腔,Case,Step)等恨溜,基本內(nèi)容符合測試用例編寫步驟符衔,編寫測試用例腳本更簡單
6.  實(shí)現(xiàn)的基于Oracle,MySql等常用數(shù)據(jù)庫SQL操作糟袁,包含(Insert into判族,Delete,Update项戴,Query)和執(zhí)行"存儲(chǔ)過程"操作等
7.  實(shí)現(xiàn)了基于Oracle形帮,MySql等常用數(shù)據(jù)庫數(shù)據(jù)檢查功能,獲取數(shù)據(jù)庫字段值周叮,保存到本地緩存辩撑,然后進(jìn)行比對(duì)效驗(yàn),需使用正則表達(dá)式
8.  實(shí)現(xiàn)了快速獲取界面信息數(shù)據(jù)到本地緩存功能仿耽,獲取當(dāng)前界面上的數(shù)據(jù)合冀,保存到本地緩存,可用作測試用例參數(shù)使用项贺,需使用正則表達(dá)式
9.  實(shí)現(xiàn)了常用API接口請(qǐng)求操作君躺,包含(POST,GET)等开缎,可直接在測試腳本中調(diào)用棕叫,只需傳遞對(duì)應(yīng)參數(shù)即可,滿足多種測試需求
10. 實(shí)現(xiàn)了基于ExtentReports奕删,TestNG生成的測試報(bào)告二次美化功能俺泣,界面更美觀,內(nèi)容清晰

環(huán)境配置

  1. JDK1.7以上
  2. Eclipse/IDEA
  3. Selenium
  4. Mozilla Firefox
  5. Google Chrome
  6. Geckodriver
  7. ChromeDriver
  8. Maven
  9. Git
  10. Ant
  11. Jenkins

注意事項(xiàng)

  • 工程項(xiàng)目編碼需要設(shè)置成UTF-8,否則會(huì)出現(xiàn)中文亂碼情況

一贝润、創(chuàng)建測試對(duì)象類,例如【GiteeLogin.java】

package TestCases;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import com.jmoney.xiyuyou.base.TestUnit;
import com.jmoney.xiyuyou.service.RunUnitService;
import com.jmoney.xiyuyou.service.WebXmlParseService;

public class GiteeLogin {

    private static RunUnitService runService;

    @BeforeTest
    private void stup() throws Exception{
            TestUnit testunit = WebXmlParseService.parse("src/test/java/TestCaseXml/GiteeLogin.xml");
            runService = new RunUnitService(testunit);
            System.out.println("-----------------------------【碼云自動(dòng)登錄流程】--------------------------------");
    }

    @Test
    public void case1() throws Exception{
            runService.runCase("case1");
            runService.TestReportRemarks("驗(yàn)證在火狐瀏覽器中铝宵,輸入Gitee域名后打掘,可以正常訪問");
    }

    @Test
     public void case2() throws Exception{
            runService.runCase("case2");
            runService.TestReportRemarks("驗(yàn)證在登錄界面,輸入正確的賬號(hào)和密碼鹏秋,點(diǎn)擊登錄按鈕后尊蚁,可以正常登錄成功");
    }

    @AfterTest
    public void TearDown(){
             runService.closeBrowser();
    }
}

二、創(chuàng)建測試腳本用例侣夷,例如【GiteeLogin.xml】

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<unit id="GiteeLogin" desc="碼云自動(dòng)登錄流程的測試場景點(diǎn)">
   <case 
     id="case1" 
     name="驗(yàn)證在火狐瀏覽器中横朋,輸入Gitee域名后,可以正常訪問">
    <step action="web-geturl" value="https://gitee.com" desc="訪問Gitee網(wǎng)站域名"/>
    <step action="web-check" locator="xpath=.//*[@id='git-nav-user-bar']/a[2]" expect="登錄" message="訪問失敗(實(shí)際結(jié)果和預(yù)期結(jié)果不一致)" caseid="Case1" desc="檢查在火狐瀏覽器中百拓,輸入Gitee域名后琴锭,是否可以正常訪問"/>
   </case>

   <case 
     id="case2" 
     name="驗(yàn)證在登錄界面,輸入正確的賬號(hào)和密碼衙传,點(diǎn)擊登錄按鈕后决帖,可以正常登錄成功">
    <step action="web-click" locator="xpath=.//*[@id='git-nav-user-bar']/a[2]" desc="點(diǎn)擊登錄按鈕"/>
    <step action="web-input" locator="xpath=.//*[@id='user_login']" value="XXXXXX" desc="輸入正確的賬號(hào)"/>  
    <step action="wait-forced" value="1000" desc="強(qiáng)制等待1秒"/>
    <step action="web-input" locator="xpath=.//*[@id='user_password']" value="XXXXXX" desc="輸入正確的密碼"/>
    <step action="wait-forced" value="1000" desc="強(qiáng)制等待1秒"/>
    <step action="web-click" locator="xpath=.//*[@id='new_user']/div[2]/div[7]/input" desc="點(diǎn)擊登錄按鈕"/>
    <step action="web-implicit" value="5000" desc="隱性等待5秒"/>
    <step action="web-click" locator="xpath=.//*[@id='git-nav-user']" desc="點(diǎn)擊頭像區(qū)域"/>
    <step action="web-check" locator="xpath=.//*[@id='git-nav-user']/div/a[1]" expect="個(gè)人主頁" message="登錄失敗(實(shí)際結(jié)果和預(yù)期結(jié)果不一致)" caseid="Case2" desc="檢查在登錄界面,輸入正確的賬號(hào)和密碼蓖捶,點(diǎn)擊登錄按鈕后地回,是否可以正常登錄成功"/>
  </case>
</unit>

以上只是單個(gè)案例,賬戶和密碼請(qǐng)用自己的真實(shí)數(shù)據(jù)俊鱼,是不是很簡單刻像,和寫測試用例基本一致
   <unit>到</unit>之間的內(nèi)容為測試腳本集合,相當(dāng)與測試用例集合并闲,搭配測試類使用(WeChatLogin.java)
   <case>到</case>之間的內(nèi)容為單個(gè)測試腳本细睡,相當(dāng)與單個(gè)測試用例,id對(duì)應(yīng)測試用例中的序號(hào)帝火,name對(duì)應(yīng)測試用例中的標(biāo)題纹冤,注意這里的id需要和測試類(WeChatLogin.java)中的一致
   <step>到</step>之間的內(nèi)容為測試腳本步驟,相當(dāng)與測試用例操作步驟购公,action=要執(zhí)行的操作萌京,locator=元素的坐標(biāo)屬性及值,value=需要傳遞的參數(shù)宏浩,desc=該步驟的備注知残,會(huì)打印到控制臺(tái),expect=預(yù)期結(jié)果比庄,message=測試執(zhí)行失敗的提示信息求妹,會(huì)展示到測試報(bào)告中乏盐,caseid=測試用例失敗截圖的名稱,一般和Caseid一致制恍,表示是該用例的截圖

三父能、火狐瀏覽器服務(wù)配置

public static void AppointFirefoxDriver() throws Exception {
      File file = new File(ConfigUtil.getProperty("webdriver.profile", Constants.CONFIG_COMMON));
      FirefoxProfile profile = new FirefoxProfile(file);        
      driver = new FirefoxDriver(profile);
      driver .manage().window().maximize();//全屏
}

# 瀏覽器
webdriver.firefox.bin=C:\\Program Files\\Mozilla Firefox\\firefox.exe

# 瀏覽器配置文件
webdriver.profile=C:\\Users\\King-liu\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\f7ps027y.default
  • 測試執(zhí)行時(shí)需要在common.properties文件中,指定瀏覽器和瀏覽器配置文件净神,當(dāng)前為火狐瀏覽器安裝路徑何吝,和火狐瀏覽器配置文件路徑

四、執(zhí)行用例

  • 編寫完對(duì)應(yīng)測試用例類【GiteeLogin.java】鹃唯,和測試腳本【GiteeLogin.xml】后爱榕,在IDE集成開發(fā)環(huán)境下選擇GiteeLogin.java右鍵使用TestNG運(yùn)行即可


五、測試報(bào)告

  • 測試報(bào)告分為兩種坡慌,一種是TestNG自帶的TestngReport測試報(bào)告黔酥,另外一種則是調(diào)用ExtentReports生成的報(bào)告,第二種更加美觀

TestngReport

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Selenium測試報(bào)告" parallel="false" configfailurepolicy ="continue">
    <test name="碼云自動(dòng)登錄流程" junit="false" verbose="3" parallel="false" thread-count="5" annotations="javadoc" time-out="60000" enabled="true" skipfailedinvocationcounts="true" preserve-order="true" allow-return-values="true">
        <classes>
            <class name="TestCases.GiteeLogin"/>
                <methods>
                    <include name="case1" />
                    <include name="case2" />
                    <exclude name="" />
                </methods>
        </classes>
    </test>  
 ------------------------------------------------------------------------------------------------------
<!-- 調(diào)用的監(jiān)聽 -->    
    <listeners>
        <listener class-name="org.uncommons.reportng.HTMLReporter" />
        <listener class-name="org.uncommons.reportng.JUnitXMLReporter" />
    </listeners>      
</suite>

ExtentReports

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" verbose="1" preserve-order="true" parallel="false">
    <suite-files>
        <suite-file path="TestngReport.xml"></suite-file>
    </suite-files>
    <listeners>
        <listener class-name="com.jmoney.xiyuyou.service.ExtentReportGenerateService"></listener>
    </listeners> 
    <!-- C:\Windows\System32\drivers\etc
    151.139.237.11    cdn.rawgit.com -->
</suite>
  • 第二種測種試報(bào)告洪橘,需要翻墻才能正常顯示跪者,否則頁面顯示亂碼,因?yàn)槭菄獾臇|西
  • 或者在C:\Windows\System32\drivers\etc host文件末尾添加151.139.237.11 cdn.rawgit.com



六熄求、感謝

如果您覺得這個(gè)框架不錯(cuò)坑夯,您可以捐贈(zèng)下我,讓我有理由繼續(xù)下去抡四。

非常感謝您花費(fèi)時(shí)間閱讀柜蜈,祝您在這里記錄、閱讀指巡、分享愉快淑履!
歡迎留言評(píng)論,有問題也可以聯(lián)系我或者加群交流....

作者:@劉智King
QQ:1306086303
QQ群:126325132
Email:hagyao520@163.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末藻雪,一起剝皮案震驚了整個(gè)濱河市秘噪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勉耀,老刑警劉巖指煎,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異便斥,居然都是意外死亡至壤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門枢纠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來像街,“玉大人,你說我怎么就攤上這事×铮” “怎么了脓斩?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長畴栖。 經(jīng)常有香客問我随静,道長,這世上最難降的妖魔是什么吗讶? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任燎猛,我火速辦了婚禮,結(jié)果婚禮上关翎,老公的妹妹穿的比我還像新娘。我一直安慰自己鸠信,他們只是感情好纵寝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著星立,像睡著了一般爽茴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绰垂,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天室奏,我揣著相機(jī)與錄音,去河邊找鬼劲装。 笑死胧沫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的占业。 我是一名探鬼主播绒怨,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼谦疾!你這毒婦竟也來了南蹂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤念恍,失蹤者是張志新(化名)和其女友劉穎六剥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體峰伙,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疗疟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瞳氓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秃嗜。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锅锨,到底是詐尸還是另有隱情叽赊,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布必搞,位于F島的核電站必指,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏恕洲。R本人自食惡果不足惜塔橡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望霜第。 院中可真熱鬧葛家,春花似錦、人聲如沸泌类。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刃榨。三九已至弹砚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枢希,已是汗流浹背桌吃。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苞轿,地道東北人茅诱。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像搬卒,于是被迫代替她去往敵國和親让簿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351