Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/buildkite_test_collector/pytest_plugin/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,21 @@ def pytest_unconfigure(config):
if not hasattr(config, "workerinput"):
submit(plugin.payload)

jsonpath = config.option.jsonpath
if jsonpath:
plugin.save_payload_as_json(jsonpath)

del config._buildkite
config.pluginmanager.unregister(plugin)

def pytest_addoption(parser):
"""add custom option to pytest"""
group = parser.getgroup('buildkite', 'Buildkite Test Collector')
group.addoption(
'--json',
default=None,
action='store',
dest="jsonpath",
metavar="path",
help='save json file at given path'
)
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
"""Buildkite test collector plugin for Pytest"""
import json

from uuid import uuid4

from ..collector.payload import TestData


class BuildkitePlugin:
"""Buildkite test collector plugin for Pytest"""

Expand Down Expand Up @@ -51,3 +51,8 @@ def pytest_runtest_logreport(self, report):

del self.in_flight[nodeid]
self.payload = self.payload.push_test_data(test_data)

def save_payload_as_json(self, path):
""" Save payload into a json file """
with open(path, "w", encoding="utf-8") as f:
json.dump(self.payload.as_json()["data"], f)
15 changes: 15 additions & 0 deletions tests/buildkite_test_collector/pytest_plugin/test_plugin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from buildkite_test_collector.pytest_plugin import BuildkitePlugin
from buildkite_test_collector.collector.payload import Payload
from pathlib import Path

import json

def test_runtest_logstart_with_unstarted_payload(fake_env):
payload = Payload.init(fake_env)
Expand All @@ -11,3 +13,16 @@ def test_runtest_logstart_with_unstarted_payload(fake_env):
plugin.pytest_runtest_logstart("wat::when", [1, 2])

assert plugin.payload.started_at is not None


def test_save_json_payload(fake_env, tmp_path, successful_test):
payload = Payload.init(fake_env)
payload = Payload.started(payload)
payload = payload.push_test_data(successful_test)

plugin = BuildkitePlugin(payload)

path = tmp_path / "result.json"
plugin.save_payload_as_json(path)

assert path.read_text() == json.dumps([successful_test.as_json(payload.started_at)])