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

Публикации Dmitry2017

14 публикаций создано Dmitry2017 (учитываются публикации только с 19 апреля 2023)


#174274 Не работает группировка тестов в Java+TestNG

Отправлено автор: Dmitry2017 30 октября 2019 - 17:51 в Автоматизированное тестирование

При запуске из консоли или в DEBUG всё работает! Потаенный баг IDEA видимо.




#174272 Не работает группировка тестов в Java+TestNG

Отправлено автор: Dmitry2017 30 октября 2019 - 10:17 в Автоматизированное тестирование

Сразу добавлю, что попытки добавить в фикстуру  alwaysRun = true не помогают, а приводят к падению на уровне фикстуры.

  @BeforeTest(alwaysRun = true)
  public void setUp(ITestContext context) throws Exception {
    app.init();
    context.setAttribute("app", app);
  }

  @BeforeClass(alwaysRun = true)
  public void setClass() {
    app.refreshPageObjects();
  }

В консоль при этом выдается  Process finished with exit code -1073741819 (0xC0000005)




#174271 Не работает группировка тестов в Java+TestNG

Отправлено автор: Dmitry2017 30 октября 2019 - 10:10 в Автоматизированное тестирование

Коллеги, приветствую!

Кто-нибудь сталкивался с проблемой при попытке запустить группу TestNG-тестов?

Написал такой конфиг (его и пытаюсь запустить):

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite1" verbose="1" >
    <test name="MessagePublishingTests" >
        <groups>
            <run>
                <include name="au"></include>
            </run>
        </groups>
        <packages>
            <package name="ru.qa.test.bankrot.tests.group" />
        </packages>
    </test>
</suite> 

Тесты выглядят так:

public class MessagePublishingTestsGroup extends TestBase {
  
  @Test(groups = {"au"})
  @Description("Опубликовать \"Сообщение 1\"")
  public void testMessageArbitralDecree() throws InterruptedException {
    app.getMessagesListPage().clickAddMessage();  
    ....
  }

  @Test(groups = { "au", "otfl"})
  @Description("Опубликовать \"Иное\"")
  public void testMessageOther() throws InterruptedException {
    app.getMessagesListPage().clickAddMessage();
    ...
  }

  @Test(groups = {"otfl"})
  @Description("Опубликовать \"ранее опубликованное\"")
  public void testMessageAnnul() throws InterruptedException {
    app.getMessagesListPage().clickAddMessage();
    ...
  }

Структура пакета такая:

Структура пакета.jpg

 

Первый же тест падает с

java.lang.NullPointerException
at ru.qa.test.bankrot.tests.MyTestListener.onTestFailure(MyTestListener.java:24)
at org.testng.internal.TestListenerHelper.runTestListeners(TestListenerHelper.java:67)
at org.testng.internal.Invoker.runTestListeners(Invoker.java:1389)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1042)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
at org.testng.SuiteRunner.run(SuiteRunner.java:364)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
at org.testng.TestNG.runSuites(TestNG.java:1049)
at org.testng.TestNG.run(TestNG.java:1017)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
 
Process finished with exit code -1073741819 (0xC0000005)
 
Не подскажите, что сделать, чтобы тесты заработали?

 




#174178 Интеграция Test Rail с TestNG-тестами

Отправлено автор: Dmitry2017 24 октября 2019 - 17:49 в Автоматизированное тестирование

И что там непонятного ?

 

//указываем урл, логин/пароль и имя Проекта

TestRail testRail = TestRail.builder("урл", "login", "password")
.applicationName("Имя проекта").build();

 

Потом создаешь тест-ран:

Run run = testRail.runs().add(X, new Run().setSuiteId(Y).setName("Test Runs")).execute();

X - это id проекта

Y - это group_id сьюта

Test Runs - это имя сьюта

Потом :

// собираешь результирующие пля
List<ResultField> customResultFields = testRail.resultFields().list().execute();

testRail.results().addForCase(run.getId(), 72555, new Result().setStatusId(1), customResultFields).execute();

//ни и проставить статусы:

testRail.results().addForCase(run.getId(), Z, new Result().setStatusId(1), customResultFields).execute();

Z - id тесткейса

1 - это статус Пассед, 2 - блокет и т.п

 

Вот я и не понимаю, откуда моя джоба, запущенная в Дженкенсе, узнает значения этих X, Y, Z, Test Runs и т.д.?




#174155 Интеграция Test Rail с TestNG-тестами

Отправлено автор: Dmitry2017 23 октября 2019 - 15:57 в Автоматизированное тестирование

Коллеги, добровольного времени суток!

Кто-нибудь в своей практике решал вопрос интеграции прогона в Test Rail с автотестами. (Результаты автотестов должны автоматически пролиться в результаты прогона).

Нашел статью на эту тему: https://testarenablo...tion-framework/

Вроде описаны все необходимые методы (createTestRailInstance(), setProjectSuiteId, createRun(), addResult и т.д.).

