В настоящее время я пытаюсь написать несколько тестов автоматизации с помощью TestNG, которые будут проверять некоторые действия пользователей на веб-сайте, поэтому тесты представляют собой сквозные функциональные тесты, а не модульные тесты.
Я создал файл XML, в котором будут храниться тестовые данные (структура этого файла XML не изменится). Тестовый сценарий будет считывать информацию из тестового файла и передавать ее в DataProvider, который затем передает @Tests. Проблема в том, что поставщик данных, по-видимому, закачивает каждый метод @Test с каждым экземпляром тестовых данных и не запускает тесты последовательно.
Я приложил код - пожалуйста, кто-нибудь может посоветовать, правильный ли мой подход, или что нужно настроить в коде, чтобы сделать его работоспособным для каждого набора тестовых данных.
Файл тестовых данных
<TestData>
<test>
<username>letmein</username>
<password>ok!</password>
<product>tesco</product>
<ordertype>Market</ordertype>
<quantity>1000</quantity>
<side>Buy</side>
</test>
<test>
<username>letmein</username>
<password>ok!</password>
<product>barc</product>
<ordertype>RFQ</ordertype>
<quantity>100</quantity>
<side>Buy</side>
</test>
The dataprovider reads this test data and passes it into an Object[][]
Сценарий тестирования автоматизации выглядит следующим образом;
public class PlaceOrderTestScript {
InitiateTesting x;
static TestDataProvider y;
static WebDriver driver;
boolean loggedin = false;
@Parameters("browser")
@BeforeTest
public void beforeMethod(String browser) throws Exception {
x = new InitiateTesting();
y = new TestDataProvider();
driver = x.launch(browser); //select driver, browser and launch website
}
@DataProvider
public static Object[][] dp(ITestContext context) throws Exception {
String testdatalocation = context.getCurrentXmlTest().getParameter("placeordertestdata"); //suite.xml holds details of the test data file location
Object[][] data = y.Provider(testdatalocation);
return data;
}
@Test (dataProvider = "dp")
public void SignIn(String username, String password, String product, String ordertype, String quantity, String side) throws Exception {
System.out.println("Log into site");
// only run this test once
if (loggedin == false) {
LogIn_Page.txtbx_UserName(driver).sendKeys(username);
LogIn_Page.txtbx_Password(driver).sendKeys(password);
LogIn_Page.btn_LogIn(driver).click();
Thread.sleep(5000); //pause for x seconds and let site load for the first time
loggedin = true;
}
}
@Test (dependsOnMethods={"SignIn"}, dataProvider = "dp")
public void SearchForProduct(String username, String password, String product, String ordertype, String quantity, String side) {
// search for <product>
}
@Test (dependsOnMethods={"Search"}, dataProvider = "dp")
public void PlaceOrder(String username, String password, String product, String ordertype, String quantity, String side) {
//Place order
}
@Test (dependsOnMethods={"PlaceOrder"}, dataProvider = "dp")
public void ValidateQuantityAmount(String username, String password, String product, String ordertype, String quantity, String side) {
//check results <quantity>
}
@Test (dependsOnMethods={"PlaceOrder"}, dataProvider = "dp")
public void ValidateSide(String username, String password, String product, String ordertype, String quantity, String side) {
//check results <side>
}
@Test (dependsOnMethods={"PlaceOrder"}, dataProvider = "dp")
public void ValidateTotal(String username, String password, String product, String ordertype, String quantity, String side) {
//check results - some calcs here
}
@AfterTest
public void CancelOrder() throws Exception {
//Cancel the Order
}
}
Проблема в том, что когда я запускаю это, TestNG передает все данные из каждого в каждый метод @Test. Мне нужно, чтобы он передал каждый экземпляр через последовательность методов.. так; , SignIn, SearchForProduct, PlaceOrder, ValidateQuantityAmount, ValidateSide, ValidateTotal, CancelOrder. Затем повторите это для следующего экземпляра
Мой подход неверен? Я понимаю, что каждый тест должен быть независимым, но как это возможно при проведении сквозного тестирования?
заранее спасибо
Джон