SlideShare ist ein Scribd-Unternehmen logo
1 von 27
От Зефира в коробке к
Structure Zephyr
или
Как тест-менеджеру
перекроить внутренности JIRA
Никита Налютин
Experian
Предупреждение
В презентации есть
быдлокод (с багами) грязные трюки
и
Код здесь: https://github.com/p1ne/jira-zephyr-plus-structure/
О чем будем говорить
• Что такое Zephyr и Structure
• Зачем дружить Zephyr и Structure
• Как влезть в JIRA скриптами
• Как влезть в БД JIRA
• Как влезть в форматирование страниц
• Как этим всем сделать всем хорошо
• Как этого не делать
• …и о муми-троллях…
Structure – как все красиво организовать
marketplace.atlassian.com/plugins/com.almworks.jira.structure
Zephyr - как выглядят тесты
marketplace.atlassian.com/plugins/com.thed.zephyr.je
Хотим вот такой вид тестов
Хотим вот такую отчетность
Проблема
• Тест и прогон теста – разные сущности
• Статусы тестов – поля прогона теста, а не теста
• Нужен механизм проброса статуса теста на уровень теста
• Статус теста может быть разным в разных версиях/прогонах
• Выход – поля
• Latest test status
• Latest test execution
Скриптовые поля: Adaptivist Script Runner
marketplace.atlassian.com/plugins/com.onresolve.jira.groovy.groovyrunner/
Вариант реализации: ZAPI
"http://jira/rest/zapi/latest/execution?issueId=" + issueID
URLConnection urlConnection = url.openConnection();
…
BufferedReader reader = new BufferedReader( new
InputStreamReader(urlConnection.getInputStream()));
StringBuffer response = new StringBuffer();
…
def slurper = new JsonSlurper()
def result = slurper.parseText(response.toString())
if (result.recordsCount.toInteger() > 0) return
result.executions[0].versionName;
marketplace.atlassian.com/plugins/com.thed.zephyr.zapi/
Как увидеть таблицы плагинов
Как попробовать извлечь данные
marketplace/plugins/info.renjithv.jira.plugins.sysadmin.homedirectorybrowser
Вариант реализации: из базы
def delegator =
ComponentAccessor.getComponent(DelegatorInterface)
String helperName = delegator.getGroupHelperName("default");
StringBuffer sb = new StringBuffer()
def sqlStmt = ”...";
Connection conn =
ConnectionFactory.getConnection(helperName);
Sql sql = new Sql(conn)
sql.eachRow(sqlStmt) {
sb << "${it.status}”
def statusName = status[sb.toString()][0]
}
Как выбрать данные в скрипте
sqlStmt = "SELECT issue_id FROM ao_7deabf_schedule
where project_id = " + projectId + " and
(date_created between '" + timestamp.format(10.minutes.ago) +
"' and '" + timestamp.format(0.minutes.from.now) + "'
or executed_on between '" + (unixTime -
10*60*1000).toString() + "' and '" + unixTime.toString() +
"')
order by date_created desc";
Почему данные неактуальны?
• У Zephyr нет событий, означающих обновление test run
• JIRA кеширует значения атрибутов
• Поиск JQL работает исходя из кэша
• Частичное обновление кэша работает на весь проект
• Решение – периодическая перестройка кэша
Реиндекс и поиск: правильно,
но не работает
• Проблема: При попытке искать по кастом полям ничего не
находится или находится не все или не сразу
• Решение: само пройдет.
• Не проходит
• Решение: enableCache = {-> false}
• Не дает искать в принципе
Реиндекс: правильно,
но ооооочень долго
Пинаем реиндекс:
почти работает
def issueIndexManager =
ComponentAccessor.getIssueIndexManager();
def events = ComponentAccessor.getIssueEventManager();
sql.eachRow(sqlStmt) {
def issue =
ComponentAccessor.getIssueManager().getIssueObject(it.issue_i
d.toLong());
issueIndexManager.reIndex(issue);
events.dispatchEvent(EventType.ISSUE_UPDATED_ID, issue,
user, false);
}
Запуск реиндекса
• com.onresolve.jira.groovy.GroovyService – не заработало
• NSSM и периодический запуск ScriptRunner через POST
curl "http://jira/rest/scriptrunner/latest/user/exec/" ^
-H "Host: jira" ^
-H "Accept: application/json, text/javascript, */*; q=0.01" ^
-H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" ^
-H "X-Atlassian-Token: nocheck" ^
-H "X-Requested-With: XMLHttpRequest" ^
-H "Referer:
http://jira/plugins/servlet/scriptrunner/console?section=script_console" ^
--data "scriptText=&scriptFile=reindex.groovy&htmlText=&jsText="
https://nssm.cc/ https://curl.haxx.se/
А еще хотим выполнять тесты…
SELECT s.status, v.vname, s.id
FROM ao_7deabf_schedule s, projectversion v
WHERE s.project_id=" + projectId +
" and s.issue_id=" + issueId +
" and s.version_id = v.id
order by s.date_created desc
limit 1";
А еще хотим выполнять тесты…
if (!versionName.equals("") &&
(statusName.equals("UNEXECUTED") ||
statusName.equals("IN PROGRESS")) ) …
<a href="/secure/enav/#/" + executionId + "">
<span
class="trigger-label">Continue exec
</span>
</a>
А еще хотим выполнять тесты…
if (versionName.equals("")
<a id="zephyr-je-add-execute"
title="Execute Test"
class="toolbar-trigger viewissue-add-execute”
href="/secure/AddExecute!AddExecute.jspa?id=" +
issueId + "">
<span class="trigger-label">Exec new
</span>
</a>
Что делать с форматированием и поиском
coloredStatus = ”
<div class="labels exec-status-container">
<dd style="background-color: " +
statusColor + "">” + statusName +
"</dd></div>";
status = statusName
А еще хотим быстро планировать
А еще хотим экспорт тест-плана в документ
• Поле Preview, которое начинается с </td>
retStr += "</td></tr><tr style="width: 100%;">
<td colspan="10" style="font-size: 10pt;">”
retStr += wikiRenderer.render(issue.getDescription(), null)
retStr += "<br/>"
А еще хотим экспорт тест-плана в документ
Вопросы?
Код здесь: https://github.com/p1ne/jira-zephyr-plus-structure/

Weitere ähnliche Inhalte

Was ist angesagt?

Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demandSQALab
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverIgor Khrol
 
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQAFest
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5SQALab
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
 
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)SPB SQA Group
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIPavel Asanov
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Hack Days
 
