Должны ли тестовые данные передаваться из PageObject или тестовых классов?

Я разрабатываю структуру автоматизации с использованием Selenium Webdriver по шаблону PageObject, где есть 2 слоя:

  • Классы тестов (спецификация тестов)
  • Классы PageObject (тестовая реализация)

Мои тестовые классы содержат методы аннотации TestNG (@Test, @BeforeTest, @AfterTest и т. д.), где я создаю объекты классов PageObject и вызываю методы в этих классах, которые фактически будут взаимодействовать с AUT.

То, как я передаю данные в тесты, включает:

  • Все локаторы (локаторы css/xpath/class/id) элементов в приложении.
  • Все необходимые тестовые данные

в файле свойств (например, testDataSet1.properties). Я создаю HashMap<String, String> файла свойств и передаю его в качестве параметра всем объектам страницы, которые будут считывать данные из хэш-карты и использовать их в сценарии. Я вообще не передаю тестовые данные из тестовых классов.

В чем моя проблема, я не уверен, уместно ли читать тестовые данные в PageObjects. У меня такое ощущение, что этот подход очень негибкий, потому что я привязываю тестовые данные к PageObjects вместо того, чтобы привязывать их к тестам. Поэтому, когда мне нужно выполнить тесты на основе данных/запустить пакет автоматизации в нескольких итерациях, это не сработает. Потому что в настоящее время, если мне нужно использовать разные данные каждый раз, когда мне нужно вручную перейти и изменить ключ, указанный в хэш-карте, который получит другое значение из файла свойств.

Какие-либо предложения?


person Abhijeet Vaikar    schedule 28.03.2013    source источник


Ответы (1)


Мне лично нравится, когда объект страницы действует как сама веб-страница, предоставляя мне действия для выполнения и методы проверки для использования. Например, я храню все свои селекторы CSS, ID и т. д. внутри самого объекта страницы. Таким образом, если когда-либо будет обновление веб-страницы, которое нарушит тесты, я просто перейду к соответствующему объекту страницы для этой веб-страницы и обновлю там селектор.

Что касается тестовых данных, у меня есть некоторые другие файлы (классы, свойства и т. д.), которые я использую для извлечения тестовых данных, например. тестовые пользователи. Сами тестовые классы извлекают эти тестовые данные и передают их в объекты страницы (при необходимости) или в методы объекта страницы для целей проверки.

Пример класса тестовых данных (мой немного сложнее, но это простой пример):

public TestUser(){
    username = getUniqueUser();
    password = ""; 
    name = "Test User";
    email = getUniqueEmail(username);
}

tl;dr;

  • Я сохраняю селекторы html в соответствующих объектах страницы (при необходимости можно использовать объекты подстраницы для повторного использования).
  • Я храню тестовые данные, смешанные между классами, файлами свойств и тестовыми классами.
person Brett    schedule 28.03.2013
comment
Не могли бы вы привести пример того, как вы используете классы для извлечения тестовых данных? Вы имеете в виду класс TestNG? Кроме того, могу ли я вывести из вашего ответа, что тестовые данные предназначены для передачи из тестовых классов? - person Abhijeet Vaikar; 28.03.2013
comment
иногда я включаю тестовые данные в объект страницы, но это для очень специфических случаев. В противном случае я передаю свои тестовые данные в объект страницы из тестового класса. - person Brett; 28.03.2013
comment
Спасибо! Попробую изменить по вашему совету! - person Abhijeet Vaikar; 29.03.2013
comment
Кроме того, вы храните свои тестовые данные только в файлах свойств или в базе данных? Мне кажется обременительным управлять тестовыми данными в файлах свойств. Но я использую их на данный момент, потому что мне нужно скоро получить работающую структуру. - person Abhijeet Vaikar; 29.03.2013
comment
В настоящее время у меня есть ограниченный набор тестовых данных, которые я использую (например, тестовые пользователи). Поэтому я храню его в файлах/классах. Я мог бы использовать базу данных, но это не было бы существенным переходом от использования чего-то вроде моего класса TestUser. В частности, вы замените жестко закодированные строки доступом к базе данных. - person Brett; 29.03.2013