18. REST API. Декомпозируем UI тесты. Подключаем отчетность - qa-guru/knowledge-base GitHub Wiki
Сточка .log().all()
выводит все логи в консоль. Поэтому если включить её в код теста, то в консоли Jenkins мы сможем увидеть результат работы тесты, но он не попадет в Allure.
Чтобы исправить ситуация, необходимо перед этим задать фильтр с помощью строчки filter(new AllureRestAssured())
. Теперь вывод содержимое консоли будет собираться в отчетах Allure.
При этом можно применить свой собственный Listener. Для этого в папке src -> test -> java
создаем директорию helpers
и в ней класс CustomApiListener
.
Класс CustomApiListener
должен содержать в себе следующий код:
public class CustomApiListener {
private static final AllureRestAssured FILTER = new AllureRestAssured();
public static AllureRestAssured withCustomTemplates() {
FILTER.setRequestTemplate("request.ftl");
FILTER.setResponseTemplate("response.ftl");
return FILTER;
}
}
Можно заметить, что мы обращаемся к файлам request.ftl
и response.ftl
. Но их у нас в проекте ещё нет, поэтому надо их создать. Для этого в папке resources
создаем директорию tpl
и в ней файлы request.ftl
и response.ftl
. Теперь необходимо заполнить файлы.
Содержимое request.ftl
:
<html>
<#-- @ftlvariable name="data" type="io.qameta.allure.attachment.http.HttpRequestAttachment" -->
<head>
<meta http-equiv="content-type" content="text/html; charset = UTF-8">
<script src="https://yastatic.net/jquery/2.2.3/jquery.min.js" crossorigin="anonymous"></script>
<link href="https://yastatic.net/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
<script src="https://yastatic.net/bootstrap/3.3.6/js/bootstrap.min.js" crossorigin="anonymous"></script>
<link type="text/css" href="https://yandex.st/highlightjs/8.0/styles/github.min.css" rel="stylesheet"/>
<script type="text/javascript" src="https://yandex.st/highlightjs/8.0/highlight.min.js"></script>
<script type="text/javascript" src="https://yandex.st/highlightjs/8.0/languages/bash.min.js"></script>
<script type="text/javascript" src="https://yandex.st/highlightjs/8.0/languages/json.min.js"></script>
<script type="text/javascript" src="https://yandex.st/highlightjs/8.0/languages/xml.min.js"></script>
<script type="text/javascript">hljs.initHighlightingOnLoad();</script>
<style>
pre {
white-space: pre-wrap;
}
</style>
</head>
<body>
<div>
<pre><code><#if data.method??>${data.method}<#else>GET</#if>: <#if data.url??>${data.url}<#else>Unknown</#if></code></pre>
</div>
<#if data.body??>
<h4>Body</h4>
<div>
<pre><code>${data.body}</code></pre>
</div>
</#if>
<#if (data.headers)?has_content>
<h4>Headers</h4>
<div>
<#list data.headers as name, value>
<div>
<pre><code><b>${name}</b>: ${value}</code></pre>
</div>
</#list>
</div>
</#if>
<#if (data.cookies)?has_content>
<h4>Cookies</h4>
<div>
<#list data.cookies as name, value>
<div>
<pre><code><b>${name}</b>: ${value}</code></pre>
</div>
</#list>
</div>
</#if>
<#if data.curl??>
<h4>Curl</h4>
<div>
<pre><code>${data.curl}</code></pre>
</div>
</#if>
</body>
</html>
Содержимое response.ftl
:
<html>
<#-- @ftlvariable name="data" type="io.qameta.allure.attachment.http.HttpResponseAttachment" -->
<head>
<meta http-equiv="content-type" content="text/html; charset = UTF-8">
<script src="https://yastatic.net/jquery/2.2.3/jquery.min.js" crossorigin="anonymous"></script>
<link href="https://yastatic.net/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
<script src="https://yastatic.net/bootstrap/3.3.6/js/bootstrap.min.js" crossorigin="anonymous"></script>
<link type="text/css" href="https://yandex.st/highlightjs/8.0/styles/github.min.css" rel="stylesheet"/>
<script type="text/javascript" src="https://yandex.st/highlightjs/8.0/highlight.min.js"></script>
<script type="text/javascript" src="https://yandex.st/highlightjs/8.0/languages/bash.min.js"></script>
<script type="text/javascript" src="https://yandex.st/highlightjs/8.0/languages/json.min.js"></script>
<script type="text/javascript" src="https://yandex.st/highlightjs/8.0/languages/xml.min.js"></script>
<script type="text/javascript">hljs.initHighlightingOnLoad();</script>
<style>
pre {
white-space: pre-wrap;
}
</style>
</head>
<body>
<div><h4>Status code</h4> <#if data.responseCode??>
<pre><code><b>${data.responseCode}</b></code></pre>
<#else>Unknown</#if></div>
<#if data.url??>
<div>
<pre><code>${data.url}</code></pre>
</div></#if>
<#if (data.headers)?has_content>
<h4>Headers</h4>
<div>
<#list data.headers as name, value>
<div>
<pre><code><b>${name}</b>: ${value}</code></pre>
</div>
</#list>
</div>
</#if>
<#if data.body??>
<h4>Body</h4>
<div>
<pre><code>${data.body}</code></pre>
</div>
</#if>
<#if (data.cookies)?has_content>
<h4>Cookies</h4>
<div>
<#list data.cookies as name, value>
<div>
<pre><code><b>${name}</b>: ${value}</code></pre>
</div>
</#list>
</div>
</#if>
</body>
</html>
После этого подключим собственный Listener в теле теста с помощью строчки filter(withCustomTemplates())
. Теперь синтаксис логов в Allure будет подсвечиваться и удобно группироваться.