Оценка качества автотестов
Оценка качества автотестовОценка качества автотестов
Оценка качества автотестовSQALab
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Mail.ru Group
 
Логгирование. Зачем? Когда? Сколько?
Логгирование. Зачем? Когда? Сколько?Логгирование. Зачем? Когда? Сколько?
Логгирование. Зачем? Когда? Сколько?Ivan Fedorov
 
Selenium, а давай подождем?
Selenium, а давай подождем?Selenium, а давай подождем?
Selenium, а давай подождем?SQALab
 
Архитектура автоматизированных тестов
Архитектура автоматизированных тестовАрхитектура автоматизированных тестов
Архитектура автоматизированных тестовSQALab
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодRoman Grebennikov
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"SQALab
 
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...Badoo Development
 

Was ist angesagt? (20)

Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
 
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
 
Spring data jee conf
Spring data jee confSpring data jee conf
Spring data jee conf
 
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Оценка качества автотестов
Оценка качества автотестовОценка качества автотестов
Оценка качества автотестов
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
 
Curse of spring boot test [VRN]
Curse of spring boot test [VRN]Curse of spring boot test [VRN]
Curse of spring boot test [VRN]
 
Логгирование. Зачем? Когда? Сколько?
Логгирование. Зачем? Когда? Сколько?Логгирование. Зачем? Когда? Сколько?
Логгирование. Зачем? Когда? Сколько?
 
Selenium, а давай подождем?
Selenium, а давай подождем?Selenium, а давай подождем?
Selenium, а давай подождем?
 
Архитектура автоматизированных тестов
Архитектура автоматизированных тестовАрхитектура автоматизированных тестов
Архитектура автоматизированных тестов
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный код
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
 
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
 

Ähnlich wie От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внутренности JIRA

Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиДоклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиGonchik Tsymzhitov
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAndrey Rebrov
 
Java black box profiling
Java black box profilingJava black box profiling
Java black box profilingaragozin
 
Test Labs 2009. Налютин Никита. Тестирование, как средство противодействия вн...
Test Labs 2009. Налютин Никита. Тестирование, как средство противодействия вн...Test Labs 2009. Налютин Никита. Тестирование, как средство противодействия вн...
Test Labs 2009. Налютин Никита. Тестирование, как средство противодействия вн...Nikita Nalyutin
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"Dev2Dev
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agencyit-people
 
Python Meetup
Python Meetup Python Meetup
Python Meetup iQSpace
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresqlOleg Churkin
 
