歡迎查閱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)境配置
- JDK1.7以上
- Eclipse/IDEA
- Selenium
- Mozilla Firefox
- Google Chrome
- Geckodriver
- ChromeDriver
- Maven
- Git
- Ant
- Jenkins
- 部分網(wǎng)站需要翻墻,具體安裝參考:https://blog.csdn.net/huilan_same/article/details/52615123
- 建議Selenium版本對(duì)應(yīng)Firefox丨Chrome(2.53.0丨47.0.2丨65.0.3325.146)
- Python環(huán)境下需要下載Geckodriver和ChromeDriver伏钠,且版本需對(duì)應(yīng)侮邀,具體安裝參考:https://blog.csdn.net/huilan_same/article/details/51896672
注意事項(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一致制恍,表示是該用例的截圖
- 具體腳本編方法請(qǐng)參考: https://pan.baidu.com/s/1fdMMGrr9XY6lJdXCv-1AYw
三父能、火狐瀏覽器服務(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