Вопрос по Allure-плагину, который добаляет новую табу в отчёт.
Мне нужно, чтобы в названии табы выводилось количество записей в собранном моим плагином myplugindata.json.
Таба отрисовывается при открытии отчёта, соответственно, в этот момент мне и нужно обратиться к моему файлу, который лежит по пути report_localtion/data/myplugindata.json.
Кто может подcказать, как мне достать путь к моему файлу.
Примеры report_location:
Сейчас подпёрто костылём, но должно быть нормальное решение)
Костыль из index.js моего плагина:
const url = 'data/myplugindata.json';
var readJSON = function (url) {
var request = new XMLHttpRequest();
var location = window.location.href.endsWith("/") ? window.location.href : window.location.origin + "/";
request.open("GET", location + url, false);
request.send(null);
return JSON.parse(request.responseText);
}
allure.api.addTab('warnings', {
title: "Warnings (" + readJSON(url).length + ")",
icon: 'fa fa-exclamation-triangle',
route: 'warnings',
onEnter: (function () {
return new MyLayout()
})
});
Всем доброго времени суток. Буду очень благодарен за помощь в одном вопросе
стек: python + pytest
Наш тестовый фреймворк содержит классы страниц с методами, задекорированными с помощью allure.step:
@step('I login to application by user {user_name}')
def login(self, user_name: str) -> None:
....
Когда встал вопрос с возможностью получения в репорте скриншотов на каждый шаг, мы поняли что, конечно, можем делать скриншот в конце каждого метода-шага, что не является красивым решением.
Тогда мы решили попробовать заменить allure.step
собственным декоратором на его основе.
def step(step_title):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
# with allure.step(step_title):
_self = args[0]
allure.step(step_title)(func(*args, **kwargs))
if get_config().reporting.screen_each_step:
allure.attach(_self.driver.get_screenshot_as_png(), "step screenshot", allure.attachment_type.PNG)
return wrapper
return decorator
Но при использовании allure.step()()
скриншоты аттачатся не в тело шагов, а в тело самих кейсов.
При использовании with allure.step()
скриншоты аттачатся в тело степа, как и задумывалось. Но есть ряд других проблем: подстановка аргументов метода в title шага не работает автоматически, его придется форматировать самому и в итоговом отчете в шаге не аттачатся аргументы метода, как это происходило автоматически с @allure.step
Во время изучения кода репозитория allure-pytest мы наткнулись на хуки:
class AllureUserHooks(object):
..........
@hookspec
def start_step(self, uuid, title, params):
""" step """
@hookspec
def stop_step(self, uuid, exc_type, exc_val, exc_tb):
""" step """
У нас возник вопрос, есть ли способ создания обертки на основе этого хука внутри allure_commons? Что-то врорде:
@allure_commons.hookimpl(hookwrapper=True)
def stop_step():
take_screen()
yield
Мы пытались запустить код выше, но, очевидно, он не работает как мы предполагали.
Я буду благодарен за любой совет или помощь.
Доброе утро всем! Ковыряю потихоньку Allure+Jenkins. Столкнулся с ошибкой при запуске вот такого скрипта в jenkinsfile: allure jdk: '', properties: [[key: 'ALLURE_JIRA_ENABLED', value: 'False']], results: [[path: '/allure-results']].
Ошибка вот такая выскакивает:
java.util.zip.ZipException: invalid LOC header (bad signature)
at java.util.zip.ZipFile.read(Native Method)
at java.util.zip.ZipFile.access$1400(ZipFile.java:60)
at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:734)
at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:434)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at com.fasterxml.jackson.core.json.ByteSourceJsonBootstrapper.ensureLoaded(ByteSourceJsonBootstrapper.java:539)
at com.fasterxml.jackson.core.json.ByteSourceJsonBootstrapper.detectEncoding(ByteSourceJsonBootstrapper.java:133)
at com.fasterxml.jackson.core.json.ByteSourceJsonBootstrapper.constructParser(ByteSourceJsonBootstrapper.java:256)
at com.fasterxml.jackson.core.JsonFactory._createParser(JsonFactory.java:1655)
at com.fasterxml.jackson.core.JsonFactory.createParser(JsonFactory.java:1083)
at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:3056)
at ru.yandex.qatools.allure.jenkins.utils.FilePathUtils.isHistoryNotEmpty(FilePathUtils.java:85)
at ru.yandex.qatools.allure.jenkins.utils.FilePathUtils.getPreviousReportWithHistory(FilePathUtils.java:70)
at ru.yandex.qatools.allure.jenkins.AllureReportPublisher.addHistory(AllureReportPublisher.java:420)
at ru.yandex.qatools.allure.jenkins.AllureReportPublisher.prepareResults(AllureReportPublisher.java:389)
at ru.yandex.qatools.allure.jenkins.AllureReportPublisher.perform(AllureReportPublisher.java:230)
at jenkins.tasks.SimpleBuildStep.perform(SimpleBuildStep.java:123)
at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:100)
at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:70)
at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Пару дней гугления не дали никаких вариантов (может не там ищу?).
Никто не сталкивался с таким?
Или я вообще не по адресу? :)
Добрый день. У меня такая проблема. Запускаем интеграционные тесты, используя сервер Allure + Pytest. Проблема с отображением тестов. У нас один набор из 400 тестов, который прогоняется на нескольких машинах. Мне необходимо, чтобы в Suites отображались папки, соответствующие названиям машин, и дальше в раскрывающемся списке сами тесты.
Организовать это получилось, но в списке отображается только одна машина (предположительно, с тестами, запущенными последними). Декораторы такие (пробовала и другие варианты, итог один). Может, кто-то сталкивался, подскажет, как это реализовать? @allure.dynamic.suite пробовала тоже, с ним не выходит совсем
@allure.suite(f"{allure_conf.ALLURE_MACHINE_NAME}")
@allure.sub_suite(allure_conf.get_module_name(__file__))
import json
import base64
import allure
def test_attach_screen_diff():
with open('image-1.png', 'rb') as f1:
with open('image-2.png', 'rb') as f2:
with open('image-3.png', 'rb') as f3:
allure.label("testType", "screenshotDiff")
b_fb = base64.b64encode(f1.read()).decode()
b_fb2 = base64.b64encode(f2.read()).decode()
b_fb3 = base64.b64encode(f3.read()).decode()
allure.attach(
json.dumps(
{
"expected": f"data:image/png;base64,{b_fb}",
"actual": f"data:image/png;base64,{b_fb2}",
"diff": f"data:image/png;base64,{b_fb3}"
}
).encode(),
attachment_type='application/vnd.allure.image.diff'
)