Но не понимаю как их прикрутить конкретно к своим автотестам.

Кому-нибудь удалось реализовать на практике такой подход?

Или какой-либо альтернативный?

 




#174085 Конвертация JSON в HashMap (язык Java)

Отправлено автор: Dmitry2017 19 октября 2019 - 10:54 в Автоматизированное тестирование

Все так, только убери final - это не надо и добавь пустой конструктор 

public User() {

}

Ну и для красивого вывода toString переопредели

Проверил у себя - работает

[User{name='AU', login='Anisimov', password='ZTd9Pn'}, User{name='OTUR', login='interfax_ot_ur', password='123456'}]

 

Огромное спасибо за советы! Все заработало! И даже с более сложным JSON с двухуровневой структурой.




#174027 Конвертация JSON в HashMap (язык Java)

Отправлено автор: Dmitry2017 16 октября 2019 - 10:26 в Автоматизированное тестирование

 

Зачем тебе вообще HashMap ? 

 

Идея с HashMap заключается в работе с двухуровневой структурой в JSON. Типа "ключ - значение".

Из командной строки запуска теста хочу передавать тип User'a (например, "AU"). Далее по ключу "AU" получать его логин и пароль.

Насколько я понимаю List<Userбудет работать с одноуровневой структурой.

Но я попытался преобразовать JSON в одноуровневую:

[
  {
    "name": "AU",
    "login": "Anisimov",
    "password": "ZTd9Pn"
  },
  {
  "name": "OTUR",
  "login": "interfax_ot_ur",
  "password": "123456"
  }
]

При этом да - сделал класс User:

public class User {
  private final String name;
  private final String login;
  private final String password;

  public User(String name,String login, String password) {
    this.name = name;
    this.login = login;
    this.password = password;
  }

  public String getName() {
    return name;
  }

  public String getLogin() {
    return login;
  }

  public String getPassword() {
    return password;
  }
}

и вставил предлагаемый тобой код:

ObjectMapper objectMapper = new ObjectMapper();
List<User> users = objectMapper.readValue(new File("config3.json"), new TypeReference<List<User>>(){});

Теперь при запуске получаю исключение: Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `ru.qa.test.bankrot.model.User` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

