<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          數(shù)據(jù)驅(qū)動框架(Apache POI – Excel)

          共 6473字,需瀏覽 13分鐘

           ·

          2020-12-03 13:38




          你是否難以維護應(yīng)用程序的大量測試用例?測試數(shù)據(jù)是否分散在各種測試腳本中?您是否必須為每個測試環(huán)境維護單獨的測試腳本,然后在測試數(shù)據(jù)中一個值發(fā)生更改的情況下在所有腳本中進行搜索?這很費時間,很費力,不是嗎?我們都希望測試用例是一致的,并以統(tǒng)一的方式編寫,遵循一組規(guī)則,例如我們有交通規(guī)則,并且每個人在路上都嘗試遵循相同的規(guī)則。這就是數(shù)據(jù)驅(qū)動框架起作用的地方。

          01. 什么是自動化框架?


          自動化測試框架是用于創(chuàng)建和設(shè)計測試用例的一組準(zhǔn)則規(guī)則。該準(zhǔn)則包括編碼標(biāo)準(zhǔn)對象存儲庫測試數(shù)據(jù)處理方法存儲測試結(jié)果的過程或有關(guān)如何訪問外部資源的任何其他信息。

          測試人員可以始終在沒有框架的情況下編寫測試,這不是必需的步驟,但是使用組織化的框架還可以帶來其他好處,例如增加代碼重用更高的可移植性降低的腳本維護成本以及更高的代碼可讀性。它還可以幫助團隊以標(biāo)準(zhǔn)格式寫下測試腳本。使用自動化測試框架,可以高效地設(shè)計和開發(fā)自動化測試腳本,并確保可靠地分析受測系統(tǒng)或應(yīng)用程序的問題或錯誤。以下部分列出了一些重要的優(yōu)點,這些優(yōu)點證明了對自動化測試框架的需求是合理的:


          02. 為什么我們需要一個自動化測試框架?

          使用自動化測試框架非常重要,因為它可以提高自動化測試團隊的效率和測試開發(fā)速度。使用自動化框架的一些好處如下:

          • 所有測試的標(biāo)準(zhǔn)格式

          • 提高測試效率

          • 降低腳本維護成本

          • 最大測試范圍

          • 代碼的可重用性

          • 高效的測試數(shù)據(jù)管理


          03. Selenium中有哪些不同類型的自動化框架?

          使用Selenium WebDriver測試應(yīng)用程序時,可以使用三種主要類型的框架為任何Web應(yīng)用程序創(chuàng)建自動化測試:






          數(shù)據(jù)驅(qū)動測試框架。

          關(guān)鍵字驅(qū)動的測試框架。

          混合測試框架。

          這些框架中的每一個都有其自己的體系結(jié)構(gòu)以及不同的優(yōu)缺點。在制定測試計劃時,重要的是要選擇適合您的框架。

          數(shù)據(jù)驅(qū)動測試框架 用于將測試腳本與測試數(shù)據(jù)分開。您可以使用多組數(shù)據(jù)測試同一腳本。我們將在以下主題中詳細討論此框架。

          關(guān)鍵字驅(qū)動測試框架 是數(shù)據(jù)驅(qū)動框架的擴展。它允許在測試腳本外部將一組稱為“關(guān)鍵字”的代碼存儲在單獨的代碼文件中。我們可以在多個測試腳本中重復(fù)使用這些關(guān)鍵字。

          混合驅(qū)動框架數(shù)據(jù)驅(qū)動框架和關(guān)鍵字驅(qū)動框架的組合。在這里,關(guān)鍵字以及測試數(shù)據(jù)都是外部的。我們在單獨的文件中維護關(guān)鍵字,并在excel文件或CSV文件或數(shù)據(jù)庫中測試數(shù)據(jù)。

          在本文中,讓我們深入研究數(shù)據(jù)驅(qū)動測試框架。


          04. 什么是數(shù)據(jù)驅(qū)動框架?


          通常,當(dāng)我們手動測試應(yīng)用程序時,我們針對多個測試數(shù)據(jù)運行相同的方案。此外,我們將相同的測試數(shù)據(jù)保存在某些文件中,例如Excel文件,文本文件,CSV文件或任何數(shù)據(jù)庫。自動化也是如此,我們希望對多個測試數(shù)據(jù)運行相同的測試方案。假設(shè)您已經(jīng)寫了一個自動化腳本來填寫

          ToolsQA Demo網(wǎng)站

          上的學(xué)生注冊表格。可能有很多學(xué)生要注冊,唯一區(qū)別在于代碼的是輸入值(姓名,地址,電話,性別等)。您會為每個學(xué)生注冊一個單獨的腳本嗎?有沒有辦法,我們可以重用代碼并僅更改學(xué)生數(shù)據(jù)?

          是的,這是數(shù)據(jù)驅(qū)動框架發(fā)揮作用的地方,它可以使測試腳本針對不同的測試數(shù)據(jù)集正常工作。這樣可以節(jié)省編寫其他代碼的時間。這就像一次編寫并多次運行的機制一樣,因為您可以多次運行相同的Selenium腳本

          簡而言之,當(dāng)我們必須使用多組測試數(shù)據(jù)執(zhí)行相同的腳本時,就使用數(shù)據(jù)驅(qū)動框架,這些測試數(shù)據(jù)的存儲位于不同的位置,并且不在測試腳本內(nèi)。對數(shù)據(jù)所做的任何更改都不會影響測試代碼。








          05. 使用數(shù)據(jù)驅(qū)動測試框架有什么好處?

          以下是質(zhì)量保證人員在使用數(shù)據(jù)驅(qū)動技術(shù)開發(fā)自動化框架時可以從中獲得的一些主要好處:

          無需修改代碼即可修改測試用例。

          它允許使用多組數(shù)據(jù)值測試應(yīng)用程序,尤其是在回歸測試期間。

          它幫助我們從測試數(shù)據(jù)中分離出測試用例/腳本的邏輯。

          該測試最常用的數(shù)據(jù)源之一是Microsoft Excel Sheets。我們可以將數(shù)據(jù)保留在excel工作表中,并在測試腳本中使用它們。讓我們看看如何通過從Excel文件讀取測試數(shù)據(jù)來創(chuàng)建數(shù)據(jù)驅(qū)動的UI自動化框架。


          如何使用Apache POI在Selenium中創(chuàng)建數(shù)據(jù)驅(qū)動框架?

          從Selenium中的Excel中

          讀取和寫入數(shù)據(jù)”中學(xué)到了如何使用Apache POIExcel文件中讀取和寫入數(shù)據(jù),然后將與測試數(shù)據(jù)相同的數(shù)據(jù)集傳遞給Selenium測試。但是在該腳本中,從Excel文件讀取數(shù)據(jù),將數(shù)據(jù)寫入Excel文件,將數(shù)據(jù)傳遞給Selenium操作的所有動作都發(fā)生在該類的main方法中。如果我們僅編寫一個或兩個測試用例,則該格式是可以接受的。但是,當(dāng)我們必須開發(fā)一個具有多個測試方案的自動化框架時,它應(yīng)該適當(dāng)?shù)亟M織并且應(yīng)該具有定義的文件夾層次結(jié)構(gòu)。

          數(shù)據(jù)驅(qū)動測試框架的基本經(jīng)驗法則是將測試數(shù)據(jù)與測試腳本分開。此外,從文件讀取/寫入數(shù)據(jù)的操作應(yīng)分開進行,并且可以作為實用程序使用。

          請按照下面提到的步驟創(chuàng)建一個基本的數(shù)據(jù)驅(qū)動框架,該框架將用于自動執(zhí)行“學(xué)生注冊表“。

          • 在您的項目中為testCases,testData和Utility創(chuàng)建三個New Packages”。

          • testData包下,將具有測試數(shù)據(jù)的Excel工作表放入。使用此方法,我們將測試數(shù)據(jù)與testCases分開

          • 實用程序下創(chuàng)建一個新類,并將其命名為“ ExcelUtils ”。它將包含與Excel有關(guān)的所有用于讀寫的功能。

          • 實用程序包下,創(chuàng)建另一個類“ Constants”。它將包含跨框架的常量值,例如testdata文件路徑,應(yīng)用程序的URL等。

          • testCases包下,我們將創(chuàng)建包含用于與Web元素交互的Selenium代碼的測試文件。(例如,RegisterStudentTest.java)

          完成上述步驟后,文件夾結(jié)構(gòu)將如下所示:






          讓我們了解每個類的詳細信息:

          1. ExcelUtils類這是一個實用程序類,它將包含與Excel Sheet讀寫操作以及初始化工作簿有關(guān)的所有方法。然后,您可以通過創(chuàng)建Excel Utils類的對象在不同的測試用例中重用這些方法。該類的代碼如下:

          import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException; public class ExcelUtils {   private static HSSFWorkbook workbook;    private static HSSFSheet sheet;    private static HSSFRow row;    private static HSSFCell cell;    public void setExcelFile(String excelFilePath,String sheetName) throws IOException {       //創(chuàng)建一個File類的對象來打開xls文件       File file =    new File(excelFilePath);              //創(chuàng)建FileInputStream類的對象以讀取excel文件       FileInputStream inputStream = new FileInputStream(file);              //正在創(chuàng)建引用.xls文件的工作簿實例       workbook=new HSSFWorkbook(inputStream);              //創(chuàng)建圖紙對象        sheet=workbook.getSheet(sheetName);    }     public String getCellData(int rowNumber,int cellNumber){       //從rowNumber和cell Number獲取單元格值        cell =sheet.getRow(rowNumber).getCell(cellNumber);                //以字符串形式返回單元格值        return cell.getStringCellValue();    }     public int getRowCountInSheet(){       int rowcount = sheet.getLastRowNum()-sheet.getFirstRowNum();       return rowcount;    }     public void setCellValue(int rowNum,int cellNum,String cellValue,String excelFilePath) throws IOException {      //在行中創(chuàng)建新單元格并為其設(shè)置值          sheet.getRow(rowNum).createCell(cellNum).setCellValue(cellValue);              FileOutputStream outputStream = new FileOutputStream(excelFilePath);      workbook.write(outputStream);    }}


          上面的代碼包含不同的方法,例如setExcelFile 初始化Excel 工作簿getCellValue 檢索文件中特定單元格中存在的值,setCellValue 設(shè)置一些值到新創(chuàng)建的單元格中。以類似的方式,您可以在此類中創(chuàng)建與excel操作相關(guān)的不同方法。


          2.常量類–用于將常量值放在文件中,以便可以在測試用例中重復(fù)使用它們。將值放置在單獨的文件中的另一個優(yōu)勢是,如果這些值在任何測試中都是通用的,那么如果其中的任何值有任何更改,則只需要在一個位置進行更新即可。例如,如果文件路徑已更改,則無需使用新值更新所有測試用例,而只需在一個文件中對其進行更新。 此類中的結(jié)構(gòu)和值如下所示–

          package utilities; public class Constants {    public static final String URL = "https://demoqa.com/automation-practice-form";    public static final String Path_TestData = "E:\\Projects\\src\\testData\\";    public static final String File_TestData = "TestData.xls";

          3. RegisterStudentTest –這是學(xué)生注冊表的測試腳本,我們用于輸入特定學(xué)生的名字,姓氏,手機,電子郵件,性別等。由于我們現(xiàn)在已經(jīng)將與excel相關(guān)的方法分離在一個單獨的文件中,因此測試用例的代碼也會更改。

          我們將在此測試文件中創(chuàng)建ExcelUtils 類的對象,并使用常量 引用文件的路徑。

          更新后的代碼現(xiàn)在看起來像–

          package testCases;  import org.openqa.selenium.By;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import utilities.Constants;import utilities.ExcelUtils;import java.io.IOException;import java.util.concurrent.TimeUnit; public class RegisterStudentTest {     //創(chuàng)建ExcelUtils類的對象    static ExcelUtils excelUtils = new ExcelUtils();        //將常量類值用于excel文件路徑    static String excelFilePath =Constants.Path_TestData+Constants.File_TestData;     public static  void main(String args[]) throws IOException {        //設(shè)置Chrome驅(qū)動程序路徑        System.setProperty("webdriver.chrome.driver","E:\\Projects\\chromedriver.exe");                //創(chuàng)建ChromeDriver對象        WebDriver driver = new ChromeDriver();                //啟動指定的URL        driver.get("https://demoqa.com/automation-practice-form");                //確定學(xué)生登記表的WebElements        WebElement firstName=driver.findElement(By.id("firstName"));        WebElement lastName=driver.findElement(By.id("lastName"));        WebElement email=driver.findElement(By.id("userEmail"));        WebElement genderMale= driver.findElement(By.id("gender-radio-1"));        WebElement mobile=driver.findElement(By.id("userNumber"));        WebElement address=driver.findElement(By.id("currentAddress"));        WebElement submitBtn=driver.findElement(By.id("submit"));                //調(diào)用ExcelUtils類方法初始化工作簿和工作表        excelUtils.setExcelFile(excelFilePath,"STUDENT_DATA");         //遍歷所有行以打印每個單元格中的數(shù)據(jù)。        for(int i=1;i<=excelUtils.getRowCountInSheet();i++)        {          //在firstname、lastname、mobile、email、address中輸入從Excel讀取的值          firstName.sendKeys(excelUtils.getCellData(i,0));          lastName.sendKeys(excelUtils.getCellData(i,1));          email.sendKeys(excelUtils.getCellData(i,2));          mobile.sendKeys(excelUtils.getCellData(i,3));          address.sendKeys(excelUtils.getCellData(i,4));                  //使用javascript單擊gender單選按鈕          JavascriptExecutor js = (JavascriptExecutor) driver;          js.executeScript("arguments[0].click();", genderMale);                 //單擊“提交”按鈕          submitBtn.click();                  //驗證確認消息            WebElement confirmationMessage = driver.findElement(By.xpath("http://div[text()='Thanks for submitting the form']"));                        //檢查是否顯示確認消息            if (confirmationMessage.isDisplayed()) {              // 如果顯示消息,則使用excel方法在excel表中寫入PASS              excelUtils.setCellValue(i,6,"PASS",excelFilePath);            } else {                //如果未顯示消息,請使用excel方法在excel表中寫入FAIL                excelUtils.setCellValue(i,6,"FAIL",excelFilePath);            }             //close the confirmation popup            WebElement closebtn=driver.findElement(By.id("closeLargeModal"));            closebtn.click();                     //單擊“關(guān)閉”按鈕后,等待頁面返回注冊頁面            driver.manage().timeouts().implicitlyWait(2000,TimeUnit.SECONDS);        }        //關(guān)閉驅(qū)動程序        driver.quit();    }}

          但是,如果您注意到,ExcelUtils的方法將 處理所有與excel相關(guān)的代碼。

          因此,這是在Selenium中使用數(shù)據(jù)驅(qū)動框架的方法之一。此外,您可以利用在多組數(shù)據(jù)上運行相同測試的優(yōu)勢。



          微信公眾號
          軟件測試面試題
          識別二維碼 查看題目



          瀏覽 68
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品无码中文在线 | 免费草比视频 | 国产精品乱码一区二区三区 | 91蜜桃婷婷狠狠久久综合 | 国产精品不卡 |