Keyword Framework (一)-- Java
阿新 • • 發佈:2018-12-10
Keyword Framework -- Java
目錄
簡介
關鍵詞驅動測試,又稱表驅動測試或基於動作詞的測試,是一種既適合手工測試又適合自動測試的軟體測試方法。這種方法將測試用例的文件——包括要使用的資料——與測試用例執行方式的規定分離開來。因此,它將測試建立過程分成兩個不同的階段:設計和開發階段,以及執行階段。關鍵詞驅動框架是一種功能自動化測試框架,也稱為表驅動測試或基於動作詞的測試。關鍵字驅動框架的基本工作是將測試用例劃分為四個不同的部分。第一步稱為測試步驟,第二步是測試步驟的物件,第三步是對測試物件的操作,第四步是測試物件的資料。
- 測試步驟:它是測試步驟的一個非常小的描述,或者是將要對測試物件執行的操作的描述。
- 測試物件:它是Web頁面物件/元素的名稱,如使用者名稱和密碼。
- 動作:是動作的名稱,動作將在任何物件上執行,如點選、開啟瀏覽器、輸入等。
- 測試資料:資料可以是物件執行任何操作所需的任何值,例如Username欄位的Username值
以下是完成框架執行所需的常用元件:
- Excel表格:這個表格儲存了測試用例、測試步驟、測試物件和操作等測試所需的關鍵字驅動的大部分資料。
- 物件儲存庫:屬性檔案用於儲存web應用程式的html元素屬性,該屬性檔案將與測試中的物件連結
- 關鍵字函式庫:在關鍵字驅動框架中,函式檔案起著重要的作用,因為它儲存了動作的工作,這樣每個動作都可以從這個檔案中呼叫
- 資料表:Excel檔案,用於儲存物件執行某些操作所需的資料值
- 執行引擎:Test是我們在關鍵字框架中唯一的測試指令碼,它包含了從Excel表格、函式庫和屬性檔案中驅動測試的所有程式碼。
優勢
- 較少的技術專業知識:一旦框架建立起來,手工測試人員或非技術測試人員可以很容易地為自動化編寫測試指令碼。
- 易於理解:由於它是在Excel表中維護的,並且沒有公開程式碼,所以測試指令碼易於閱讀和理解。關鍵字和操作與手工測試用例非常相似,因此更容易編寫和維護。
- 儘早開始:您可以在應用程式交付之前開始構建關鍵字驅動的測試用例,因為可以在後期輕鬆地設定物件儲存庫。使用從需求或其他文件中收集的資訊,可以建立與相應的手工測試過程相對應的關鍵字資料表
- 元件的可重用性:通過在關鍵字驅動下實現模組化,可以進一步提高元件的可重用性。
- 程式碼的可重用性:由於關鍵字驅動框架中只有一個執行引擎,可保證程式碼可重用性
搭建框架步驟
先決條件:
- Java環境
- IDEA工具
- selenium
executionEngine
- 首先建立一個maven的專案
- 建立
executionEngine
package,在該package下新建一個DriverScript
的Java 類
package executionEngine;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
public class DriverScript {
private static WebDriver driver = null;
public static void main(String[] args) {
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://www.store.demoqa.com");
driver.findElement(By.xpath(".//*[@id='account']/a")).click();
driver.findElement(By.id("log")).sendKeys("testuser_3");
driver.findElement(By.id("pwd")).sendKeys("[email protected]");
driver.findElement(By.id("login")).click();
driver.findElement (By.xpath(".//*[@id='account_logout']/a")).click();
driver.quit();
}
}
dataEngine
- 建立
dataEngine
package,在該package下新建一個DataEngine
的Excel檔案 - 開啟將Excel中的
sheet1
重新命名為TestCase
- 在TestCase表中建立以下幾列,像下圖一樣:
· TestCase ID
· TestScenario ID
· Description
· Action_Keyword
config
- 建立
config
package,在該package下新建一個ActionKeywords
的Java 類 - 程式碼如下:
package config;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class ActionKeywords {
public static WebDriver driver;
public static void openBrowser(){
driver=new ChromeDriver();
}
public static void navigate(){
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://www.store.demoqa.com");
}
public static void click_MyAccount(){
driver.findElement(By.xpath(".//*[@id='account']/a")).click();
}
public static void input_Username(){
driver.findElement(By.id("log")).sendKeys("testuser_3");
}
public static void input_Password(){
driver.findElement(By.id("pwd")).sendKeys("[email protected]");
}
public static void click_Login(){
driver.findElement(By.id("login")).click();
}
public static void waitFor() throws Exception{
Thread.sleep(5000);
}
public static void click_Logout(){
driver.findElement (By.xpath(".//*[@id='account_logout']/a")).click();
}
public static void closeBrowser(){
driver.quit();
}
public void test(){
System.out.println("test123");
}
}
utility庫
- 下載Apache POI的jar,將其加入到專案的引用庫中(具體怎麼加入jar包參考:這裡)
- 建立
utility
package,在該package下新建一個ExcelUtils
的Java類 - 程式碼如下:
package utility;
import java.io.FileInputStream;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelUtils {
private static XSSFSheet ExcelWSheet;
private static XSSFWorkbook ExcelWBook;
private static XSSFCell Cell;
//This method is to set the File path and to open the Excel file
//Pass Excel Path and SheetName as Arguments to this method
public static void setExcelFile(String Path,String SheetName) throws Exception {
FileInputStream ExcelFile = new FileInputStream(Path);
ExcelWBook = new XSSFWorkbook(ExcelFile);
ExcelWSheet = ExcelWBook.getSheet(SheetName);
}
//This method is to read the test data from the Excel cell
//In this we are passing parameters/arguments as Row Num and Col Num
public static String getCellData(int RowNum, int ColNum) throws Exception{
Cell = ExcelWSheet.getRow(RowNum).getCell(ColNum);
String CellData = Cell.getStringCellValue();
return CellData;
}
}
- 更新
DriverScript
中的程式碼如下:
package executionEngine;
import java.util.concurrent.TimeUnit;
import config.ActionKeywords;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import utility.ExcelUtils;
public class DriverScript {
private static WebDriver driver = null;
public static void main(String[] args) throws Exception {
// Declaring the path of the Excel file with the name of the Excel file
String sPath = "src\\test\\java\\dataEngine\\DataEngine.xlsx";
// Here we are passing the Excel path and SheetName as arguments to connect with Excel file
ExcelUtils.setExcelFile(sPath, "TestCase");
//Hard coded values are used for Excel row & columns for now
//In later chapters we will replace these hard coded values with varibales
//This is the loop for reading the values of the column 3 (Action Keyword) row by row
for (int iRow=1;iRow<=9;iRow++){
//Storing the value of excel cell in sActionKeyword string variable
String sActionKeyword = ExcelUtils.getCellData(iRow, 3);
//Comparing the value of Excel cell with all the project keywords
if(sActionKeyword.equals("openBrowser")){
//This will execute if the excel cell value is 'openBrowser'
//Action Keyword is called here to perform action
ActionKeywords.openBrowser();}
else if(sActionKeyword.equals("navigate")){
ActionKeywords.navigate();}
else if(sActionKeyword.equals("click_MyAccount")){
ActionKeywords.click_MyAccount();}
else if(sActionKeyword.equals("input_Username")){
ActionKeywords.input_Username();}
else if(sActionKeyword.equals("input_Password")){
ActionKeywords.input_Password();}
else if(sActionKeyword.equals("click_Login")){
ActionKeywords.click_Login();}
else if(sActionKeyword.equals("waitFor")){
ActionKeywords.waitFor();}
else if(sActionKeyword.equals("click_Logout")){
ActionKeywords.click_Logout();}
else if(sActionKeyword.equals("closeBrowser")){
ActionKeywords.closeBrowser();}
}
}
}
最終的目錄結構如下圖:
總結
至此,我們的初始搭建的框架已經完成,但是隻是草稿版,還需要很多的優化,使其更加的高效、健壯,在以下的章節中會介紹加強版的。
後續要做
- 利用Java的對映類重寫
DriverScript
- 設定常量檔案
- 建立物件庫
- logging
- 異常處理
- 報告