Перейти к содержимому

Okhotina_Irina

Регистрация: 26 сен 2017
Offline Активность: 15 июн 2020 14:02
-----

Мои темы

Инициализация и очистка тестовых данных TestNG

24 октября 2018 - 13:34

Добрый день.

После прохождения курсов Алексея Баранцева решила попробовать свои силы в тестировании приложения, над которым я тружусь в ручном режиме.

Приложение представляет из себя 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;
  }
}