在使用 Java 的 Selenium 中,是否可以在 testNG 中只编写一个测试方法并从中形成多个测试?
In Selenium using Java is it possible to write only one test method in testNG and form multiple tests from it?
我有一种情况,在我的 testNG 测试中我只有一个测试方法 class 我必须从中形成多个测试,因为我只写一个测试方法是因为我不我不知道我需要多少测试,因为这个数字取决于我从 excel sheet.
中获取的 URL 的数量
所以基本上我只有一种 testNG 测试方法,每次都会从 excel 中获取不同的 URL 并执行测试,根据测试结果,我的监听器会将测试标记为通过或失败。
例如,我的 excel sheet 中有 20 个 URL,那么一个 testNG 测试方法可以一个一个地执行这 20 个 URL 并给出 pass/fail 结果20次。意思是最后我应该看到执行了 20 个测试,结果是 pass/fail。
我怎样才能做到这一点?
基本上你想运行用不同的数据集进行测试,
为此,您可以实现 @Factory
带注释的构造函数并将此构造函数的 @Factory
注释绑定到 @DataProvider
带注释的数据提供程序方法
此外,您可以使用 Apache POI 从给定的 excel 文件中获取 url。
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import org.testng.annotations.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import static org.testng.Assert.assertNotNull;
public class SampleTest {
private final String url;
@Factory(dataProvider = "getUrls")
public SampleTest(String url) {
this.url = url;
}
@DataProvider(name = "getUrls")
public static Iterator<Object[]> loadUrls() throws IOException {
InputStream inputStream =
SampleTest.class.getClassLoader().getResourceAsStream("urls-sheet.xlsx");
try (Workbook workbook = new XSSFWorkbook(inputStream)) {
Iterable<Row> iterable = () -> workbook.getSheetAt(0).iterator();
Stream<Row> rows = StreamSupport.stream(iterable.spliterator(), false);
return rows.map(row -> new Object[] {row.getCell(0).getStringCellValue()}).iterator();
}
}
@Test
public void testProvidedUrl() {
assertNotNull(url, "url should have a value");
}
}
见
TestNG @DataProvider – Test parameters example
How to run multiple test cases in testng with different set of test data from excel file?
我有一种情况,在我的 testNG 测试中我只有一个测试方法 class 我必须从中形成多个测试,因为我只写一个测试方法是因为我不我不知道我需要多少测试,因为这个数字取决于我从 excel sheet.
中获取的 URL 的数量所以基本上我只有一种 testNG 测试方法,每次都会从 excel 中获取不同的 URL 并执行测试,根据测试结果,我的监听器会将测试标记为通过或失败。 例如,我的 excel sheet 中有 20 个 URL,那么一个 testNG 测试方法可以一个一个地执行这 20 个 URL 并给出 pass/fail 结果20次。意思是最后我应该看到执行了 20 个测试,结果是 pass/fail。 我怎样才能做到这一点?
基本上你想运行用不同的数据集进行测试,
为此,您可以实现 @Factory
带注释的构造函数并将此构造函数的 @Factory
注释绑定到 @DataProvider
带注释的数据提供程序方法
此外,您可以使用 Apache POI 从给定的 excel 文件中获取 url。
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import org.testng.annotations.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import static org.testng.Assert.assertNotNull;
public class SampleTest {
private final String url;
@Factory(dataProvider = "getUrls")
public SampleTest(String url) {
this.url = url;
}
@DataProvider(name = "getUrls")
public static Iterator<Object[]> loadUrls() throws IOException {
InputStream inputStream =
SampleTest.class.getClassLoader().getResourceAsStream("urls-sheet.xlsx");
try (Workbook workbook = new XSSFWorkbook(inputStream)) {
Iterable<Row> iterable = () -> workbook.getSheetAt(0).iterator();
Stream<Row> rows = StreamSupport.stream(iterable.spliterator(), false);
return rows.map(row -> new Object[] {row.getCell(0).getStringCellValue()}).iterator();
}
}
@Test
public void testProvidedUrl() {
assertNotNull(url, "url should have a value");
}
}
见
TestNG @DataProvider – Test parameters example
How to run multiple test cases in testng with different set of test data from excel file?