Сложенный бар с записями стиля JUnit - PullRequest
1 голос
/ 06 октября 2019

У меня есть набор данных, экспортированный из файла JUnitXML, и я хотел бы создать простую визуализацию с использованием Vega-lite для составной панели для каждого набора тестов. Проблема в том, что в стиле JUnit вы не получаете значение для «успеха», а вместо этого вы получаете поля «тесты», которые являются суммой всех типов тестов.

Пока я просто наивноэкспортируется как аккуратные данные, а затем отображается в x, y и цвет.

Текущая визуализация

Vega-редактор

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": {"name": "results"},
  "mark": "bar",
  "encoding": {
    "y": {"field": "name", "type": "nominal"},
    "x": {"aggregate": "sum", "field": "count", "type": "quantitative", "stack": "normalize"},
    "color": {"field": "type"}
  },
  "datasets": {
    "results": [
      {"name": "test_suite_0", "type": "tests", "count": 10},
      {"name": "test_suite_1", "type": "tests", "count": 10},
      {"name": "test_suite_2", "type": "tests", "count": 10},
      {"name": "test_suite_3", "type": "tests", "count": 10},
      {"name": "test_suite_4", "type": "tests", "count": 10},
      {"name": "general-test-suite", "type": "tests", "count": 10},
      {"name": "test_suite_0", "type": "skipped", "count": 2},
      {"name": "test_suite_1", "type": "skipped", "count": 2},
      {"name": "test_suite_2", "type": "skipped", "count": 3},
      {"name": "test_suite_3", "type": "skipped", "count": 4},
      {"name": "test_suite_4", "type": "skipped", "count": 3},
      {"name": "general-test-suite", "type": "skipped", "count": 1},
      {"name": "test_suite_0", "type": "failures", "count": 3},
      {"name": "test_suite_1", "type": "failures", "count": 2},
      {"name": "test_suite_2", "type": "failures", "count": 0},
      {"name": "test_suite_3", "type": "failures", "count": 2},
      {"name": "test_suite_4", "type": "failures", "count": 3},
      {"name": "general-test-suite", "type": "failures", "count": 3},
      {"name": "test_suite_0", "type": "errors", "count": 4},
      {"name": "test_suite_1", "type": "errors", "count": 4},
      {"name": "test_suite_2", "type": "errors", "count": 4},
      {"name": "test_suite_3", "type": "errors", "count": 1},
      {"name": "test_suite_4", "type": "errors", "count": 4},
      {"name": "general-test-suite", "type": "errors", "count": 2}
    ]
  }
}

Я хотел бы изменить значения тестов для успеха, что должно быть разницей tests-(sum of count of other fields grouped by name), но я понятия не имею, как это сделать.

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Я наконец-то получил результат, который был мне нужен (и понял, что он не такой красивый, как я себе представлял). Я решил повернуть столбцы, вычислить количество «пройденных» для каждого набора тестов, а затем снова сложить для упрощения построения графика:

Vega-редактор

