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

Фотография

Хранение тестовых данных


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 Amir

Amir

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Фаткуллин Амир Рустемович


Отправлено 15 февраля 2018 - 11:06

как можно организовать хранение тестовых данных? selenium+java+junit. Допустим, я создаю учетную запись. Мне нужно запомнить ФИО учетки. А затем в других тест-кейсах на основе запомненного ФИО  обращаться к этой учетке.

 


  • 0

#2 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 15 февраля 2018 - 11:10

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

 

в TestNG элементарно хранить в ITestContext


  • 0

#3 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 15 февраля 2018 - 11:27

Почему, как только добавляются "Selenium+JUnit" или "Selenium+TestNG" все тут же забывают, про сам ЯП, на котором все это пишется?

 

С точки зрения Java Ваши "тесты" - обычные методы со всеми вытекающими отсюда последствиями / возможностями / ограничениями и пр. 

Можно к примеру, сделать статическую переменную public sttaic UserAccount userAccount. В одном тесте Вы её создаете и заполняете, в другом её же используете (главное не забывать про порядок запуска тестов при запуске (чтобы у Вас использование не вызывалось раньше создания / заполнения).

Указывать порядок вручную - не комильфо. 

Опять таки, как вариант - тест создания учётки у Вас идёт отдельно, если Вы само создание тестируете.

А в остальных тестах - смотрите, заполнен ли уже userAccount, если нет - вызываете тест (метод), который эту учетку создаст вам.

 

Что-то вроде:

public static UserAccount userAccount = null;

@Test
public void createAccount() {    
    userAccount = new UserAccount(<нужные Вам параметры, которые в конструкторе указали>)
    ... // сам "тест", которую создаст учётку с нужными данными    
}

private void prepareAccount() {    
    if (userAccount == null) {
        createAccount();
    } 
}

@Test
private void checkSmthWithUserAccount1() {    
    prepareAccount();
    doSmthWithAccount1(); // сам "тест", данные аккаунта берутся из статической переменной userAccount 
}

@Test
private void checkSmthWithUserAccount2() {    
    prepareAccount();
    doSmthWithAccount2(); // сам "тест", данные аккаунта берутся из статической переменной userAccount 
}

  • 0

#4 Amir

Amir

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Фаткуллин Амир Рустемович


Отправлено 15 февраля 2018 - 11:44

 

Почему, как только добавляются "Selenium+JUnit" или "Selenium+TestNG" все тут же забывают, про сам ЯП, на котором все это пишется?

 

С точки зрения Java Ваши "тесты" - обычные методы со всеми вытекающими отсюда последствиями / возможностями / ограничениями и пр. 

Можно к примеру, сделать статическую переменную public sttaic UserAccount userAccount. В одном тесте Вы её создаете и заполняете, в другом её же используете (главное не забывать про порядок запуска тестов при запуске (чтобы у Вас использование не вызывалось раньше создания / заполнения).

Указывать порядок вручную - не комильфо. 

Опять таки, как вариант - тест создания учётки у Вас идёт отдельно, если Вы само создание тестируете.

А в остальных тестах - смотрите, заполнен ли уже userAccount, если нет - вызываете тест (метод), который эту учетку создаст вам.

 

Что-то вроде:

public static UserAccount userAccount = null;

@Test
public void createAccount() {    
    userAccount = new UserAccount(<нужные Вам параметры, которые в конструкторе указали>)
    ... // сам "тест", которую создаст учётку с нужными данными    
}

private void prepareAccount() {    
    if (userAccount == null) {
        createAccount();
    } 
}

@Test
private void checkSmthWithUserAccount1() {    
    prepareAccount();
    doSmthWithAccount1(); // сам "тест", данные аккаунта берутся из статической переменной userAccount 
}

@Test
private void checkSmthWithUserAccount2() {    
    prepareAccount();
    doSmthWithAccount2(); // сам "тест", данные аккаунта берутся из статической переменной userAccount 
}

Благодарю за такой развернутый ответ:)


  • 0

#5 Amir

Amir

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Фаткуллин Амир Рустемович


Отправлено 15 февраля 2018 - 11:44

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

 

в TestNG элементарно хранить в ITestContext

Спасибо, не знал об этом.


  • 0

#6 cpmBugHunter

cpmBugHunter

    Новый участник

  • Members
  • Pip
  • 45 сообщений
  • ФИО:Евгений
  • Город:Ростов-на-Дону


Отправлено 15 февраля 2018 - 15:28

Стоит, наверно, напомнить про "правила хорошего тона" при написании тестов. А именно о том правиле, которое рекомендует удалять после себя созданные данные. Иначе, при следующем запуске теста на создание юзера он у вас просто упадет, если поля нового объекта не заполняются рандомно. Т.к. такой аккаунт уже был создан ранее. Поэтому, я бы рекомендовал еще добавить метод @AfterClass, который в самом конце удалял бы созданного в самом начале юзера. Ну или при каждом создании генерить юзера с рандомными данными и забивать этими юзерами базу. А потом ее периодически чистить или менять на более чистую.


  • 0

#7 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 16 февраля 2018 - 00:54

попробуйте мой проект 
https://github.com/s...-dataproviders 

- хранить данные для методов в Excel / Open Office / JSON

 

- естественно есть похожие проекты свой я просто лучше знаю...

```

@Test
@ExcelParameters(filepath = "classpath:data_2007.xlsx", sheetName = "", type = "Excel 2007")
public void loadParamsFromEmbeddedExcel2007(double rowNum, String keyword, double count) {
    

...

```

 

почитайте README.md ну и проект сам себя тестирует на трависе - не помню  точно сейчас с реальным селениумом или нет -  пишите если есть вопросы 


  • 0

#8 Amir

Amir

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Фаткуллин Амир Рустемович


Отправлено 16 февраля 2018 - 06:10

Стоит, наверно, напомнить про "правила хорошего тона" при написании тестов. А именно о том правиле, которое рекомендует удалять после себя созданные данные. Иначе, при следующем запуске теста на создание юзера он у вас просто упадет, если поля нового объекта не заполняются рандомно. Т.к. такой аккаунт уже был создан ранее. Поэтому, я бы рекомендовал еще добавить метод @AfterClass, который в самом конце удалял бы созданного в самом начале юзера. Ну или при каждом создании генерить юзера с рандомными данными и забивать этими юзерами базу. А потом ее периодически чистить или менять на более чистую.

Удаление учетки я сделал.


  • 0

#9 Amir

Amir

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Фаткуллин Амир Рустемович


Отправлено 16 февраля 2018 - 06:23

попробуйте мой проект 
https://github.com/s...-dataproviders 

- хранить данные для методов в Excel / Open Office / JSON

 

- естественно есть похожие проекты свой я просто лучше знаю...

```

@Test
@ExcelParameters(filepath = "classpath:data_2007.xlsx", sheetName = "", type = "Excel 2007")
public void loadParamsFromEmbeddedExcel2007(double rowNum, String keyword, double count) {
    

...

```

 

почитайте README.md ну и проект сам себя тестирует на трависе - не помню  точно сейчас с реальным селениумом или нет -  пишите если есть вопросы 

Ссылка битая. Не получилось найти репозиторий.


  • 0

#10 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 16 февраля 2018 - 07:17

 

попробуйте мой проект 
https://github.com/s...-dataproviders 

- хранить данные для методов в Excel / Open Office / JSON

 

- естественно есть похожие проекты свой я просто лучше знаю...

```

@Test
@ExcelParameters(filepath = "classpath:data_2007.xlsx", sheetName = "", type = "Excel 2007")
public void loadParamsFromEmbeddedExcel2007(double rowNum, String keyword, double count) {
    

...

```

 

почитайте README.md ну и проект сам себя тестирует на трависе - не помню  точно сейчас с реальным селениумом или нет -  пишите если есть вопросы 

Ссылка битая. Не получилось найти репозиторий.

 

Пробел убери в конце

https://github.com/s...t-dataproviders


  • 0

#11 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 16 февраля 2018 - 13:33

 
спасибо что заметили
 
 
JUnit-DataProviders 
 
This project exercises the following data providers with JUnitParams

Usage
  • Create the Excel 2003, Excel 2007 or Open Office Spreadsheet with test parameters e.g.

 

 

* Annotate the test methods in the following way:
```java
@Test
@ExcelParameters(filepath = "classpath:data_2007.xlsx", sheetName = "", type = "Excel 2007")
public void loadParamsFromEmbeddedExcel2007(double rowNum, String keyword, double count) {
assumeTrue("search", keyword.matches("(?:junit|testng|spock)"));
assertThat((int) count).isGreaterThan(0);
}
```
пожалуйста читайте дальше в READE.md

 

 

To use the snapshot version, add the following to pom.xml:

<dependency>
<groupId>com.github.sergueik.junitparams</groupId>
<artifactId>junit_params</artifactId>
<version>0.0.7-SNAPSHOT</version>
</dependency>

<repositories>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype...ies/snapshots</url>
</repository>
</repositories>

  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных