После прохождения курсов Алексея Баранцева решила попробовать свои силы в тестировании приложения, над которым я тружусь в ручном режиме.
Приложение представляет из себя CRM, одна из основных функций которой является создание клиента.
Использую стек Selenium+Gradle+Java+TestNG.
Я написала тест на создание клиента с использованием @DataProvider. То есть сначала я генерирую данные в формате json, далее я читаю этот файл и передаю в качестве параметра тесту. И всё работает отлично. Но задача на данный момент такая, что нужно перед каждым запуском теста генерировать новый набор данных, прежде очищая старый набор, чтобы каждый раз был новый набор данных.
Подскажите пожалуйста как это организовать?
Тестовый класс:
public class CustomerCreateTest extends TestBase{
@DataProvider
public Iterator<Object[]> dataCustomersFromJson() throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(new File("src/test/resources/customers.json")))) {
String json = "";
String line = reader.readLine();
while (line != null) {
json += line;
line = reader.readLine();
}
Gson gson = new Gson();
List<CustomerData> customers = gson.fromJson(json, new TypeToken<List<CustomerData>>() {}.getType()); // List<RepositoryData>.class
return customers.stream().map((g) -> new Object[]{g}).collect(Collectors.toList()).iterator();
}
}
@Test (dataProvider = "dataCustomersFromJson")
public void createCustomerValidData(CustomerData customer) throws InterruptedException {
app.goTo().customerListPage();
app.customer().create(customer);
Thread.sleep(20000);
Boolean curdCustomerPage = app.customer().isTextPresent("Успешно сохранен");
assertTrue(curdCustomerPage);
Thread.sleep(15000);
}
}
Класс по генерации тестовых данных:
public class CustomerDataGenerator {
@Parameter(names = "-c", description = "Repository count")
public int count;
@Parameter(names = "-f", description = "Target file")
public String file;
@Parameter(names = "-d", description = "Data format")
public String format;
public static void main(String[] args) throws IOException {
CustomerDataGenerator generator = new CustomerDataGenerator();
JCommander jCommander = new JCommander(generator);
try {
jCommander.parse(args);
} catch (ParameterException ex) {
jCommander.usage();
return;
}
generator.run();
}
public void run() throws IOException {
List<CustomerData> customers = generateCustomer(count);
if (format.equals("csv")) {
saveAsCsv(customers, new File(file));
} else if (format.equals("xml")) {
saveAsXml(customers, new File(file));
} else if (format.equals("json")) {
saveAsJson(customers, new File(file));
} else {
System.out.println("Unrecognized format " + format);
}
}
private void saveAsJson(List<CustomerData> customers, File file) throws IOException {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(customers);
try (Writer writer = new FileWriter(file)) {
writer.write(json);
}
}
private void saveAsXml(List<CustomerData> customers, File file) throws IOException {
XStream xstream = new XStream();
xstream.processAnnotations(CustomerData.class);
String xml = xstream.toXML(customers);
try (Writer writer = new FileWriter(file)) {
writer.write(xml);
}
}
private void saveAsCsv(List<CustomerData> customers, File file) throws IOException {
System.out.println(new File(".").getAbsolutePath()); // узнает относительный путь к файлу
try (Writer writer = new FileWriter(file)) {
for (CustomerData customer : customers) {
writer.write(String.format("%s;%s\n", customer.getFirstname(), customer.getLastname(), customer.getDateOfBirth(), customer.getBurthCountry(), customer.getPlaceOfBirth(), customer.getSex(), customer.getEmail(), customer.getPhone(), customer.getPassportNumber()));
}
}
}
private static List<CustomerData> generateCustomer(int count) {
List<CustomerData> customers = new ArrayList<CustomerData>();
for (int i = 0; i < count; i++) {
customers.add(new CustomerData().withTypeCustomer("Контрагент")
.withFirstname(String.format("Ирина", i))
.withLastname(String.format("Охотина", i))
.withDateOfBirth(String.format("1984-06-2%s", i))
.withBurthCountry(String.format("Российская Федерация", i))
.withPlaceOfBirth(String.format("Казань", i))
.withSex("Женский")
.withEmail(java.util.UUID.randomUUID().toString() + "@gmail.com")
.withPhone(String.format("234567%s", i))
.withPassportNumber(String.format("1234567%s", i))
.withPassportDateIssue(String.format("2015-06-1%s", i))
.withPassportIssueBy(String.format("OVD%s", i))
.withPassportDepartmentCode("136")
.withSnils("136-001")
.withInnCountry("Российская Федерация")
.withInnSourceType("Отсутствует ИНН")
.withInn("123456789")
.withRegistrationCountry("Российская Федерация")
.withCitizenshipAddress("РФ, г. Казань, ул. Мира, д.14")
.withPass(String.format("QWEasd123", i))
.withIdentityDocument(String.format("/home/irina_okhotina/Документы/Projects/java_pft/backoffice/src/test/resources/Doc%s.jpg", i+1))
.withDocumentConfirming(String.format("/home/irina_okhotina/Документы/Projects/java_pft/backoffice/src/test/resources/Doc%s.jpg", i+1))
);
}
return customers;
}
}
1. проверить, что для логина дано 5 попыток, после 3-1 попытки появляется варнинг месседж, что осталось 2 попытки, после 4, что осталось 1 попытка.
При этом, спросили, какие виды тестирования буду применять.
2. В интернет-магазине на странице товаа есть 5 фильтвром, последующий доступен, после того как выбрано значение предыдущего фильтра. Спросили как буду тестировать и сколько время на это нужно.
Дорогие коллеги, поделитесь опытом, ибо я не знаю.