{
  "data": {"name": "results"},
  "transform": [
    {"pivot": "type", "groupby": ["name"], "value": "count"},
    {
      "calculate": "datum.tests - (datum.failures + datum.skipped + datum.errors)",
      "as": "passed"
    },
    {
      "fold": ["passed", "failures", "skipped", "errors"],
      "as": ["type", "count"]
    }
  ],
  "mark": "bar",
  "encoding": {
    "x": {"aggregate": "sum", "type": "quantitative", "field": "count"},
    "y": {"type": "nominal", "field": "name"},
    "color": {
      "type": "nominal",
      "field": "type",
      "sort": ["passed", "failures", "skipped", "errors"],
      "scale": {"range": ["green", "red", "grey", "yellow"]}
    },
    "order": {"range": ["passed", "failures", "skipped", "errors"]}
  },
  "datasets": {
    "results": [
      {"count": 10, "name": "test_suite_0", "type": "tests"},
      {"count": 10, "name": "test_suite_1", "type": "tests"},
      {"count": 10, "name": "test_suite_2", "type": "tests"},
      {"count": 10, "name": "test_suite_3", "type": "tests"},
      {"count": 10, "name": "test_suite_4", "type": "tests"},
      {"count": 10, "name": "general-test-suite", "type": "tests"},
      {"count": 2, "name": "test_suite_0", "type": "skipped"},
      {"count": 2, "name": "test_suite_1", "type": "skipped"},
      {"count": 3, "name": "test_suite_2", "type": "skipped"},
      {"count": 4, "name": "test_suite_3", "type": "skipped"},
      {"count": 3, "name": "test_suite_4", "type": "skipped"},
      {"count": 1, "name": "general-test-suite", "type": "skipped"},
      {"count": 3, "name": "test_suite_0", "type": "failures"},
      {"count": 2, "name": "test_suite_1", "type": "failures"},
      {"count": 0, "name": "test_suite_2", "type": "failures"},
      {"count": 2, "name": "test_suite_3", "type": "failures"},
      {"count": 3, "name": "test_suite_4", "type": "failures"},
      {"count": 3, "name": "general-test-suite", "type": "failures"},
      {"count": 4, "name": "test_suite_0", "type": "errors"},
      {"count": 4, "name": "test_suite_1", "type": "errors"},
      {"count": 4, "name": "test_suite_2", "type": "errors"},
      {"count": 1, "name": "test_suite_3", "type": "errors"},
      {"count": 4, "name": "test_suite_4", "type": "errors"},
      {"count": 2, "name": "general-test-suite", "type": "errors"}
    ]
  }
}
0 голосов
/ 06 октября 2019

Вы можете использовать агрегатное преобразование с последующим преобразованием вычисления;как то так ( Vega Editor ):

{
  "data": {"name": "results"},
  "transform": [
    {
      "aggregate": [
        {"op": "sum", "field": "count", "as": "total"},
        {"op": "max", "field": "count", "as": "tests"}
      ],
      "groupby": ["name"]
    },
    {"calculate": "2 * datum.tests - datum.total", "as": "passed"}
  ],
  "mark": "bar",
  "encoding": {
    "x": {"type": "quantitative", "field": "passed"},
    "y": {"type": "nominal", "field": "name"}
  },
  "datasets": {
    "results": [
      {"count": 10, "name": "test_suite_0", "type": "tests"},
      {"count": 10, "name": "test_suite_1", "type": "tests"},
      {"count": 10, "name": "test_suite_2", "type": "tests"},
      {"count": 10, "name": "test_suite_3", "type": "tests"},
      {"count": 10, "name": "test_suite_4", "type": "tests"},
      {"count": 10, "name": "general-test-suite", "type": "tests"},
      {"count": 2, "name": "test_suite_0", "type": "skipped"},
      {"count": 2, "name": "test_suite_1", "type": "skipped"},
      {"count": 3, "name": "test_suite_2", "type": "skipped"},
      {"count": 4, "name": "test_suite_3", "type": "skipped"},
      {"count": 3, "name": "test_suite_4", "type": "skipped"},
      {"count": 1, "name": "general-test-suite", "type": "skipped"},
      {"count": 3, "name": "test_suite_0", "type": "failures"},
      {"count": 2, "name": "test_suite_1", "type": "failures"},
      {"count": 0, "name": "test_suite_2", "type": "failures"},
      {"count": 2, "name": "test_suite_3", "type": "failures"},
      {"count": 3, "name": "test_suite_4", "type": "failures"},
      {"count": 3, "name": "general-test-suite", "type": "failures"},
      {"count": 4, "name": "test_suite_0", "type": "errors"},
      {"count": 4, "name": "test_suite_1", "type": "errors"},
      {"count": 4, "name": "test_suite_2", "type": "errors"},
      {"count": 1, "name": "test_suite_3", "type": "errors"},
      {"count": 4, "name": "test_suite_4", "type": "errors"},
      {"count": 2, "name": "general-test-suite", "type": "errors"}
    ]
  }
}

enter image description here

...