Опять чего то не так :(




#174017 Конвертация JSON в HashMap (язык Java)

Отправлено автор: Dmitry2017 15 октября 2019 - 17:04 в Автоматизированное тестирование

Коллеги, приветствую!

Проблема в следующем. Имеется конфиг в формате JSON.

Задача десериализовать конфиг-параметры и использовать их в автотестах.

JSON при этом такой:

{
  "AU": {
    "login": "Anisimov",
    "password": "ZTd9Pn"
  },
  "OTUR": {
    "login": "interfax_ot_ur",
    "password": "123456"
  }
}

Код, которым пытаюсь решить задачу (с помощью jackson) такой:

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.*;
import java.util.*;

public class MyHashMapJsonTest {

public static void main(String[] args) throws IOException {

  BufferedReader reader = new BufferedReader(new FileReader(new File("config/config2.json")));
  HashMap<String, List<String>> result = new ObjectMapper().readValue(reader, HashMap.class);
   
  List<String> currentRole = (List<String>) result.get("AU");
  System.out.println(currentRole); 

На предпоследней строке код падает с исключением  Exception in thread "main" java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.util.List

Как думаете, что здесь не так?




#174016 Установка System Property для тестов в build.gradle

Отправлено автор: Dmitry2017 15 октября 2019 - 14:08 в Автоматизированное тестирование

 

Чтобы переменные были видны в самом приложении, то надо их сеттить в разделе:


run {   
    systemProperties['login.name'] = login
    systemProperties['login.password'] = password
}

plugins {
    id 'application'
}

Большое спасибо! А не подскажите, как "совместить" этот run с моим, приведенным выше,  task test1(type: Test)  ?

Дело в том, что я запускаю именно task.

Дописывание run в конец task не помогает:

task test1(type: Test) {
    useTestNG() {
        suites 'src/test/resources/testng-message-AU.xml'
    }
    if (project.hasProperty('role')){
        systemProperty 'role', "${role}"
    }
    if("AU".equals(System.getProperty("role"))) {
        doLast {
            def jsonFile = file('config/config.json')
            def parsedJson = new groovy.json.JsonSlurper().parseText(jsonFile.text)
            login = parsedJson.test.AU.login
            password = parsedJson.test.AU.password
        }
    }
    run
}



#174001 Установка System Property для тестов в build.gradle

Отправлено автор: Dmitry2017 12 октября 2019 - 14:49 в Автоматизированное тестирование

Коллеги, здравствуйте!

Я впервые столкнулся с задачей работы с JSON-конфиг. файлом.

Есть такой конфиг в формате JSON (вид привожу сокращенный):

{
  "conturs": {
    "test": [
      {
        "baseurl": "http://bank.devel.ifr/",
        "AU": {
          "login": "Anisimov",
          "password": "123456"
        },
        "OTUR": {
          "login": "interfax_ot_ur",
          "password": "123456"
        }
      }
    ]
  }
} 

Я научился читать в build.gradle параметры из этого JSON:

task test1(type: Test) {
    useTestNG(){
        suites 'src/test/resources/testng-message-AU.xml'
    }
    if (project.hasProperty('role')) {
        systemProperty 'role', "${role}" 
        if("AU".equals(System.getProperty("role"))) {
            doLast {
                def jsonFile = file('config/config.json')
                def parsedJson = new groovy.json.JsonSlurper().parseText(jsonFile.text)
                String login = parsedJson.conturs.test.AU.login
                String password = parsedJson.conturs.test.AU.password
                println login
                println password
            }
        }
    }
} 

Т.е. из командной строки запуска выбирается роль (${role}). В данном примере это роль "AU".

Далее считываю логин и пароль из конфига для данной роли.

Но не получается передать найденный логопас через System Property в фикструру тестов.

Например, пробовал дописать в данную task функцию 

System.properties.'login'=login

Однако System.getProperty("login") в фикстуре неизменно получает null.

Коллеги, сталкивались ли вы с подобной задачей? Подскажите, пожалуйста, - как решали?

Или может быть вообще какой-то другой путь есть для работы с JSON-конфигом.

 




#173905 Запись видео при выполнении теста (TestNG)

Отправлено автор: Dmitry2017 30 сентября 2019 - 17:32 в Selenium - Functional Testing

Коллеги, здравствуйте!

Пытаюсь прикрутить к своему тестовому фреймворку (Selenium + TestNG + Gradle) запись видео.

Нашел (из курса Алексей Баранцева «Эффективное использование TestNG и JUnit») реализацию VideoListener.

 

https://github.com/b...ricky4/sample34

 

Проблема в том, что не знаю, как в VideoCreator обеспечить необходимые импорты:

import com.xuggle.mediatool.IMediaWriter;
import com.xuggle.mediatool.ToolFactory;

 

Возможно просто не хватает знаний по Gradle. (В учебном курсе применяется Maven).

В Maven это решается так:

 

<repositories>   <repository>   <id>xuggle repo</id>   <url>http://xuggle.google...o/share/java/</url>   </repository> </repositories>  

 

Кто-нибудь решал подобную проблему в своей практике?

 

 

 




#173164 Проблема снятия скриншота при UnhandledAlertException

Отправлено автор: Dmitry2017 01 августа 2019 - 14:01 в Автоматизированное тестирование

Да, сталкивалась, решаю именно указанным мною способом.

Как вариант - пройтись дебаггером, чтобы четко отловить, на какой конкретно строчке "падает", почему не попадает в catch (может там не UnhandledAlertException, а какой-то другой эксепшн тест фейлит).

Ещё вариант, сделать catch (Exception e) и там первым делом выводить e.printStackTrace() (самостоятельно выведет в лог) или e.getLocalizedMessage() (просто текст, выводить в лог надо вручную).

Татьяна, большое спасибо!

Проблему решил, вставив закрытие алерта непосредственно перед снятием скриншота.

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




#173095 Проблема снятия скриншота при UnhandledAlertException

Отправлено автор: Dmitry2017 29 июля 2019 - 09:13 в Автоматизированное тестирование

Можно в лог выводить текст алерта, а потом закрывать его и фоткать страницу.

Татьяна, спасибо за стремление помочь! А Вы в своей практике сталкивались с такой проблемой?

Просто я пытался добавить метод закрытия алерта, но как раз в этом и оказалась проблема. Моя программа (автотест) не передает управление методу закрытия алерта. Хотя я и завернул основной код теста (в котором ловится баг) в try, а закрытие алерта поместил в catch (UnhandledAlertException e). Почему-то выполнение не доходит до catch.




#173060 Проблема снятия скриншота при UnhandledAlertException

Отправлено автор: Dmitry2017 25 июля 2019 - 13:35 в Автоматизированное тестирование

Доброго времени суток! Подскажите, пожалуйста. При возникновении в тесте исключения UnhandledAlertException почему-то не может успешно отработать метод создания скриншота. Сам тест навечно повисает (в среде разработки выводится статус Stopped). При ловле других ошибок скриншот создается, тест не повисает, а штатно падает.

Автотесты построены на Java + Selenium + TestNG.

Каким путем можно решить эту проблему?

 

Метод снятия скриншота подключаю так:

 

import org.testng.ITestContext;

import org.testng.annotations.*;

 

 

@Listeners(MyTestListener.class)

public class TestBase {

  protected final ApplicationManager app = new ApplicationManager(System.getProperty("browser", BrowserType.CHROME));

 

  @BeforeTest

  public void setUp(ITestContext context) throws Exception {

    app.init();

    context.setAttribute("app", app);

  }

 

  @BeforeClass()

  public void classRefresh(){

    app.refreshPageObject();

  }

 

  @AfterTest

  public void tearDown() {

    app.stop();

  }

}