Grail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестовGrail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестовCodeFest
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilationNikita Lipsky
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015Igor Khrol
 
Организация процесса ручного тестирования
Организация процесса ручного тестированияОрганизация процесса ручного тестирования
Организация процесса ручного тестированияIT61
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Fwdays
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)AvitoTech
 
ACC - конструируем тест-план методом Google
ACC - конструируем тест-план методом GoogleACC - конструируем тест-план методом Google
ACC - конструируем тест-план методом GoogleSQALab
 
Человекопонятные отчёты
Человекопонятные отчётыЧеловекопонятные отчёты
Человекопонятные отчётыbearoff
 
Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Сенцов Сергей "Приемы оптимизаций Desktop приложений"Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Сенцов Сергей "Приемы оптимизаций Desktop приложений"Yulia Tsisyk
 
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QAFest
 

Ähnlich wie От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внутренности JIRA (20)

Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиДоклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
 
Java black box profiling
Java black box profilingJava black box profiling
Java black box profiling
 
Test Labs 2009. Налютин Никита. Тестирование, как средство противодействия вн...
Test Labs 2009. Налютин Никита. Тестирование, как средство противодействия вн...Test Labs 2009. Налютин Никита. Тестирование, как средство противодействия вн...
Test Labs 2009. Налютин Никита. Тестирование, как средство противодействия вн...
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 
Python Meetup
Python Meetup Python Meetup
Python Meetup
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
 
Grail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестовGrail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестов
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015
 
Организация процесса ручного тестирования
Организация процесса ручного тестированияОрганизация процесса ручного тестирования
Организация процесса ручного тестирования
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)
 
ACC - конструируем тест-план методом Google
ACC - конструируем тест-план методом GoogleACC - конструируем тест-план методом Google
ACC - конструируем тест-план методом Google
 
Человекопонятные отчёты
Человекопонятные отчётыЧеловекопонятные отчёты
Человекопонятные отчёты
 
Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Сенцов Сергей "Приемы оптимизаций Desktop приложений"Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Сенцов Сергей "Приемы оптимизаций Desktop приложений"
 
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
 

Mehr von SQALab

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировкуSQALab
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаSQALab
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиSQALab
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияSQALab
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...SQALab
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testingSQALab
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженSQALab
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииSQALab
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовSQALab
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовSQALab
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsSQALab
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеSQALab
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииSQALab
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестированиеSQALab
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"SQALab
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовSQALab
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных системSQALab
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросSQALab
 
Истинная сила тестировщика - информация
Истинная сила тестировщика - информацияИстинная сила тестировщика - информация
Истинная сила тестировщика - информацияSQALab
 

Mehr von SQALab (20)

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестов
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIs
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
 
Истинная сила тестировщика - информация
Истинная сила тестировщика - информацияИстинная сила тестировщика - информация
Истинная сила тестировщика - информация
 

