在这种情况下,我只想使用dataprovider或任何其他可能的方式逐个迭代所有环境。请参阅我附带的excel文件
一个环境的代码:下面给出的LTI。注意:只需更改类名,即可为所有其他环境重复相同的代码。
public class LTI_ENV {
public WebDriver driver;
private String sTestCaseName;
private int iTestCaseRow;
@BeforeTest
public void beforeMethod() throws Exception {
DOMConfigurator.configure("log4j.xml");
// Getting the Test Case name, as it will going to use in so many places
// The main use is to get the TestCase row from the Test Data Excel sheet
sTestCaseName = this.toString();
// From above method we get long test case name including package and class name etc.
// The below method will refine your test case name, exactly the name use have used
//Here I want to parameterize URL for each test ,is there any method that I can do ???
//My application have 3 module i.e for LTI –Env
//1)Account Management (need to check pass?fail)
//2)Prep and rating (need to check pass?fail)
//3)Risk Eval (need to check pass?fail)
sTestCaseName = Utils.getTestCaseName(this.toString());
Log.startTestCase(sTestCaseName);
ExcelUtils.setExcelFile(Constant.Path_TestData + Constant.File_TestData,"Sheet1");
iTestCaseRow = ExcelUtils.getRowContains(sTestCaseName,Constant.Col_TestCaseName);
driver = Utils.OpenBrowser(iTestCaseRow);
new BaseClass(driver);
}
@Test(priority=1)
public void AccountManagement() throws Exception {
try {
AccountCreation_Action.Execute(iTestCaseRow);
AM_SubmissionLOB_Action.Execute(iTestCaseRow);
AM_Classification_Action.Execute(iTestCaseRow);
//Verification_Action1.Execute();
if (BaseClass.bResult==true) {
ExcelUtils.setCellData("Pass", iTestCaseRow, Constant.Col_ResultStatus);
} else {
throw new Exception("Test Case Failed because of Verification");
}
} catch (Exception e) {
ExcelUtils.setCellData("Fail", iTestCaseRow, Constant.Col_ResultStatus);
Utils.takeScreenshot(driver, sTestCaseName);
// This will print the error log message
Log.error(e.getMessage());
// Again throwing the exception to fail the test completely in the TestNG results
throw (e);
}
}
@Test(priority=2,dependsOnMethods="AccountManagement")
public void PrepandRating() throws Exception {
try {
GenInfopage_Action.Execute(iTestCaseRow);
LocationSchedulePage_Actions.Execute(iTestCaseRow);
PolicyCoveragePage_Action.Execute(iTestCaseRow);
LocationInfo_Page_Action.Execute(iTestCaseRow);
LocationSchedulePage_Actions.Execute(iTestCaseRow);
AutoVehicleCoveragePage_Action.Execute(iTestCaseRow);
AutoPolicyCoveragePage_Action.Execute(iTestCaseRow);
PremiumSummaryPage_Action.Execute(iTestCaseRow);
//Verification_Action2.Execute();
if (BaseClass.bResult==true) {
ExcelUtils.setCellData("Pass", iTestCaseRow+2, Constant.Col_ResultStatus);
} else {
throw new Exception("Test Case Failed because of Verification");
}
} catch (Exception e) {
ExcelUtils[enter image description here][1].setCellData("Fail", iTestCaseRow+2, Constant.Col_ResultStatus);
Utils.takeScreenshot(driver, sTestCaseName);
Log.error(e.getMessage());
throw (e);
}
}
@Test(priority=3,dependsOnMethods="PrepandRating")
public void RiskEval() throws Exception {
//will update code for this module
}
// Its time to close the finish the test case
@AfterTest
public void afterTest() {
// Printing beautiful logs to end the test case
Log.endTestCase(sTestCaseName);
// Closing the driver
driver.quit(); //I need to close all the browser and then will launch again for other environment tests
}
}
我面临的挑战是:
在上面的代码中,我首先使用TestCaseName
在excel Utils.getTestCaseName(this.toString());
列中搜索测试用例名称
因此,我一次只能运行一个环境。
如果我的测试运行状态为RUN /其他已跳过
如何使用testNG编写此方案?与@BeforeTest
一样,我需要为每个测试环境获取URL。
请在下面找到我已实施的框架:http://toolsqa.wpengine.com/selenium-webdriver/selenium-automation-hybrid-framework
答案 0 :(得分:0)
package TestNG.DataDriven;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.testng.Assert;
import org.testng.TestNG;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class XMLRun {
public static XSSFWorkbook book;
public static XSSFSheet sheet1;
public static int LastRow=1;
@Test(dataProvider="XMLFeed")
public static void XMLRead(String Status,String XMLPath) throws Exception{
if (Status.equalsIgnoreCase("Run")){
// Create object of TestNG Class
TestNG runner=new TestNG();
// Create a list of String
List<String> suitefiles=new ArrayList<String>();
// Add xml file which you have to execute
suitefiles.add(XMLPath);
// now set xml file for execution
runner.setTestSuites(suitefiles);
// finally execute the runner using run method
runner.run();
} else {
Assert.fail("Skipped Test");
//sheet1.getRow(LastRow).createCell(4).setCellValue("Not Executed");
//com.ReadExcel.WriteExcel.WriteExcelSheet(LastRow, "NotExecuted", 4);
com.ReadExcel.Excelreadwrite.excelwrite("Not Executed", LastRow);
}
LastRow++;
}
@DataProvider(name="XMLFeed")
public Object[][] getData()
{
Object[][] obj=new Object[5][];
File file=new File("TestData.xlsx");
try {
InputStream is=new FileInputStream(file);
book=new XSSFWorkbook(is);
sheet1=book.getSheet("Sheet1");
for (int i=0;i<sheet1.getLastRowNum()+1;i++)
{
obj[i]=new Object[2];
obj[i][0]=sheet1.getRow(i+1).getCell(1).
getStringCellValue();
obj[i][1]=sheet1.getRow(i+1).getCell(8).
getStringCellValue();
/*String result=login(username,password);
sheet1.getRow(i).createCell(2).setCellValue(result);*/
}
book.close();
is.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return obj;
}
}
我用这种方式。它工作正常,但我希望所有这些都应该出现在一个套件中......并且所有testNG报告都应该在一个报告中生成。
以下是我的测试用例类: