Если вы хотите написать тест не зависящий от данных, или вам при тестировании приходится часто менять тестовые данные - эта статья для вас.
1. В чем заключается проблема ?
Тестовые данные могут изменяться и жестко заносить их в код тестов не самая лучшая идея. Гораздо лучшей идеей было -бы хранить эти данные отдельно и предоставить к ним доступ всем необходимым тестам.
2. Как этого добиться ?
Я усматриваю несколько путей к реализации такого доступа.
1) Хранить данные в БД
2) Properties
3) Сериализация
Я не буду рассматривать все плюсы и минуса каждого подхода, а конкретно поговорю о последнем.
Сериализация - процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации — восстановление начального состояния структуры данных из битовой последовательности.
Выглядит вполне интересно... Но обычная сериализация переводит обьект в совсем уж неудобоваримый формат, который править руками нет никакой возможности.
Есть решение этого. Сериализация в XML файл. В итоге такой сериализации мы получим на выходе читабельный и редактируемый файл.
Рассмотрим пример. Напишем класс который хранит в себе логин и пароль пользователя.
public class LoginInfo{
String login = "name";
String password = "pass";
}
В классе всего 2 строковых поля. Как данный класс будет выглядеть в сериализованном виде ?
Давайте посмотрим.
Для сериализации я использую библиотеку XStream.
LoginInfo info= new LoginInfo();
System.out.println(new XStream().toXml(info));
Выполнение этих двух строчек кода выведет нам в консоль примерно следующее
<LoginInfo>
<login>name</login>
<password>pass</password>
</LoginInfo>
сохранив эту информация в xml файл мы можем восстановить объект оттуда.
LoginInfo info2= (LoginInfo) new XStream().fromXml(new FileInputStream("file.xml"));
Таким образом мы можем однажды описать структура с данными и хранить ее во внешнем файле. и при необходимости менять эти данные и при десериализации они будут подтягиваться в ваш код, необходимость менять сам код отпадает.
пример теста использующего этот подход:
LoginInfo info=null;
@BeforeMethod
public void before(){
info=(LoginInfo) new XStream().fromXml(new FileInputStream("file.xml"));
}
@Test
public void test(){
FirefosDriver firefox = new FirefoxDriver();
firefox.findElement(By...).sendKeys(info.login);
firefox.findElement(By...).sendKeys(info.password);
}
1. В чем заключается проблема ?
Тестовые данные могут изменяться и жестко заносить их в код тестов не самая лучшая идея. Гораздо лучшей идеей было -бы хранить эти данные отдельно и предоставить к ним доступ всем необходимым тестам.
2. Как этого добиться ?
Я усматриваю несколько путей к реализации такого доступа.
1) Хранить данные в БД
2) Properties
3) Сериализация
Я не буду рассматривать все плюсы и минуса каждого подхода, а конкретно поговорю о последнем.
Сериализация - процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации — восстановление начального состояния структуры данных из битовой последовательности.
Выглядит вполне интересно... Но обычная сериализация переводит обьект в совсем уж неудобоваримый формат, который править руками нет никакой возможности.
Есть решение этого. Сериализация в XML файл. В итоге такой сериализации мы получим на выходе читабельный и редактируемый файл.
Рассмотрим пример. Напишем класс который хранит в себе логин и пароль пользователя.
public class LoginInfo{
String login = "name";
String password = "pass";
}
В классе всего 2 строковых поля. Как данный класс будет выглядеть в сериализованном виде ?
Давайте посмотрим.
Для сериализации я использую библиотеку XStream.
LoginInfo info= new LoginInfo();
System.out.println(new XStream().toXml(info));
Выполнение этих двух строчек кода выведет нам в консоль примерно следующее
<LoginInfo>
<login>name</login>
<password>pass</password>
</LoginInfo>
сохранив эту информация в xml файл мы можем восстановить объект оттуда.
LoginInfo info2= (LoginInfo) new XStream().fromXml(new FileInputStream("file.xml"));
Таким образом мы можем однажды описать структура с данными и хранить ее во внешнем файле. и при необходимости менять эти данные и при десериализации они будут подтягиваться в ваш код, необходимость менять сам код отпадает.
пример теста использующего этот подход:
LoginInfo info=null;
@BeforeMethod
public void before(){
info=(LoginInfo) new XStream().fromXml(new FileInputStream("file.xml"));
}
@Test
public void test(){
FirefosDriver firefox = new FirefoxDriver();
firefox.findElement(By...).sendKeys(info.login);
firefox.findElement(By...).sendKeys(info.password);
}
LoginInfo info= new LoginInfo();
ОтветитьУдалитьSystem.out.println(new XStream().toXml());
Кажется здесь не хватает передачи ссыли на инфо. Не смотрел апи, не уверен куда именно, в конструктор или метод.