webUI自動化測試框架(四):程式碼分層-操作層及用例層
前面將基礎打好了,接下來就是具體的使用了,業務層主要是頁面中的各種業務操作,如登入,修改使用者資訊等,我們把這些操作都封裝在業務類中,如登入操作,我們把它封裝成一個類,登入的大致流程為開啟登入頁,輸入使用者名稱密碼,點選登入按鈕,這樣一個完整的登入業務就算完成了。
那為什麼不直接寫在測試類中呢,這樣是為了將業務操作與測試用例分離,因為多個用例可能是對應一個業務操作的,這樣,我業務程式碼是不用動的,只需要修改用例就好了,這樣也是為了程式碼的可讀性,重用性和易維護性。
如下,進入正題:
先看程式碼分層:
1.業務層:登入類Login:
package com.etyero.action; import org.openqa.selenium.WebDriver; import com.etyero.object.BasePage; public class Login { private WebDriver driver; private BasePage loginPage; public Login(WebDriver driver) { this.driver = driver; } // 登入操作 public void login(String username, String pwd) throws Exception { loginPage = new BasePage(driver, "loginPage");//這裡的pageName要對應page.xml檔案中的page標籤值 loginPage.sendKey("登入輸入賬號框", username);//登入輸入賬號框對應的是page.xml中設定的元素名稱 loginPage.sendKey("登入輸入密碼框", pwd); loginPage.click("登入"); } }
2.用例層,也是實際的測試指令碼,呼叫業務層中的各項業務操作並斷言結果是否符合預期.
登入測試類:LoginTest
package com.etyero.testcase; import org.openqa.selenium.WebDriver; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Listeners; import org.testng.annotations.Parameters; import org.testng.annotations.Test; import com.etyero.action.Login; import com.etyero.object.BasePage; import com.etyero.utils.BrowserUtil; import com.etyero.utils.TestNGListener; @Listeners({TestNGListener.class}) public class LoginTest { private WebDriver driver; private Login login; @DataProvider(name = "loginParams") public Object[][] loginParams(){ return new Object[][]{{"li","1111","使用者名稱或密碼錯誤"},{"li","","請輸入登入密碼!"},{"","123456","請輸入登入賬戶!"}}; } @BeforeClass @Parameters({"browserDriverUrl","url"}) public void beforeClass(String browserDriverUrl,String url) { driver = BrowserUtil.chrome(browserDriverUrl,30); //在記憶體中執行,不用啟用瀏覽器,使用該方法無法使用截圖功能 //driver = new HtmlUnitDriver(); driver.get(url); } @BeforeMethod public void BeforeMethod(){ login = new Login(driver); TestNGListener.setDriver(driver); } @Test(dataProvider = "loginParams",description = "異常使用者資訊登入") public void login02(String username,String pwd,String expectedTip) throws Exception{ login.login(username, pwd); String tip = new BasePage(driver, "loginPage").getText("錯誤提示"); Assert.assertEquals(tip, expectedTip); } @Test(dependsOnMethods = "login02",description = "正常使用者登入") @Parameters({ "username", "pwd" }) public void login(String username,String pwd) throws Exception { login.login(username, pwd); String tip = new BasePage(driver, "mainPage").getText("客服熱線"); Assert.assertEquals(tip, "客服熱線:0755-2309674"); } @AfterClass public void afterClass() { } @AfterTest public void afterTest(){ driver.quit(); } }
testNG配置檔案:.xml。這裡我用到了testNG的兩種引數化方式,1.在測試類中通過註解@DataProvider定義測試引數;2.通過xml檔案parameter標籤定義測試引數,關於testNG教程,有興趣的童鞋可以看筆者的另一篇部落格:http://blog.csdn.net/u010798968/article/details/73549612
<?xml version="1.0" encoding="UTF-8"?> <suite name="Suite2"> <parameter name="username" value="li" /> <parameter name="pwd" value="123456" /> <parameter name="browserDriverUrl" value="D:\work\workplace\webUITest\browserDriver\chromedriver.exe"/> <parameter name="url" value="http://XXXXX/login.html"/> <test name="test"> <classes> <class name="com.etyero.testcase.LoginTest"/> </classes> </test> </suite>
以上,從第二章到此章,程式碼方面的內容基本講完了,當然筆者這樣寫也許不是最好的,有啥想法和建議歡迎討論交流,共同進步,我的資料中有我的各種聯絡方式,歡迎騷擾。下一章,持續整合和測試報告輸出,敬請期待。
相關推薦
webUI自動化測試框架(四):程式碼分層-操作層及用例層
前面將基礎打好了,接下來就是具體的使用了,業務層主要是頁面中的各種業務操作,如登入,修改使用者資訊等,我們把這些操作都封裝在業務類中,如登入操作,我們把它封裝成一個類,登入的大致流程為開啟登入頁,輸入使用者名稱密碼,點選登入按鈕,這樣一個完整的登入業務就算完成了。 那為什麼
webUI自動化測試框架(三):程式碼分層-物件庫層
前言:做UI自動化,不可避免的要和頁面上的元素打交道,有的童鞋可能會選擇把頁面元素的定位,操作都寫在測試程式碼中,當頁面元素比較少,測試程式碼比較少的情況下還好,但是一旦頁面元素多起來(實際運用中也不太可能少),測試程式碼一多,就難以閱讀和維護了,因為元素定位的程式碼並不能
webUI自動化測試框架(二):程式碼分層-基礎層
前言:該webUI自動化框架主要分為四層:基礎層、物件層、操作層、用例層,每一層負責各自的功能,這樣有益於提高程式碼的可讀性,複用性和擴充套件性。基礎層主要封裝了一些工具類,如解析xml檔案,讀取excel,分瀏覽器啟動,時間處理等,供其他類呼叫。 另外,筆者這邊主要使用的
webUI自動化測試框架(一):簡介和Demo入門
前言:selenium和webdriver是目前主流的ui自動化測試框架之一,selenium又稱為selenium RC,基本原理為js注入,而webdriver是直接利用了瀏覽器的native support(廠商支援)來操作瀏覽器,所以,對於不同瀏覽器,必須依賴一個特
UI層自動化測試框架(二):Appium基礎
申明:本章節引用很多第三方資料和網上的教程,在參考資料tab中我都有備註,請理解。 由於該框架是基於Appium的,所以先講講appium的基礎知識 一:Appium介紹 Appium是由nodejs的express框架寫的Http Server
初識gauge自動化測試框架(二)
numbers 引用 文件中 自動化測試 文件描述 tor 興趣 測試 你是 看到一些同學對該工具有點一興趣,那麽我將繼續介紹Gauge自動化測試工具。 Gauge本質上一個BDD(Behavior Driven Development)測試框架。所以,首先你要了解BDD的
scrapy爬蟲框架(四):scrapy中 yield使用詳解
開始前的準備工作: MySQL下載:點我 python MySQL驅動下載:pymysql(pyMySql,直接用pip方式安裝) 全部安裝好之後,我們來熟悉一下pymysql模組 import pymysql #建立連結物件 connection = pymysql
[翻譯]pytest測試框架(二):使用
此文已由作者吳琪惠授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 呼叫pytest 呼叫命令: python -m pytest [...] 上面的命令相當於在命令列直接呼叫指令碼 pytest [...](前提是python已經加入環境變數) 一些幫
pytest+allure自動化測試框架(一)
pytest是Python最流程的單測框架之一。 在本文中,我們將會介紹pytest的特點,功能和使用。 Demo 安裝Python依賴庫:pip3 install pytestpip3 install pytest-allure-adapto 檔案目錄: 三個pytest測試指令碼
RobotFramework自動化測試框架(1)- RobotFramework簡介
對於RobotFramework自動化測試框架,我這裡會從三個單元進行闡述,希望能對你有幫助。 RobotFramework簡介 RobotFramework是什麼? Robotframework 是由python編寫的,一個開源的基於關鍵詞驅動的自動化測試框架,它可以做基於UI或者介面
RobotFramework自動化測試框架(2)- RobotFramework語法
RobotFramework測試用例是由四部分組成的,下面就從這四個部分簡單介紹語法: 關鍵字表 *** Keywords *** 設定表 *** Settings *** 變量表 *** Variables *** 測試用例表 *** Testcases ***
Java類集框架(四):集合輸出
集合輸出的4種形式:Iterator輸出、ListIterator輸出、foreach(加強型for迴圈)輸出、Enumeration輸出。 迭代輸出:Iterator Iterator(迭代器)是集合輸出操作的一個介面,Collection介面中提供了直接為Iterator介面例項
談談單元測試之(四):測試工具 TestNG
前言 上一篇文章《測試工具 JUnit 4》中提到了 JUnit 4,並對 JUnit 4 做了簡單的討論,這篇文章我們將要圍繞另一款測試工具討論 —— TestNG。其實,這篇文章應該寫在《測試工具 JUnit 3》之後,和《測試工具 JU
Android自動化測試初探(四): 模擬鍵盤滑鼠事件(Socket+Instrumentation實現)
通過Socket + Instrumentation實現模擬鍵盤滑鼠事件主要通過以下三個部分組成: * Socket程式設計:實現PC和Emulator通訊,並進行迴圈監聽 * Service服務:將Socket的監聽程式放在Service中,從而達到
Robot Framework自動化測試框架(一)
最近看到同學發了一篇RobotFramework自動化測試框架的文章,感覺已經很久沒有主動或被動接觸到其他的測試框架(感覺過了一萬年),遂抽了點時間瞭解了下這個東東。自動化測試大體思路類似,因此本文僅作簡單介紹。一、動手實踐動手實踐來源於:http://www.cnblogs
gulp前端自動化構建工具(四):gulp檔案路徑處理模組
本篇前言 上一篇介紹了本工具的獨立配置檔案,歡迎閱讀 本篇還是先把gulpfile.js執行所用的一個方法模組展示出來,模組主要接收gulp.src()中檔案物件,對檔案自身所在的物理路徑及其內部資源引用的路徑進行處理,程式碼中我有做詳細的註釋,包括方法的單獨作用演示。 本
MyEclipse整合SSM框架(二):Mybatis逆向工程配置以及dao層增刪改查測試
說明:專案工程採用 maven 管理,maven 工程的建立參見: https://blog.csdn.net/weixin_38533896/article/details/797
MyEclipse整合SSM框架(四):整合前端頁面,通過ajax請求獲得資料
Spring+SpringMVC+Mybatis 框架已經搭建完成,其中包括:(1)maven工程的搭建 (2)框架所需要的配置檔案的配置 (3)Mybatis 建立逆向工程連結資料庫。相應的配置檔案參見前幾篇部落格。此篇整理前端頁面傳送ajax 請求到後端,後端通過 Myb
Python 單元測試框架系列:聊聊 Python 的單元測試框架(一):unittest
作者:HelloGitHub-Prodesire HelloGitHub 的《講解開源專案》系列,專案地址:https://github.com/HelloGitHub-Team/Article 前言 說到 Python 的單元測試框架,想必接觸過 Python 的朋友腦袋裡第一個想到的就是
聊聊 Python 的單元測試框架(二):nose 和它的繼任者 nose2
作者:HelloGitHub-Prodesire HelloGitHub 的《講解開源專案》系列,專案地址:https://github.com/HelloGitHub-Team/Article 一、nose nose 是一個第三方單元測試框架,它完全相容 unittest,並且號稱是一個更好