Tietojentarjoaja TestNG: Selenium Parametrisointiesimerkki
โก รlykรคs yhteenveto
Parametrisointi sisรครคn Selenium suorittaa yhden testimenetelmรคn toistuvasti eri tietojoukkoja vasten, muuttaen yhden skriptin datalรคhtรถiseksi kattavuudeksi. TestNG tarjoaa tรคhรคn kaksi mekanismia: testng.xml-tiedostoon perustuvan @Parameters-annotaation ja kaksiulotteisen objektitaulukon palauttavan @DataProvider-annotaation.

Kun luomme ohjelmistoja, haluamme aina, ettรค ne toimivat oikein erilaisten datajoukkojen kanssa. Kun on kyse testaus Kyseisessรค ohjelmistossa yhden tietojoukon tarkistaminen ei riitรค. Meidรคn on varmistettava, ettรค jรคrjestelmรค hyvรคksyy kaikki yhdistelmรคt, joita sen odotetaan tukevan. Tรคtรค varten meidรคn on parametroitava testiskriptimme. Tรคssรค kohtaa parametrointi astuu kuvaan.
Parametrisointi sisรครคn Selenium
Parametrisointi sisรครคn Selenium on prosessi testiskriptien parametroimiseksi useiden tietojen vรคlittรคmiseksi sovellukselle suorituksen aikana. Se on suoritusstrategia, joka suorittaa testitapaukset automaattisesti useita kertoja eri arvoilla. Konseptia, joka saavutetaan parametroimalla testiskriptit, kutsutaan Tietoihin perustuva testaus.
Parametrisoinnin tyyppi sisรครคn TestNG
Parametrisoinnin selkeyttรคmiseksi kรคymme lรคpi parametrisointivaihtoehdot yhdessรค suosituimmista viitekehyksistรค, jotka on tarkoitettu Selenium WebDriver โ TestNG.
On kaksi tapaa jolla voimme saavuttaa parametroinnin TestNG:
- Kanssa Parametrien merkinnรคt ja TestNG XML tiedosto.
- Kanssa DataProvider merkintรค.
Yllรค oleva kaavio tiivistรครค jaon: testng.xml-tiedoston parametrit voidaan mรครคrittรครค paketti- tai testitasolla, kun taas DataProviderin parametri voi hyvรคksyรค Method ja ITestContext omana argumenttinaan. Tutkitaanpa niitรค yksityiskohtaisesti.
Parametrit Annotaatio sisรครคn TestNG
Parametrit Annotaatio sisรครคn TestNG on menetelmรค, jota kรคytetรครคn arvojen vรคlittรคmiseen testimetodeille argumentteina .xml-tiedoston avulla. Kรคyttรคjien on ehkรค vรคlitettรคvรค arvot testimetodeille suorituksen aikana. @Parameters-annotaatiometodia voidaan kรคyttรครค missรค tahansa metodissa, jossa on @Test-, @Before-, @After- tai @Factory-annotaatio.
Parametrien huomautus Testng.xml:llรค
Valitse parametrointi annotaatioiden avulla, kun et halua kรคsitellรค monimutkaisuutta ja syรถteyhdistelmien mรครคrรค on pieni.
Katsotaanpa, miten tรคmรค toimii.
Testiskenaario
Vaihe 1) Kรคynnistรค selain ja siirry osoitteeseen Google.com
Vaihe 2) Kirjoita hakusana
Vaihe 3) Varmista, ettรค syรถtetty arvo on sama kuin testidatan antama arvo
Vaihe 4) Toista vaiheet 2 ja 3, kunnes kaikki arvot on syรถtetty
| Testin kirjoittaja | Hakuavain |
|---|---|
| Guru99 | Intia |
| Krishna | Soumi |
| Bhupesh | Kiina |
Tรคssรค on esimerkki siitรค, miten se tehdรครคn ilman parametrit:
package parameters; import org.testng.annotations.Test; import org.testng.AssertJUnit; import java.time.Duration; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; public class NoParameterWithTestNGXML { WebDriver driver; @Test public void testNoParameter() throws InterruptedException { String author = "guru99"; String searchKey = "india"; driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); driver.get("https://google.com"); WebElement searchText = driver.findElement(By.name("q")); // Searching text in the Google text box searchText.sendKeys(searchKey); System.out.println("Welcome ->" + author + " Your search key is->" + searchKey); Thread.sleep(3000); System.out.println("Value in Google Search Box = " + searchText.getDomProperty("value") + " ::: Value given by input = " + searchKey); // Verifying the value in the Google search box AssertJUnit.assertTrue(searchText.getDomProperty("value").equalsIgnoreCase(searchKey)); } }
โ ๏ธ Selenium Vuoden 4 huomautus: Kolme riviรค tรคmรคn esimerkin alkuperรคisessรค versiossa ei enรครค kรครคnny tai ne ovat vanhentuneita nykyisessรค versiossa Selenium tiedotteet. System.setProperty("webdriver.gecko.driver", โฆ) on tarpeetonta Selenium 4.6 eteenpรคin, koska Selenium Manager selvittรครค ajuribinรครคritiedoston automaattisesti. implicitlyWait(10, TimeUnit.SECONDS) ylikuormitus poistettiin vuonna Selenium 4 ja korvattu implicitlyWait(Duration.ofSeconds(10)). getAttribute() oli vanhentunut vuonna Selenium 4.27, joten tekstilaatikon lukeminen kรคyttรครค getDomProperty("value")Jokainen alla oleva esimerkki soveltaa samoja kolmea korjausta.
Tutki yllรค olevaa esimerkkiรค ja kuvittele, kuinka monimutkaiseksi koodista tulee, kun tรคmรค toistetaan kolmella syรถteyhdistelmรคllรค.
Parametrisoidaan se nyt kรคyttรคmรคllรค TestNGVoit tehdรค niin seuraavasti:
- Luo XML-tiedosto, joka tallentaa parametrit
- Lisรครค testiin annotaatio @Parameters
Tรคssรค on tรคydellinen koodi.
Testitaso TestNG. Xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3"> <parameter name="author" value="Guru99" /> <parameter name="searchKey" value="India" /> <test name="testGuru"> <parameter name="searchKey" value="UK" /> <classes> <class name="parameters.ParameterWithTestNGXML"></class> </classes> </test> </suite>
Parametri WithTestNGXML.java tiedosto
package parameters; import org.testng.AssertJUnit; import java.time.Duration; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Optional; import org.testng.annotations.Parameters; import org.testng.annotations.Test; public class ParameterWithTestNGXML { WebDriver driver; @Test @Parameters({"author", "searchKey"}) public void testParameterWithXML(@Optional("Abc") String author, String searchKey) throws InterruptedException { driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); driver.get("https://google.com"); WebElement searchText = driver.findElement(By.name("q")); // Searching text in the Google text box searchText.sendKeys(searchKey); System.out.println("Welcome ->" + author + " Your search key is->" + searchKey); Thread.sleep(3000); System.out.println("Value in Google Search Box = " + searchText.getDomProperty("value") + " ::: Value given by input = " + searchKey); // Verifying the value in the Google search box AssertJUnit.assertTrue(searchText.getDomProperty("value").equalsIgnoreCase(searchKey)); } }
Suorittaaksesi komentosarjan, valitse XML-tiedosto ja suorita se TestNG sviitti.
Napsauta .xml-tiedostoa hiiren kakkospainikkeella -> Suorita nimellรค -> TestNG Sviitti (Huomautus: Sviitti)
Parametrit voidaan mรครคritellรค kahdella tasolla:
- Suite-taso โ parametrit sisรคllรค
<suite>tagi TestNG XML-tiedostot ovat ohjelmistopaketin tason parametreja. - Testitaso โ parametrit sisรคllรค
<test>tagi TestNG XML-tiedostot ovat testitason parametreja.
Tรคssรค on sama testi sviittitason parametreilla:
HUOMAUTUS: Jos parametrin nimi on sama sekรค paketin tasolla ettรค testitasolla, testitason parametrilla on etusija paketin ykkรถstason parametriin nรคhden. Tรคssรค tapauksessa kaikki kyseisen testitason sisรคllรค olevat luokat jakavat ohitetun parametrin, ja kyseisen testitason ulkopuoliset luokat kรคyttรคvรคt edelleen paketin tasoparametria.
Ongelmien karttoittaminen
Ongelma 1: Testing.xml-tiedoston parametriarvo, jota ei voida tyypittรครค vastaavan testimetodin parametriksi, aiheuttaa virheen.
Harkitse seuraavaa esimerkkiรค:
Tรคssรค 'tekijรค'-attribuutti on yhtรค kuin 'Guru99', joka on merkkijono, kun taas vastaava testimetodi odottaa kokonaislukuarvoa, joten syntyy poikkeus.
Ongelma 2: @Parameters-parametreillasi ei ole vastaavaa arvoa testng.xml-tiedostossa.
Voit ratkaista tรคmรคn lisรครคmรคllรค @Valinnainen merkintรค testimenetelmรคn vastaavaan parametriin.
Ongelma 3: Haluat testata useita saman parametrin arvoja kรคyttรคmรคllรค testng.xml-tiedostoa.
Yksinkertainen vastaus on, ettรค tรคtรค ei voida tehdรค. Sinulla voi olla useita eri parametreja, mutta jokainen parametri voi sisรคltรครค vain yhden arvon. Tรคmรค estรครค arvojen kovakoodaamisen skriptiin ja pitรครค koodin uudelleenkรคytettรคvรคnรค โ ajattele sitรค skriptisi asetustiedostona. Jos tarvitset useita arvoja yhdelle parametrille, kรคytรค sen sijaan DataProvideria.
Tietojen toimittaja sisรครคn TestNG
Tietojen toimittaja sisรครคn TestNG on menetelmรค, jota kรคytetรครคn, kun kรคyttรคjรคn on annettava monimutkaisia โโparametreja. Monimutkaiset parametrit on luotava Java โ Tiedon tarjoaja -metodi voi vรคlittรครค monimutkaisia โโobjekteja, ominaisuustiedostojen objekteja tai tietokannan objekteja. Metodi annotoidaan @DataProvider-tunnisteella ja se palauttaa objektitaulukon.
Parametrit Dataproviderilla
@Parameters-annotaatio on helppo, mutta useiden tietojoukkojen testaamiseen meidรคn on kรคytettรคvรค tiedontarjoajaa.
Tรคyttรครคksemme tuhansia verkkolomakkeita testauskehyksemme avulla tarvitsemme erilaisen menetelmรคn, joka pystyy tuottamaan erittรคin suuren tietojoukon yhdessรค suoritusvirrassa.
Tรคmรค datalรคhtรถinen konsepti saavutetaan siten, ettรค @DataProvider huomautus sisรครคn TestNG.
Siinรค on vain yksi attribuutti, 'nimi'Jos et mรครคritรค name-attribuuttia, DataProviderin nimi on sama kuin vastaavan metodin nimi.
Tiedontoimittaja palauttaa kaksiulotteinen Java objekti testimetodiin, ja testimetodia kutsutaan M kertaa MรN-objektitaulukolle. Esimerkiksi, jos DataProvider palauttaa taulukon, jossa on 2ร3 objektia, vastaava testitapaus kutsutaan kaksi kertaa kolmella parametrilla joka kerta.
Tรคydellinen esimerkki
package parameters; import java.time.Duration; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class ParameterByDataprovider { WebDriver driver; @BeforeTest public void setup() { // Create the Firefox driver object driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); driver.get("https://google.com"); } /** Test case to verify the Google search box */ @Test(dataProvider = "SearchProvider") public void testMethod(String author, String searchKey) throws InterruptedException { WebElement searchText = driver.findElement(By.name("q")); // Search value in the Google search box searchText.sendKeys(searchKey); System.out.println("Welcome ->" + author + " Your search key is->" + searchKey); Thread.sleep(3000); String testValue = searchText.getDomProperty("value"); System.out.println(testValue + "::::" + searchKey); searchText.clear(); // Verify if the value in the Google search box is correct Assert.assertTrue(testValue.equalsIgnoreCase(searchKey)); } /** * @return Object[][] where the first column contains 'author' * and the second column contains 'searchKey' */ @DataProvider(name = "SearchProvider") public Object[][] getDataFromDataprovider() { return new Object[][] { { "Guru99", "India" }, { "Krishna", "UK" }, { "Bhupesh", "USA" } }; } }
Kutsu DataProvider eri luokasta
Oletusarvoisesti DataProvider sijaitsee samassa luokassa kuin testimetodi tai sen perusluokassa. Jos haluat sijoittaa sen toiseen luokkaan, tee dataprovider-metodista staattinen ja lisรครค attribuutti dataProviderClass ettรค @Testata merkintรค.
Code esimerkki
TestClass ParameterDataproviderWithClassLevel.java
package parameters; import java.time.Duration; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class ParameterDataproviderWithClassLevel { WebDriver driver; @BeforeTest public void setup() { driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); driver.get("https://google.com"); } @Test(dataProvider = "SearchProvider", dataProviderClass = DataproviderClass.class) public void testMethod(String author, String searchKey) throws InterruptedException { WebElement searchText = driver.findElement(By.name("q")); // Search text in the Google text box searchText.sendKeys(searchKey); System.out.println("Welcome ->" + author + " Your search key is->" + searchKey); Thread.sleep(3000); // Get text from the search box String testValue = searchText.getDomProperty("value"); System.out.println(testValue + "::::" + searchKey); searchText.clear(); // Verify if the search box has the correct value Assert.assertTrue(testValue.equalsIgnoreCase(searchKey)); } }
DataproviderClass.java
package parameters; import org.testng.annotations.DataProvider; public class DataproviderClass { @DataProvider(name = "SearchProvider") public static Object[][] getDataFromDataprovider() { return new Object[][] { { "Guru99", "India" }, { "Krishna", "UK" }, { "Bhupesh", "USA" } }; } }
Dataproviderin parametrityypit
DataProvider-metodi tukee kahdenlaisia โโparametreja.
Menetelmรค โ jos sama DataProviderin tulisi toimia eri tavoin eri testimetodeilla, kรคytรค Method-parametria.
Seuraavassa esimerkissรค:
- Tarkistamme, onko metodin nimi testMethodA
- Jos kyllรค, palauta yksi arvojoukko
- Muussa tapauksessa palauta toinen arvojoukko
package parameters; import java.lang.reflect.Method; import java.time.Duration; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class ParameterByMethodInDataprovider { WebDriver driver; @BeforeTest public void setup() { driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); driver.get("https://google.com"); } @Test(dataProvider = "SearchProvider") public void testMethodA(String author, String searchKey) throws InterruptedException { WebElement searchText = driver.findElement(By.name("q")); searchText.sendKeys(searchKey); // Print author and search string System.out.println("Welcome ->" + author + " Your search key is->" + searchKey); Thread.sleep(3000); String testValue = searchText.getDomProperty("value"); System.out.println(testValue + "::::" + searchKey); searchText.clear(); Assert.assertTrue(testValue.equalsIgnoreCase(searchKey)); } @Test(dataProvider = "SearchProvider") public void testMethodB(String searchKey) throws InterruptedException { WebElement searchText = driver.findElement(By.name("q")); searchText.sendKeys(searchKey); // Print only the search string System.out.println("Welcome ->Unknown user Your search key is->" + searchKey); Thread.sleep(3000); String testValue = searchText.getDomProperty("value"); System.out.println(testValue + "::::" + searchKey); searchText.clear(); Assert.assertTrue(testValue.equalsIgnoreCase(searchKey)); } /** The DataProvider returns values based on the test method name */ @DataProvider(name = "SearchProvider") public Object[][] getDataFromDataprovider(Method m) { if (m.getName().equalsIgnoreCase("testMethodA")) { return new Object[][] { { "Guru99", "India" }, { "Krishna", "UK" }, { "Bhupesh", "USA" } }; } else { return new Object[][] { { "Canada" }, { "Russia" }, { "Japan" } }; } } }
Tรคssรค on tuotos:
ITestContext โ tรคtรค voidaan kรคyttรครค luomaan erilaisia โโparametreja testitapauksille ryhmien perusteella.
Todellisessa elรคmรคssรค voit kรคyttรครค ITestContextia parametrien arvojen muuttamiseen testimenetelmien, isรคntien tai testimรครคritysten perusteella.
Seuraavassa koodiesimerkissรค:
- Meillรค on kaksi ryhmรครค, A ja B
- Jokainen testimenetelmรค on mรครคritetty ryhmรครคn
- Jos ryhmรคn arvo on A, palautetaan yksi tietojoukko
- Jos ryhmรคn arvo on B, palautetaan toinen tietojoukko.
package parameters; import java.time.Duration; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.ITestContext; import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class ParameterByITestContextInDataprovider { WebDriver driver; @BeforeTest(groups = {"A", "B"}) public void setup() { driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); driver.get("https://google.com"); } @Test(dataProvider = "SearchProvider", groups = "A") public void testMethodA(String author, String searchKey) throws InterruptedException { WebElement searchText = driver.findElement(By.name("q")); searchText.sendKeys(searchKey); System.out.println("Welcome ->" + author + " Your search key is->" + searchKey); Thread.sleep(3000); String testValue = searchText.getDomProperty("value"); System.out.println(testValue + "::::" + searchKey); searchText.clear(); Assert.assertTrue(testValue.equalsIgnoreCase(searchKey)); } @Test(dataProvider = "SearchProvider", groups = "B") public void testMethodB(String searchKey) throws InterruptedException { WebElement searchText = driver.findElement(By.name("q")); searchText.sendKeys(searchKey); System.out.println("Welcome ->Unknown user Your search key is->" + searchKey); Thread.sleep(3000); String testValue = searchText.getDomProperty("value"); System.out.println(testValue + "::::" + searchKey); searchText.clear(); Assert.assertTrue(testValue.equalsIgnoreCase(searchKey)); } /** The DataProvider supplies an Object array based on ITestContext */ @DataProvider(name = "SearchProvider") public Object[][] getDataFromDataprovider(ITestContext c) { Object[][] groupArray = null; for (String group : c.getIncludedGroups()) { if (group.equalsIgnoreCase("A")) { groupArray = new Object[][] { { "Guru99", "India" }, { "Krishna", "UK" }, { "Bhupesh", "USA" } }; break; } else if (group.equalsIgnoreCase("B")) { groupArray = new Object[][] { { "Canada" }, { "Russia" }, { "Japan" } }; break; } } return groupArray; } }
Huomautus: Jos suoritat TestNG suoraan luokkaan, se kutsuu ensin tiedon tarjoajaa, eikรค tarjoaja voi lukea ryhmรคtietoja, koska ryhmรคt eivรคt ole vielรค saatavilla. Luokan kutsuminen testng.xml-tiedoston kautta tekee ryhmรคtiedot saataville ITestContext-tiedoston kautta. Kรคytรค seuraavaa XML-tiedostoa testin suorittamiseen:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd"> <suite name="test-parameter"> <test name="example1"> <groups> <run> <include name="A" /> </run> </groups> <classes> <class name="parameters.ParameterByITestContextInDataprovider" /> </classes> </test> <test name="example2"> <groups> <run> <include name="B" /> </run> </groups> <classes> <class name="parameters.ParameterByITestContextInDataprovider" /> </classes> </test> </suite>
Molemmat mekanismit on nyt kรคsitelty, joten kรคytรคnnรถn kysymys on, kumpaan kannattaa tarttua.
@Parameters vs. @DataProvider: Kumpaa kรคyttรครค
Nรคmรค kaksi lรคhestymistapaa eivรคt ole keskenรครคn vaihdettavissa. Pรครคtรถs riippuu siitรค, kuinka monta arvoyhdistelmรครค testi tarvitsee ja mistรค nรคmรค arvot ovat perรคisin.
| Kriteeri | @Parametrit + testng.xml | @DataProvider |
|---|---|---|
| Arvot parametria kohden | Tasan yksi | Rajoittamaton mรครคrรค rivejรค |
| Tietolรคhde | Staattinen teksti XML-tiedostossa | Java koodi, Excel, CSV, tietokanta, API |
| Tuetut tyypit | Merkkijonosta tyypitettyjen arvojen | mitรครคn Java objekti |
| Testien kutsut | Kerran konfiguraatiota kohden | Kerran datariviรค kohden |
| Tietojen muuttaminen vaatii | XML-tiedoston muokkaaminen | Lรคhdekoodin muokkaaminen, usein ei uudelleenkรครคntรคmistรค |
| Soveltuu parhaiten | Ympรคristรถ- ja mรครคritysarvot, kuten selain, URL, valtakirjat | Datalรคhtรถinen testaus useilla syรถteyhdistelmillรค |
Kรคytรคnnรถssรค useimmat paketit kรคyttรคvรคt molempia: @Parameters sisรคltรครค ympรคristรถasetukset, jotka pysyvรคt vakioina koko ajon ajan, ja @DataProvider toimittaa vaihtelevat liiketoimintatiedot. Kun tietojoukko kasvaa ulos kovakoodatusta taulukosta, seuraava vaihe on sen lukeminen laskentataulukosta.
Testidatan lukeminen Excel-tiedostosta DataProviderin avulla
Kovakoodatut taulukot lakkaavat skaalautumasta, kun testaajat, jotka eivรคt kirjoita, Java tarve yllรคpitรครค tietoja. Rivien siirtรคminen taulukkoon erottaa testidatan testilogiikasta, mikรค on kรคytรคnnรถllinen muoto datalรคhtรถinen testausApachen POI lukee tyรถkirjan ja DataProvider muuntaa jokaisen rivin yhdeksi testikutsukseksi.
- Lisรครค riippuvuus. Sisรคltรครค
org.apache.poi:poi-ooxmlMavenissasi tai Gradle rakentaa.ooxmlartefakti kรคsittelee .xlsx-muotoa; tavallinenpoilukee vain vanhoja .xls-tiedostoja. - Luo tyรถkirja. Sijoita otsikkorivi riville 0 ja yksi testitapaus riviรค kohden sen alle, yksi sarake testimetodiargumenttia kohden.
- Lue taulukko taulukkoon. Muuta Object[][] -luokan kokoa rivi- ja solumรครคrien perusteella, jotta uudet rivit poimitaan ilman koodimuutoksia.
- Palauta se toimittajalta. Testimenetelmรคn allekirjoitus pysyy tรคsmรคlleen ennallaan.
import java.io.FileInputStream; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.testng.annotations.DataProvider; public class ExcelDataProvider { @DataProvider(name = "SearchProvider") public Object[][] readSearchData() throws Exception { FileInputStream file = new FileInputStream("src/test/resources/testdata.xlsx"); Workbook workbook = new XSSFWorkbook(file); Sheet sheet = workbook.getSheetAt(0); // Skip the header row, so subtract one from the physical row count int rows = sheet.getLastRowNum(); int cols = sheet.getRow(0).getPhysicalNumberOfCells(); Object[][] data = new Object[rows][cols]; for (int i = 1; i <= rows; i++) { for (int j = 0; j < cols; j++) { data[i - 1][j] = sheet.getRow(i).getCell(j).getStringCellValue(); } } workbook.close(); file.close(); return data; } }
๐ก Vinkki: Puhelu getStringCellValue() vain tekstiksi muotoilluissa soluissa. Numeerinen solu heittรครค IllegalStateException, mikรค on yleisin virhe, kun laskentataulukko sisรคltรครค tunnisteita tai summia. Kรคytรค DataFormatter lukeaksesi jokaisen solutyypin merkkijonona tai kytkeรคksesi pรครคlle cell.getCellType() ja muuntaa eksplisiittisesti.
Kun data on ulkoistettu, sadan uuden testitapauksen lisรครคmisestรค tuleekin taulukkolaskentaohjelman muokkaus koodinmuutoksen sijaan, ja sama tarjoaja voi syรถttรครค useita testiluokkia palvelimen kautta. dataProviderClass aiemmin nรคytetty ominaisuus.
















