При запуске из консоли или в DEBUG всё работает! Потаенный баг IDEA видимо.
- Форум тестировщиков
- → Публикации Dmitry2017
14 публикаций создано Dmitry2017 (учитываются публикации только с 19 апреля 2023)
Отправлено автор: Dmitry2017 30 октября 2019 - 17:51 в Автоматизированное тестирование
При запуске из консоли или в DEBUG всё работает! Потаенный баг IDEA видимо.
Отправлено автор: 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)
Отправлено автор: 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(); ... }
Структура пакета такая:
Первый же тест падает с
Отправлено автор: 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 и т.д.?
Отправлено автор: Dmitry2017 23 октября 2019 - 15:57 в Автоматизированное тестирование
Коллеги, добровольного времени суток!
Кто-нибудь в своей практике решал вопрос интеграции прогона в Test Rail с автотестами. (Результаты автотестов должны автоматически пролиться в результаты прогона).
Нашел статью на эту тему: https://testarenablo...tion-framework/
Вроде описаны все необходимые методы (createTestRailInstance(), setProjectSuiteId, createRun(), addResult и т.д.).
Но не понимаю как их прикрутить конкретно к своим автотестам.
Кому-нибудь удалось реализовать на практике такой подход?
Или какой-либо альтернативный?
Отправлено автор: 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 с двухуровневой структурой.
Отправлено автор: 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)
Опять чего то не так :(
Отправлено автор: 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
Как думаете, что здесь не так?
Отправлено автор: 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 }
Отправлено автор: 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-конфигом.
Отправлено автор: 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>
Кто-нибудь решал подобную проблему в своей практике?
Отправлено автор: Dmitry2017 01 августа 2019 - 14:01 в Автоматизированное тестирование
Да, сталкивалась, решаю именно указанным мною способом.
Как вариант - пройтись дебаггером, чтобы четко отловить, на какой конкретно строчке "падает", почему не попадает в catch (может там не UnhandledAlertException, а какой-то другой эксепшн тест фейлит).
Ещё вариант, сделать catch (Exception e) и там первым делом выводить e.printStackTrace() (самостоятельно выведет в лог) или e.getLocalizedMessage() (просто текст, выводить в лог надо вручную).
Татьяна, большое спасибо!
Проблему решил, вставив закрытие алерта непосредственно перед снятием скриншота.
Тут, конечно, минус в том, что алерт не попадает в скриншот, но хотя бы тестовый набор продолжает выполняться дальше.
Отправлено автор: Dmitry2017 29 июля 2019 - 09:13 в Автоматизированное тестирование
Можно в лог выводить текст алерта, а потом закрывать его и фоткать страницу.
Татьяна, спасибо за стремление помочь! А Вы в своей практике сталкивались с такой проблемой?
Просто я пытался добавить метод закрытия алерта, но как раз в этом и оказалась проблема. Моя программа (автотест) не передает управление методу закрытия алерта. Хотя я и завернул основной код теста (в котором ловится баг) в try, а закрытие алерта поместил в catch (UnhandledAlertException e). Почему-то выполнение не доходит до catch.
Отправлено автор: 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();
}
}
Community Forum Software by IP.Board Русификация от IBResource
Лицензия зарегистрирована на: Software-Testing.Ru