От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внутренности JIRA

  • 1. От Зефира в коробке к Structure Zephyr или Как тест-менеджеру перекроить внутренности JIRA Никита Налютин Experian
  • 2. Предупреждение В презентации есть быдлокод (с багами) грязные трюки и Код здесь: https://github.com/p1ne/jira-zephyr-plus-structure/
  • 3. О чем будем говорить • Что такое Zephyr и Structure • Зачем дружить Zephyr и Structure • Как влезть в JIRA скриптами • Как влезть в БД JIRA • Как влезть в форматирование страниц • Как этим всем сделать всем хорошо • Как этого не делать • …и о муми-троллях…
  • 4. Structure – как все красиво организовать marketplace.atlassian.com/plugins/com.almworks.jira.structure
  • 5. Zephyr - как выглядят тесты marketplace.atlassian.com/plugins/com.thed.zephyr.je
  • 6. Хотим вот такой вид тестов
  • 7. Хотим вот такую отчетность
  • 8. Проблема • Тест и прогон теста – разные сущности • Статусы тестов – поля прогона теста, а не теста • Нужен механизм проброса статуса теста на уровень теста • Статус теста может быть разным в разных версиях/прогонах • Выход – поля • Latest test status • Latest test execution
  • 9. Скриптовые поля: Adaptivist Script Runner marketplace.atlassian.com/plugins/com.onresolve.jira.groovy.groovyrunner/
  • 10. Вариант реализации: ZAPI "http://jira/rest/zapi/latest/execution?issueId=" + issueID URLConnection urlConnection = url.openConnection(); … BufferedReader reader = new BufferedReader( new InputStreamReader(urlConnection.getInputStream())); StringBuffer response = new StringBuffer(); … def slurper = new JsonSlurper() def result = slurper.parseText(response.toString()) if (result.recordsCount.toInteger() > 0) return result.executions[0].versionName; marketplace.atlassian.com/plugins/com.thed.zephyr.zapi/
  • 12. Как попробовать извлечь данные marketplace/plugins/info.renjithv.jira.plugins.sysadmin.homedirectorybrowser
  • 13. Вариант реализации: из базы def delegator = ComponentAccessor.getComponent(DelegatorInterface) String helperName = delegator.getGroupHelperName("default"); StringBuffer sb = new StringBuffer() def sqlStmt = ”..."; Connection conn = ConnectionFactory.getConnection(helperName); Sql sql = new Sql(conn) sql.eachRow(sqlStmt) { sb << "${it.status}” def statusName = status[sb.toString()][0] }
  • 14. Как выбрать данные в скрипте sqlStmt = "SELECT issue_id FROM ao_7deabf_schedule where project_id = " + projectId + " and (date_created between '" + timestamp.format(10.minutes.ago) + "' and '" + timestamp.format(0.minutes.from.now) + "' or executed_on between '" + (unixTime - 10*60*1000).toString() + "' and '" + unixTime.toString() + "') order by date_created desc";
  • 15. Почему данные неактуальны? • У Zephyr нет событий, означающих обновление test run • JIRA кеширует значения атрибутов • Поиск JQL работает исходя из кэша • Частичное обновление кэша работает на весь проект • Решение – периодическая перестройка кэша
  • 16. Реиндекс и поиск: правильно, но не работает • Проблема: При попытке искать по кастом полям ничего не находится или находится не все или не сразу • Решение: само пройдет. • Не проходит • Решение: enableCache = {-> false} • Не дает искать в принципе
  • 18. Пинаем реиндекс: почти работает def issueIndexManager = ComponentAccessor.getIssueIndexManager(); def events = ComponentAccessor.getIssueEventManager(); sql.eachRow(sqlStmt) { def issue = ComponentAccessor.getIssueManager().getIssueObject(it.issue_i d.toLong()); issueIndexManager.reIndex(issue); events.dispatchEvent(EventType.ISSUE_UPDATED_ID, issue, user, false); }
  • 19. Запуск реиндекса • com.onresolve.jira.groovy.GroovyService – не заработало • NSSM и периодический запуск ScriptRunner через POST curl "http://jira/rest/scriptrunner/latest/user/exec/" ^ -H "Host: jira" ^ -H "Accept: application/json, text/javascript, */*; q=0.01" ^ -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" ^ -H "X-Atlassian-Token: nocheck" ^ -H "X-Requested-With: XMLHttpRequest" ^ -H "Referer: http://jira/plugins/servlet/scriptrunner/console?section=script_console" ^ --data "scriptText=&scriptFile=reindex.groovy&htmlText=&jsText=" https://nssm.cc/ https://curl.haxx.se/
  • 20. А еще хотим выполнять тесты… SELECT s.status, v.vname, s.id FROM ao_7deabf_schedule s, projectversion v WHERE s.project_id=" + projectId + " and s.issue_id=" + issueId + " and s.version_id = v.id order by s.date_created desc limit 1";
  • 21. А еще хотим выполнять тесты… if (!versionName.equals("") && (statusName.equals("UNEXECUTED") || statusName.equals("IN PROGRESS")) ) … <a href="/secure/enav/#/" + executionId + ""> <span class="trigger-label">Continue exec </span> </a>
  • 22. А еще хотим выполнять тесты… if (versionName.equals("") <a id="zephyr-je-add-execute" title="Execute Test" class="toolbar-trigger viewissue-add-execute” href="/secure/AddExecute!AddExecute.jspa?id=" + issueId + ""> <span class="trigger-label">Exec new </span> </a>
  • 23. Что делать с форматированием и поиском coloredStatus = ” <div class="labels exec-status-container"> <dd style="background-color: " + statusColor + "">” + statusName + "</dd></div>"; status = statusName
  • 24. А еще хотим быстро планировать
  • 25. А еще хотим экспорт тест-плана в документ • Поле Preview, которое начинается с </td> retStr += "</td></tr><tr style="width: 100%;"> <td colspan="10" style="font-size: 10pt;">” retStr += wikiRenderer.render(issue.getDescription(), null) retStr += "<br/>"
  • 26. А еще хотим экспорт тест-плана в документ