Доброго дня.
- Всё верно, такой необходимости нет. Все лишние пакеты надо удалить, оставив только один этот.
- Привести такой пример проблематично, т.к. всё зависит от того, что вы используете для отправки запросов и получения ответов.
Лично я использую RestSharp и у меня добавляется практически всё
Вот парочка приватных методов для примера.
- Добавляет хидеры запроса как аттачмент в текущий шаг.
Аккуратно! Для избежания проблем с безопасностью, если к вашим отчетам есть доступ у многих людей, здесь следует добавить выпиливание из списка хидеров авторизацию и все кастомные авторизационные токены.
private static void AddRequestHeadersToReport(
IRestRequest request)
{
var listOfHeaders = request.Parameters.Where(p => p.Type == ParameterType.HttpHeader).ToList();
if (!listOfHeaders.Any()) return;
var formattedHeaders = listOfHeaders.ToDictionary(p => p.Name, p => p.Value);
var json = JsonConvert.SerializeObject(formattedHeaders, Formatting.Indented,
new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore});
AllureLifecycle.Instance.AddAttachment("Headers", AllureLifecycle.AttachFormat.Json, json);
}
- Тоже самое с хидерами ответа:
private static void AddResponseHeadersToReport(IRestResponse response)
{
var headersAnon = response.Headers.ToDictionary(p => p.Name, p => p.Value);
var headers = JsonConvert.SerializeObject(headersAnon, Formatting.Indented,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
AllureLifecycle.Instance.AddAttachment("Headers", AllureLifecycle.AttachFormat.Json, headers);
}
- Общая инфа об ответе:
private static void AddResponseInfoToReport(IRestResponse response)
{
var info = new
{
response.StatusCode,
StatusDesciption = response.StatusDescription,
Encoding = response.ContentEncoding,
response.ErrorMessage,
response.IsSuccessful,
response.ResponseUri,
response.ContentType,
response.ContentLength,
response.ResponseStatus
};
var json = JsonConvert.SerializeObject(info, Formatting.Indented);
AllureLifecycle.Instance.AddAttachment("Response common info", AllureLifecycle.AttachFormat.Json, json);
}
- Добавление тела запроса в отчет:
private static void AddRequestContentToReport(
IRestRequest request, bool addRequestBodyToReport = true)
{
if (!addRequestBodyToReport) return;
var param = request.Parameters.Find(e => e.Type == ParameterType.RequestBody);
if (param?.Value == null) return;
var content = param.Value.ToString();
var contentType = request.RequestFormat == DataFormat.Json
? AllureLifecycle.AttachFormat.Json
: AllureLifecycle.AttachFormat.Xml;
var fileExt = $".{contentType.ToString().ToLower()}";
if (contentType == AllureLifecycle.AttachFormat.Json) content = JsonHelper.FormatJson(content);
AllureLifecycle.Instance.AddAttachment($"Body ({request.RequestFormat})",
$"application/{contentType.ToString().ToLower()}",
Encoding.UTF8.GetBytes(content), fileExt);
}
- Добавление тела ответа в отчет
private static void AddResponseContentToReport(
IRestResponse response)
{
if (string.IsNullOrEmpty(response.Content))
{
AllureLifecycle.Instance.AddAttachment("Контент пустой - txt формат)",
AllureLifecycle.AttachFormat.Txt, response.Content);
}
else if (string.IsNullOrEmpty(response.ContentType))
{
AllureLifecycle.Instance.AddAttachment("Контент распарсить не получилось - txt формат)",
AllureLifecycle.AttachFormat.Txt, response.Content);
}
else
{
var contentType = AllureLifecycle.AttachFormat.Txt;
if (response.ContentType.ToLower().Contains("html"))
{
var bytes = Encoding.UTF8.GetBytes(response.Content);
AllureLifecycle.Instance.AddAttachment("Formatted content", "text/html", bytes, ".html");
}
else
{
if (response.ContentType.ToLower().Contains("json"))
contentType = AllureLifecycle.AttachFormat.Json;
if (response.ContentType.ToLower().Contains("xml"))
contentType = AllureLifecycle.AttachFormat.Xml;
AllureLifecycle.Instance.AddAttachment("Formatted content", contentType, response.Content);
}
}
ПО поводу третьего вопроса - нужны подробности.