1. 程式人生 > >webUI自動化測試框架(四):程式碼分層-操作層及用例層

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,並且號稱是一個更好