Dashboard Analytics Test Suites Test Metrics Test Steps Archives Screenshots API Logs Test Coverage
Time taken 59.35 secs
PYTEST REPORT
September 06, 2026
1784 TEST CASES
  Trends
Test Suite 79
Highlights

2 /2 Times

MOST FAILED SUITE

Analytics
How these tests behave over time — across 10 builds, Sep 06 15:18 to Sep 06 16:22
98
stability score
pass rate, less how often tests flip
97.9%
pass rate this run
-2.1 pts since the last build
22
flaky tests
flipped or needed a retry
19
always failing
failing 2 builds or more
10
builds analysed
oldest Sep 06 15:18
1m 39s
time in tests
median build 12.1s
Why this run failed 37 failures, 17 are AssertionError
  • AssertionError 17 new
    • test_the_api_rejects_the_order
    • test_the_fixture_attaches_on_failure
    • test_fixture_fail
    • test_a_declined_card_names_the_step_that_failed
    • test_a_wrong_heading_is_photographed_on_the_step_that_failed
    • test_fixture_fail
    • test_fixture_pass[1-2]
    • test_heading_mismatch[chromium]
    • test_heading_mismatch
    • test_heading_mismatch
    • test_a_declined_card_is_rejected
    • test_the_footer_year_is_current
    • test_a_declined_card_is_reported_on_the_step_that_failed
    • test_an_async_step_that_fails_names_itself
    • test_a_refund_returns_the_full_amount
    • test_searching_for_a_product
    • test_fail
  • RuntimeError 17 new
    • test_an_async_with_block_records_one_step
    • test_an_async_with_block_is_held_open_across_what_it_awaits
    • test_an_async_with_block_hands_back_the_step_it_opened
    • test_a_sync_block_and_an_async_one_nest_in_one_another
    • test_the_message_goes_on_the_async_step_that_raised
    • test_a_decorated_coroutine_is_timed_across_the_call
    • test_a_decorated_coroutine_still_returns_what_it_returned
    • test_a_decorated_coroutines_own_arguments_fill_in_its_title
    • test_a_coroutine_that_raises_is_failed_and_the_exception_carries_on_out
    • test_an_async_generator_is_not_mistaken_for_a_coroutine
    • test_gathered_legs_are_siblings_and_not_a_chain
    • test_gathered_legs_still_nest_under_the_step_that_fanned_them_out
    • test_a_plain_await_nests_the_way_a_plain_call_does
    • test_an_attachment_made_in_one_leg_is_filed_under_that_leg
    • test_one_step_object_entered_twice_at_once_closes_both
    • test_a_step_held_open_across_a_yield_closes_where_the_fixture_resumes
    • test_a_cancelled_tasks_open_step_is_closed_rather_than_left_behind
  • Exception 2 new
    • test_fail
    • test_failx2
  • ValueError 1 new
    • test_an_async_function_behind_another_decorator_is_still_found
Who owns what 3 owners, and 1756 of 1765 tests unclaimed
Owner Tests Pass rate Failing Flaky Time
payments-team 7 57.1% 3 0 1.85ms
search-team 1 0.0% 1 0 0.24ms
platform-team 1 100.0% 0 0 0.23ms
Unowned 1756 98.8% 34 22 1m 39s
How much it matters 1 critical test failing
Severity Tests Pass rate Failing Flaky Time
blocker 3 100.0% 0 0 0.75ms
critical 2 50.0% 1 0 0.54ms
normal 1 100.0% 0 0 0.26ms
minor 1 100.0% 0 0 0.17ms
trivial 1 0.0% 1 0 0.33ms
catastrophic 1 100.0% 0 0 0.19ms
Unrated 1754 98.7% 35 22 1m 39s
This is the only build on record, so there is nothing yet to compare it against. The duration panels below are this run's and are already real; the trends, the flake rates and the movement cards fill themselves in from the second run onwards, over as many builds as --archive-count keeps.
Pass rate across builds share of decided tests that passed
What moved, build to build fixed, regressed, added, dropped
Where the time goes tests per duration band, this run
Test base growth tests collected per build
Slowest tests in this run seconds
Newly failing 18
  • test_an_async_with_block_records_one_steptests/unit/test_async_steps.py
  • test_an_async_with_block_is_held_open_across_what_it_awaitstests/unit/test_async_steps.py
  • test_an_async_with_block_hands_back_the_step_it_openedtests/unit/test_async_steps.py
  • test_a_sync_block_and_an_async_one_nest_in_one_anothertests/unit/test_async_steps.py
  • test_the_message_goes_on_the_async_step_that_raisedtests/unit/test_async_steps.py
  • test_a_decorated_coroutine_is_timed_across_the_calltests/unit/test_async_steps.py
  • test_a_decorated_coroutine_still_returns_what_it_returnedtests/unit/test_async_steps.py
  • test_a_decorated_coroutines_own_arguments_fill_in_its_titletests/unit/test_async_steps.py
  • test_a_coroutine_that_raises_is_failed_and_the_exception_carries_on_outtests/unit/test_async_steps.py
  • test_an_async_function_behind_another_decorator_is_still_foundtests/unit/test_async_steps.py
  • test_an_async_generator_is_not_mistaken_for_a_coroutinetests/unit/test_async_steps.py
  • test_gathered_legs_are_siblings_and_not_a_chaintests/unit/test_async_steps.py
  • test_gathered_legs_still_nest_under_the_step_that_fanned_them_outtests/unit/test_async_steps.py
  • test_a_plain_await_nests_the_way_a_plain_call_doestests/unit/test_async_steps.py
  • test_an_attachment_made_in_one_leg_is_filed_under_that_legtests/unit/test_async_steps.py
  • test_one_step_object_entered_twice_at_once_closes_bothtests/unit/test_async_steps.py
  • test_a_step_held_open_across_a_yield_closes_where_the_fixture_resumestests/unit/test_async_steps.py
  • test_a_cancelled_tasks_open_step_is_closed_rather_than_left_behindtests/unit/test_async_steps.py
Newly fixed 0
  • Nothing
New tests 57
  • test_aproxtests/functional/test_approx.py
  • test_an_order_is_createdtests/functional/test_attachments.py
  • test_the_api_rejects_the_ordertests/functional/test_attachments.py
  • test_upstream_is_downtests/functional/test_attachments.py
  • test_the_fixture_attaches_on_failuretests/functional/test_attachments.py
  • test_a_file_from_disktests/functional/test_attachments.py
  • test_a_plain_notetests/functional/test_attachments.py
  • test_nothing_to_attachtests/functional/test_attachments.py
  • test_dbx1tests/functional/test_autouse.py
  • test_dbx2tests/functional/test_autouse.py
  • test_fixture_passtests/functional/test_fixture.py
  • test_fixture_failtests/functional/test_fixture.py
  • test_a_shopper_buys_count_of_an_item[1]tests/functional/test_gherkin.py
  • test_a_shopper_buys_count_of_an_item[3]tests/functional/test_gherkin.py
  • test_a_declined_card_names_the_step_that_failedtests/functional/test_gherkin.py
  • test_a_wrong_heading_is_photographed_on_the_step_that_failedtests/functional/test_gherkin_screenshot.py
  • test_fixture_passtests/functional/test_mark.py
  • test_fixture_failtests/functional/test_mark.py
  • test_fixture_pass[1-1]tests/functional/test_parameterize.py
  • test_fixture_pass[1-2]tests/functional/test_parameterize.py
  • test_heading[chromium]tests/functional/test_playwright.py
  • test_heading_mismatch[chromium]tests/functional/test_playwright.py
  • test_headingtests/functional/test_screenshot.py
  • test_heading_mismatchtests/functional/test_screenshot.py
  • test_headingtests/functional/test_selenium.py
  • test_heading_mismatchtests/functional/test_selenium.py
  • test_a_customer_can_paytests/functional/test_severity.py
  • test_a_declined_card_is_rejectedtests/functional/test_severity.py
  • test_the_footer_year_is_currenttests/functional/test_severity.py
  • test_two_levels_at_one_scopetests/functional/test_severity.py
  • test_the_level_is_the_same_however_it_is_capitalisedtests/functional/test_severity.py
  • test_a_levelless_marker_rates_nothingtests/functional/test_severity.py
  • test_a_word_outside_the_five_is_kepttests/functional/test_severity.py
  • test_the_basket_totals_correctlytests/functional/test_severity.py
  • test_the_basket_survives_a_reloadtests/functional/test_severity.py
  • test_passtests/functional/test_simple.py
  • test_failtests/functional/test_simple.py
  • test_failx2tests/functional/test_simple.py
  • test_skiptests/functional/test_skip_xfail_xpass.py
  • test_xfailtests/functional/test_skip_xfail_xpass.py
  • test_xpasstests/functional/test_skip_xfail_xpass.py
  • test_a_shopper_can_buy_one_itemtests/functional/test_steps.py
  • test_a_shopper_can_buy_several[2]tests/functional/test_steps.py
  • test_a_shopper_can_buy_several[5]tests/functional/test_steps.py
  • test_a_declined_card_is_reported_on_the_step_that_failedtests/functional/test_steps.py
  • test_a_test_that_names_no_steps_still_says_where_its_time_wenttests/functional/test_steps.py
  • test_three_sections_are_fetched_at_oncetests/functional/test_steps.py
  • test_an_async_step_that_fails_names_itselftests/functional/test_steps.py
  • test_a_declined_card_is_rejectedtests/functional/test_traceability.py
  • test_a_refund_returns_the_full_amounttests/functional/test_traceability.py
  • test_the_gateway_is_reachabletests/functional/test_traceability.py
  • test_a_ticketless_marker_links_nowheretests/functional/test_traceability.py
  • test_searching_for_a_producttests/functional/test_traceability.py
  • test_fixture_passtests/functional/test_usefixtures.py
  • test_fixture_failtests/functional/test_usefixtures.py
  • test_passtests/functional/test_yield_fixture.py
  • test_failtests/functional/test_yield_fixture.py
No longer run 0
  • Nothing
Test Verdict History Pass rate Builds Flips Retries Current streak Duration
test_a_declined_card_is_rejected tests/functional/test_severity.py Always failing 0.0% 2 0 3 2 builds 0.34ms
test_a_declined_card_is_reported_on_the_step_that_failed tests/functional/test_steps.py Always failing 0.0% 2 0 3 2 builds 261ms
test_a_declined_card_names_the_step_that_failed tests/functional/test_gherkin.py Always failing 0.0% 2 0 3 2 builds 106ms
test_a_refund_returns_the_full_amount tests/functional/test_traceability.py Always failing 0.0% 2 0 3 2 builds 0.34ms
test_a_wrong_heading_is_photographed_on_the_step_that_failed tests/functional/test_gherkin_screenshot.py Always failing 0.0% 2 0 3 2 builds 726ms
test_an_async_step_that_fails_names_itself tests/functional/test_steps.py Always failing 0.0% 2 0 3 2 builds 41ms
test_fail tests/functional/test_simple.py Always failing 0.0% 2 0 3 2 builds 0.24ms
test_fail tests/functional/test_yield_fixture.py Always failing 0.0% 2 0 3 2 builds 0.28ms
test_failx2 tests/functional/test_simple.py Always failing 0.0% 2 0 3 2 builds 0.24ms
test_fixture_fail tests/functional/test_fixture.py Always failing 0.0% 2 0 3 2 builds 0.31ms
test_fixture_fail tests/functional/test_mark.py Always failing 0.0% 2 0 3 2 builds 0.28ms
test_fixture_pass[1-2] tests/functional/test_parameterize.py Always failing 0.0% 2 0 3 2 builds 0.30ms
test_heading_mismatch tests/functional/test_screenshot.py Always failing 0.0% 2 0 3 2 builds 1.4s
test_heading_mismatch tests/functional/test_selenium.py Always failing 0.0% 2 0 3 2 builds 1.4s
test_heading_mismatch[chromium] tests/functional/test_playwright.py Always failing 0.0% 2 0 3 2 builds 874ms
test_searching_for_a_product tests/functional/test_traceability.py Always failing 0.0% 2 0 3 2 builds 0.24ms
test_the_api_rejects_the_order tests/functional/test_attachments.py Always failing 0.0% 2 0 3 2 builds 0.42ms
test_the_fixture_attaches_on_failure tests/functional/test_attachments.py Always failing 0.0% 2 0 3 2 builds 0.32ms
test_the_footer_year_is_current tests/functional/test_severity.py Always failing 0.0% 2 0 3 2 builds 0.33ms
test_an_async_with_block_records_one_step tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.39ms
test_an_async_with_block_is_held_open_across_what_it_awaits tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.32ms
test_an_async_with_block_hands_back_the_step_it_opened tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.30ms
test_a_sync_block_and_an_async_one_nest_in_one_another tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.31ms
test_the_message_goes_on_the_async_step_that_raised tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.31ms
test_a_decorated_coroutine_is_timed_across_the_call tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.34ms
test_a_decorated_coroutine_still_returns_what_it_returned tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.32ms
test_a_decorated_coroutines_own_arguments_fill_in_its_title tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.48ms
test_a_coroutine_that_raises_is_failed_and_the_exception_carries_on_out tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.32ms
test_an_async_function_behind_another_decorator_is_still_found tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.33ms
test_an_async_generator_is_not_mistaken_for_a_coroutine tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.41ms
test_gathered_legs_are_siblings_and_not_a_chain tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.41ms
test_gathered_legs_still_nest_under_the_step_that_fanned_them_out tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.34ms
test_a_plain_await_nests_the_way_a_plain_call_does tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.33ms
test_an_attachment_made_in_one_leg_is_filed_under_that_leg tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.31ms
test_one_step_object_entered_twice_at_once_closes_both tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.38ms
test_a_step_held_open_across_a_yield_closes_where_the_fixture_resumes tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.48ms
test_a_cancelled_tasks_open_step_is_closed_rather_than_left_behind tests/unit/test_async_steps.py Flaky 75.0% 4 1 3 1 build 0.40ms
test_a_record_with_no_nodeid_is_quarantined tests/unit/test_shards.py Flaky 80.0% 5 1 0 4 builds 106ms
test_shards_are_ordered_by_natural_id_not_by_load_order tests/unit/test_shards.py Flaky 80.0% 5 1 0 4 builds 331ms
test_a_duplicate_nodeid_folds_as_a_rerun_by_default tests/unit/test_shards.py Flaky 80.0% 5 1 0 4 builds 105ms
test_a_record_missing_keys_is_repaired_not_crashed tests/unit/test_shards.py Flaky 66.7% 6 1 0 4 builds 134ms
test_a_background_thread_nests_within_itself tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 13ms
test_a_bad_archive_count_is_reported_against_the_merge_flag tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 1.78ms
test_a_bare_assert_is_classified_rather_than_left_unsorted tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_bare_assert_is_read_as_an_assertion tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.18ms
test_a_bare_name_is_left_alone tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.15ms
test_a_bare_query_flag_is_left_alone tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_bdd_parameter_that_is_not_a_mapping_is_left_as_it_is tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_blank_flag_falls_through_rather_than_winning tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_blank_prefix_is_skipped_rather_than_matching_everything tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_blank_variable_does_not_count_as_being_on_that_system tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_body_is_redacted_at_any_depth tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_a_body_that_is_not_json_is_left_as_it_is tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_bracketed_half_that_is_not_two_numbers_is_not_guessed_at tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_broken_archive_is_skipped_not_fatal tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.86ms
test_a_broken_file_is_counted_in_the_totals tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 1.14ms
test_a_broken_file_sorts_ahead_of_the_run tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 1.82ms
test_a_broken_pyproject_that_says_nothing_about_this_plugin_is_not_our_business tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.68ms
test_a_browser_is_photographed_through_the_pages_inside_it tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_browser_named_something_else_is_still_found tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 377ms
test_a_browser_that_cannot_be_photographed_produces_nothing tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_browser_that_died_does_not_take_the_report_with_it tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 362ms
test_a_browser_that_raises_is_not_worth_failing_a_test_over tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_browser_that_refused_the_clipboard_says_what_to_press_instead tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.68ms
test_a_browser_the_test_never_named_is_still_photographed tests/unit/test_step_screenshots.py Stable 100.0% 4 0 0 4 builds 407ms
test_a_build_archived_before_ownership_existed_reads_as_unowned tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.54ms
test_a_build_archived_before_severity_existed_reads_as_unrated tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.66ms
test_a_build_below_its_target_is_graded_low tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_a_build_info_branch_is_not_argued_with tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 16ms
test_a_build_is_labelled_by_the_clock_it_started_on tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_build_that_decided_nothing_leaves_a_gap_not_a_zero tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.32ms
test_a_build_that_held_level_is_neither tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_a_build_that_moved_down_is_coloured_for_that tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_a_build_that_moved_down_says_so tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_build_that_moved_up_says_so_and_is_coloured_for_it tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.33ms
test_a_build_that_moved_up_says_so_with_a_sign tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_build_with_neither_is_left_unlabelled tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.13ms
test_a_build_without_pytest_cov_installed_simply_has_no_target[error0] tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.38ms
test_a_build_without_pytest_cov_installed_simply_has_no_target[error1] tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_build_written_before_start_time_existed_still_has_its_date tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_bundle_describes_itself_readably tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.43ms
test_a_bundle_from_the_future_stops_the_merge_rather_than_being_guessed_at tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.60ms
test_a_bundle_is_written_where_the_leg_was_told tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 31ms
test_a_bundle_named_directly_is_taken tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.69ms
test_a_bundle_naming_its_own_asset_folder_is_believed tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_a_bundle_says_where_its_pictures_are tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_bundle_that_never_recorded_when_it_finished_says_so tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_bundle_this_version_wrote_is_read tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 1.07ms
test_a_bundle_with_no_id_is_named_after_its_own_directory tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_a_bundle_with_no_token_is_put_aside_by_a_leg_that_has_one tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 1.71ms
test_a_bundle_with_no_token_is_put_aside_rather_than_merged tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_bundle_with_no_version_at_all_is_still_read tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 1.01ms
test_a_bundle_written_before_the_trail_existed_reads_as_no_trail tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_cached_result_of_the_wrong_shape_is_ignored tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_call_can_be_described_without_any_response_object tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_call_carries_its_parts_and_its_status tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 403ms
test_a_call_of_a_second_or_more_is_shown_in_seconds tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_call_under_a_second_is_shown_in_milliseconds tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 1.24ms
test_a_call_with_a_request_body_keeps_every_part tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 364ms
test_a_call_with_no_timing_says_nothing tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.31ms
test_a_call_with_no_timing_shows_no_time tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_callspec_with_no_params_at_all_yields_nothing tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_capped_step_still_nests_the_ones_that_follow_it tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_a_card_says_how_the_test_ended tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 392ms
test_a_card_short_enough_to_show_everything_offers_nothing_to_open tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.02ms
test_a_caught_failure_leaves_the_step_that_caught_it_passing tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_chatty_test_is_trimmed_to_the_limit tests/unit/test_logs.py Stable 100.0% 4 0 0 4 builds 359ms
test_a_ci_run_that_cannot_be_linked_is_still_named tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_a_class_docstring_is_not_repeated_under_every_method tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 378ms
test_a_clean_suite_scores_full_marks tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.78ms
test_a_clean_teardown_changes_nothing tests/unit/test_teardown_failures.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_clean_test_is_untouched tests/unit/test_teardown_failures.py Stable 100.0% 4 0 0 4 builds 403ms
test_a_client_that_kept_no_timing_reports_none tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_cobertura_condition_is_read_as_taken_over_total tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_cobertura_total_that_is_not_a_number_counts_as_none tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_collection_error_is_not_counted_as_a_collected_test tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 30ms
test_a_collection_error_is_not_counted_as_a_test tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.32ms
test_a_collection_error_keeps_a_dotted_classname tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_a_collection_skip_says_the_module_was_skipped tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_a_collector_that_imported_cleanly_is_not_recorded tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 0.69ms
test_a_config_with_no_plugin_manager_at_all_has_no_session tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_context_holding_no_page_yields_nothing tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_context_holding_something_unphotographable_yields_nothing tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_context_is_photographed_through_its_pages tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_control_character_is_escaped_rather_than_written_raw tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_controller_keeps_one_copy_of_every_workers_collect_error tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 0.35ms
test_a_controller_that_collected_no_records_still_reports_what_it_asked_for tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_a_coroutine_is_closed_rather_than_left_to_warn tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_coroutine_that_will_not_close_is_still_not_a_picture tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_count_keeps_room_for_the_build_being_reported tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 1.10ms
test_a_count_keeps_the_newest tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.64ms
test_a_count_larger_than_the_history_drops_nothing tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.83ms
test_a_count_of_zero_keeps_nothing tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.67ms
test_a_count_of_zero_removes_the_folder tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.84ms
test_a_count_that_is_not_one_fails_the_run["ten"-takes a number] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.69ms
test_a_count_that_is_not_one_fails_the_run[-1-cannot be negative] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.01ms
test_a_counter_opens_the_tab_filters_the_table_and_says_so_in_the_url tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 0.55ms
test_a_counter_standing_at_zero_is_not_pressable tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 1.05ms
test_a_counter_still_shows_the_count_it_always_did tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 9.53ms
test_a_cov_plugin_with_no_controller_yet_has_no_session tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_coverage_data_file_is_summarised tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 84ms
test_a_coverage_json_names_itself_as_the_source tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.62ms
test_a_crashed_worker_is_skipped_rather_than_raising tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_credential_in_the_query_string_is_blanked_out tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_a_credential_never_reaches_the_file tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 369ms
test_a_customer_can_pay tests/functional/test_severity.py Stable 100.0% 2 0 0 2 builds 0.32ms
test_a_cutoff_drops_what_is_older_than_it tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.71ms
test_a_data_file_that_is_not_one_is_not_a_summary tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 1.23ms
test_a_dated_path_in_an_ini_profile_survives_being_read tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.02ms
test_a_declined_card_is_rejected tests/functional/test_traceability.py Stable 100.0% 2 0 0 2 builds 0.21ms
test_a_decoded_body_skips_the_round_trip tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_decorated_step_whose_signature_cannot_be_bound_still_records tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_a_detached_head_is_left_out_rather_than_reported_as_a_branch tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.39ms
test_a_diff_line_is_not_mistaken_for_a_raised_exception tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.20ms
test_a_directory_holding_something_that_is_not_a_bundle_is_not_this_writes_problem tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 30ms
test_a_distribution_that_will_not_say_what_it_is_called_is_skipped tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.57ms
test_a_distribution_using_the_newer_attribute_name_is_read tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_dotted_exception_groups_with_its_bare_name tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.23ms
test_a_dotted_exception_is_cut_to_its_class tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_doubled_separator_is_collapsed tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_dry_run_writes_nothing_but_still_reports tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 3.09ms
test_a_duplicate_nodeid_does_not_depend_on_rerunfailures tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 217ms
test_a_duplicate_nodeid_keeps_what_each_shard_saw tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.34ms
test_a_duplicate_that_finished_earlier_does_not_win tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_duration_that_arrived_as_text_is_read_rather_than_dropped tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_duration_that_cannot_be_one_is_read_as_unmeasured tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.57ms
test_a_duration_that_cannot_be_read_becomes_zero tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_duration_that_cannot_be_read_becomes_zero[None] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_duration_that_cannot_be_read_becomes_zero[] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_duration_that_cannot_be_read_becomes_zero[soon] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_duration_that_cannot_be_read_becomes_zero[value3] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_a_duration_that_is_not_a_number_has_no_milliseconds tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_duration_that_is_not_a_number_says_nothing tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.15ms
test_a_failed_call_is_a_failure_carrying_the_assertion tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_failed_copy_shows_no_content_at_all tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.66ms
test_a_failing_card_prints_the_error_it_belongs_to tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 456ms
test_a_failing_step_carries_the_message tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 423ms
test_a_failing_step_is_the_one_that_carries_the_message tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 386ms
test_a_failing_teardown_is_not_reported_as_a_pass tests/unit/test_teardown_failures.py Stable 100.0% 4 0 0 4 builds 405ms
test_a_failing_test_is_photographed_with_no_hook_at_all tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 367ms
test_a_failure_carries_the_first_line_as_the_message_and_the_body_as_text tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_a_failure_message_holding_a_repr_is_written_as_text tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 0.61ms
test_a_failure_offers_the_link_beside_the_error_and_the_command tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 1.33ms
test_a_failure_outside_the_call_phase_is_an_error_not_a_failure tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_a_failure_that_named_no_step_files_its_picture_under_the_phase tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.14ms
test_a_failure_with_no_message_anywhere_falls_back_to_the_status tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.15ms
test_a_failure_with_no_representation_carries_no_error tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_falsey_value_that_was_actually_set_survives tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_fast_test_is_not_printed_as_no_time_at_all tests/unit/test_durations.py Stable 100.0% 3 0 0 3 builds 0.94ms
test_a_field_a_bundle_does_not_carry_answers_its_default tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.41ms
test_a_field_block_hands_back_everything_it_holds tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_a_field_that_exists_nowhere_is_an_attribute_error tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_file_from_disk tests/functional/test_attachments.py Stable 100.0% 2 0 0 2 builds 0.90ms
test_a_file_name_cannot_smuggle_markup_into_the_table tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_file_named_directly_is_taken_as_it_is tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.91ms
test_a_file_on_disk_says_when_it_was_written tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_file_that_did_not_record_when_it_was_written_still_names_itself tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_file_that_is_not_a_bundle_does_not_stop_the_merge tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 1.40ms
test_a_file_that_is_not_json_is_skipped_and_named tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.52ms
test_a_file_that_is_not_structured_is_kept_verbatim tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.67ms
test_a_file_that_is_not_there_is_skipped_rather_than_raising tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.38ms
test_a_file_with_branches_shows_how_many_were_taken tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_a_file_with_no_branches_shows_a_dash_not_a_zero tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_a_filter_offers_a_way_out_of_itself tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 0.41ms
test_a_filter_that_is_already_on_is_not_drawn_again tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 0.84ms
test_a_first_build_has_no_delta_to_show tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.36ms
test_a_first_build_has_no_movement_to_report tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.50ms
test_a_first_build_has_no_worst_suite_to_name tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.42ms
test_a_first_build_has_nothing_to_compare_against tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_first_build_has_nothing_to_have_moved_from tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.57ms
test_a_first_build_is_still_a_first_build_after_an_earlier_render tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 1.01ms
test_a_fixture_holding_a_step_open_does_not_swallow_the_test tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_fixture_that_already_ran_is_read_out_of_the_request_cache tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_fixture_that_blew_up_after_the_browser_opened_is_photographed tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 424ms
test_a_fixture_that_is_not_a_browser_is_left_alone tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_fixture_that_never_ran_is_not_built_to_be_photographed tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_fixture_that_raised_has_no_value_to_photograph tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_flag_and_its_ini_key_both_reach_the_same_setting tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.33ms
test_a_flag_on_the_command_line_beats_the_profile tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.04ms
test_a_flag_with_nothing_after_it_says_what_it_takes tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_float_that_cannot_be_read_is_none[None] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_float_that_cannot_be_read_is_none[] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_float_that_cannot_be_read_is_none[later] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_float_that_cannot_be_read_is_none[value3] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_folded_duplicates_attachment_names_the_shard_that_took_it tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 3.49ms
test_a_folder_holding_no_bundles_yields_nothing tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.85ms
test_a_folder_holding_nothing_but_another_runs_leftovers_merges_nothing tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_folder_holding_only_another_runs_bundles_merges_nothing tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 1.17ms
test_a_folder_is_its_own_report_base tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.72ms
test_a_folder_is_searched_for_the_data_files_inside_it tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.83ms
test_a_folder_is_what_the_flag_usually_takes tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_folder_named_after_a_file_resolves_the_same_way_the_reporter_does tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_folder_named_after_the_file_it_holds_is_refused tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_folder_of_artifacts_is_walked tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 1.02ms
test_a_folder_of_only_unreadable_files_says_why_it_merged_nothing tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 0.99ms
test_a_folder_that_is_not_a_checkout_reports_nothing tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 29ms
test_a_folder_that_is_really_a_file_is_refused_before_the_merge_runs tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.61ms
test_a_folder_with_no_bundles_merges_nothing tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 0.64ms
test_a_function_with_no_code_object_asks_for_nothing tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_a_generated_docstring_is_not_shown_as_a_description tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 413ms
test_a_gherkin_example_row_is_unwrapped_into_its_own_values tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_gherkin_step_carries_its_word_as_a_badge[and] tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.21ms
test_a_gherkin_step_carries_its_word_as_a_badge[but] tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.24ms
test_a_gherkin_step_carries_its_word_as_a_badge[given] tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.33ms
test_a_gherkin_step_carries_its_word_as_a_badge[then] tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.19ms
test_a_gherkin_step_carries_its_word_as_a_badge[when] tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.22ms
test_a_gherkin_step_is_badged_as_one tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 387ms
test_a_gherkin_test_names_the_feature_it_came_from tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.23ms
test_a_github_actions_run_is_named_by_its_run_and_attempt tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_github_enterprise_server_is_linked_to_itself tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_a_green_run_has_no_failure_panel tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.07ms
test_a_green_run_has_no_headline_at_all tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.74ms
test_a_group_is_compared_against_the_build_before tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.65ms
test_a_har_file_keeps_none_of_its_auth_headers tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.75ms
test_a_har_shaped_header_list_is_redacted tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_higher_illegal_codepoint_is_escaped_in_four_digits tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_hostile_scheme_never_becomes_an_href tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_a_json_body_is_pretty_printed tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.47ms
test_a_json_file_is_redacted_like_any_other_body tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.79ms
test_a_junit_dry_run_writes_no_document tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 2.53ms
test_a_key_this_version_never_heard_of_survives_being_read tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_a_known_bug_that_failed_as_expected_is_an_xfail tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.38ms
test_a_label_said_twice_inside_one_layer_keeps_the_first[build_info] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.78ms
test_a_label_said_twice_inside_one_layer_keeps_the_first[link_patterns] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.72ms
test_a_label_said_twice_inside_one_layer_keeps_the_first[links] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.77ms
test_a_large_payload_is_trimmed_to_the_limit tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 373ms
test_a_leading_dot_slash_is_dropped tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_a_leg_asked_for_packages_carries_them_into_the_merge tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 63ms
test_a_leg_given_a_label_keeps_the_one_it_was_given tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 28ms
test_a_leg_lists_no_packages_unless_it_was_asked_to tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 33ms
test_a_leg_off_a_ci_system_carries_no_run_token tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 0.20ms
test_a_leg_on_a_ci_system_takes_its_token_from_the_ci_variables tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 0.21ms
test_a_leg_that_captured_normally_carries_no_notice tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 29ms
test_a_leg_that_collected_nothing_explicitly_counts_its_records tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 30ms
test_a_leg_that_measured_coverage_carries_it tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 28ms
test_a_leg_that_measured_no_coverage_carries_none tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 29ms
test_a_leg_whose_coverage_read_raised_still_writes_its_records tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 30ms
test_a_leg_with_a_token_keeps_only_the_bundles_carrying_it tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_leg_with_a_token_merges_only_this_runs_bundles tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 1.53ms
test_a_leg_without_a_token_merges_everything_as_it_always_has tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 1.48ms
test_a_level_is_the_same_level_however_it_was_capitalised tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_a_levelless_marker_rates_nothing tests/functional/test_severity.py Stable 100.0% 2 0 0 2 builds 0.26ms
test_a_link_pattern_a_profile_claims_is_not_taken_back_by_the_ini_key tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.10ms
test_a_list_can_be_overridden_from_the_environment_a_line_at_a_time tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.75ms
test_a_list_field_that_arrived_as_something_else_becomes_empty tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_list_label_is_matched_the_way_the_readers_match_it tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.83ms
test_a_list_label_keeps_the_position_the_lower_layer_gave_it[build_info] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.83ms
test_a_list_label_keeps_the_position_the_lower_layer_gave_it[link_patterns] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.89ms
test_a_list_label_keeps_the_position_the_lower_layer_gave_it[links] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.95ms
test_a_list_label_no_higher_layer_names_is_kept[build_info] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.94ms
test_a_list_label_no_higher_layer_names_is_kept[link_patterns] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.71ms
test_a_list_label_no_higher_layer_names_is_kept[links] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.77ms
test_a_list_of_pairs_is_read_too tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_live_run_says_it_measured_the_numbers_itself tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_live_session_that_measured_nothing_says_why tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 1.00ms
test_a_long_docstring_is_cut tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_long_message_holding_markup_is_escaped_in_the_modal tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 0.74ms
test_a_long_parametrised_node_id_is_cut_but_stays_its_own_address tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_a_long_run_is_read_in_hours tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.23ms
test_a_long_test_name_reaches_the_card_whole tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 406ms
test_a_long_value_is_cut_to_fit_the_line tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_long_value_is_cut_to_something_a_badge_can_hold tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_machine_that_is_not_a_ci_runner_has_no_token tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_malformed_json_body_survives_verbatim tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_marker_added_while_the_test_ran_is_not_missed tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 364ms
test_a_marker_another_plugin_applied_as_plumbing_is_hidden tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_marker_is_written_the_way_the_file_wrote_it tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_marker_name_becomes_the_label_of_the_row_its_ids_sit_in tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_marker_nobody_configured_points_nowhere tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_marker_on_the_class_is_not_missed tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 369ms
test_a_marker_says_where_it_was_written tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 379ms
test_a_marker_says_which_scope_it_was_written_at tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_marker_that_disagrees_with_the_option_still_adds_up tests/unit/test_reruns.py Stable 100.0% 4 0 0 4 builds 408ms
test_a_marker_that_was_not_named_as_traceability_stays_out_of_the_xml tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_marker_with_empty_brackets_links_nowhere tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_marker_with_empty_brackets_writes_no_property tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_marker_with_no_pattern_is_the_badge_it_has_always_been tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_a_marker_with_nothing_to_say_is_just_its_name tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.47ms
test_a_matrix_that_agrees_about_its_build_says_it_once tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.33ms
test_a_matrix_that_names_two_pipelines_links_neither tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_matrix_where_every_shard_captured_normally_says_nothing tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_matrix_where_one_leg_ran_with_s_answers_for_each_leg tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.31ms
test_a_merge_can_be_asked_to_fail_on_a_failing_run tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 218ms
test_a_merge_of_a_passing_run_exits_zero_even_with_exit_code tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 246ms
test_a_merge_that_found_no_bundles_names_where_it_looked tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 2.64ms
test_a_merge_without_coverage_records_none_and_says_why tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 108ms
test_a_merge_writes_one_build_not_one_per_shard tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 214ms
test_a_merge_writes_the_report_it_was_asked_for tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 214ms
test_a_merged_build_records_a_status_its_own_archive_loader_can_read tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 206ms
test_a_merged_report_matches_a_single_run tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.1s
test_a_message_full_of_markup_stays_text_in_the_panel tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.74ms
test_a_message_holding_quotes_cannot_break_out_of_the_attribute tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.20ms
test_a_message_naming_nothing_is_left_unclassified tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.19ms
test_a_message_of_pure_whitespace_counts_as_nothing_to_copy tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.97ms
test_a_message_shaped_like_a_placeholder_is_not_substituted tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.14ms
test_a_message_that_fits_fades_nowhere tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.09ms
test_a_message_that_fits_is_copyable_but_has_nothing_to_expand_to tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.39ms
test_a_message_that_is_all_blank_lines_says_nothing tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_a_message_that_names_nothing_is_left_unclassified tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_message_that_was_cut_offers_the_panel tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.28ms
test_a_methods_receiver_is_not_a_fixture tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_missing_screenshot_is_dropped_rather_than_left_broken tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 107ms
test_a_missing_screenshot_method_produces_no_picture tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.35ms
test_a_mistyped_junit_path_does_not_cost_the_report tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 401ms
test_a_mock_is_never_photographed tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.34ms
test_a_mock_is_not_mistaken_for_a_browser tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 2.82ms
test_a_module_level_pytestmark_is_not_missed tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 374ms
test_a_module_level_skip_reaches_the_report_with_its_reason tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 415ms
test_a_module_skipped_at_module_level_is_recorded_as_a_skip tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 0.31ms
test_a_module_that_failed_to_import_is_recorded_as_an_error tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_a_module_that_will_not_import_reaches_the_report tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 373ms
test_a_movement_card_opens_the_same_way tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.33ms
test_a_movement_too_small_to_matter_is_called_no_change tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_name_is_shown_exactly_as_pytest_named_it tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 417ms
test_a_name_nobody_set_is_an_attribute_error_not_a_key_error tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_name_that_does_not_look_like_an_exception_is_still_offered tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_name_that_is_only_a_walk_is_refused_outright[../] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_name_that_is_only_a_walk_is_refused_outright[..] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_name_that_is_only_a_walk_is_refused_outright[.] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_a_name_that_is_only_a_walk_is_refused_outright[/] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_name_that_is_only_a_walk_is_refused_outright[None] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_name_that_is_only_a_walk_is_refused_outright[] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_name_that_looks_like_a_placeholder_is_not_filled_in tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.96ms
test_a_name_whose_stamp_is_not_a_bare_number_falls_back_to_the_mtime tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.72ms
test_a_name_written_that_was_never_there_becomes_readable tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_named_coverage_file_is_read_in_preference_to_the_shards tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.92ms
test_a_named_coverage_file_is_used tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 106ms
test_a_named_coverage_file_that_is_not_coverage_says_which_file tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 2.22ms
test_a_named_file_beats_the_live_session tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.70ms
test_a_named_folder_that_was_never_written_offers_no_link tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.60ms
test_a_named_prefix_is_stripped tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_near_miss_is_offered_the_name_it_nearly_typed tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.99ms
test_a_negative_step_limit_is_read_as_no_limit tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_newer_bundle_beside_a_merging_leg_does_not_end_the_run_in_a_traceback tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 286ms
test_a_newer_bundle_format_is_refused_by_name tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.00ms
test_a_non_ascii_payload_survives_the_write tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 369ms
test_a_non_ascii_step_survives_the_write tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 397ms
test_a_nonsense_numprocesses_is_not_an_error tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_a_null_in_the_json_falls_through_to_the_default tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_number_is_never_compared_against_a_word tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_number_that_can_be_read_as_a_float_is[1.5-1.5] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_number_that_can_be_read_as_a_float_is[2-2.0] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_number_that_can_be_read_as_an_int_is[0-0] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_number_that_can_be_read_as_an_int_is[12-12] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_number_that_can_be_read_as_an_int_is[12.7-12_0] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_number_that_can_be_read_as_an_int_is[12.7-12_1] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_numeric_string_is_still_a_duration tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.23ms
test_a_page_is_its_own_target tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_a_page_reached_through_three_fixtures_is_photographed_once tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_parallel_run_archives_one_build_not_one_per_worker tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 1.7s
test_a_parallel_run_matches_a_serial_one tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 1.2s
test_a_parallel_run_reports_every_test tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 752ms
test_a_parallel_run_reports_the_broken_file_once tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 736ms
test_a_parallel_run_reports_the_combined_coverage tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 1.2s
test_a_parallel_shard_counts_the_tests_it_collected tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 724ms
test_a_parallel_shard_writes_one_bundle_not_one_per_worker tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 647ms
test_a_parametrised_test_is_quoted_so_a_shell_cannot_read_its_brackets tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.54ms
test_a_parametrize_marker_shows_its_names_not_every_row tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 426ms
test_a_parametrize_marker_shows_only_its_names tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_parametrized_argument_is_a_parameter_rather_than_a_fixture tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 383ms
test_a_parametrized_argument_is_shown_as_a_parameter_not_a_fixture tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_parent_that_names_it_back_does_not_hang_or_lose_it tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.16ms
test_a_part_under_the_limit_is_untouched tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_part_with_no_text_is_dropped tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_passing_row_offers_nothing tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.10ms
test_a_passing_setup_does_not_overwrite_the_tests_own_status tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_passing_test_is_a_bare_testcase tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.53ms
test_a_passing_test_is_not_photographed_by_default tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 374ms
test_a_passing_test_keeps_its_screenshot tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 413ms
test_a_path_that_cannot_be_read_at_all_is_not_coverage tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.48ms
test_a_path_that_cannot_be_written_costs_the_xml_and_nothing_else tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.87ms
test_a_path_that_ends_in_a_separator_falls_back_to_the_whole_thing tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.14ms
test_a_path_that_is_not_there_contributes_nothing tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.53ms
test_a_path_that_is_not_there_yields_nothing tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.70ms
test_a_pattern_is_read_from_the_command_line_and_the_ini_together tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_pattern_with_no_placeholder_is_a_fixed_destination tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_payload_is_escaped_rather_than_rendered tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 357ms
test_a_payload_is_escaped_rather_than_rendered tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 402ms
test_a_payload_is_trimmed_to_the_limit tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.53ms
test_a_phase_pytest_does_not_time_is_not_recorded tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_picture_from_a_test_that_passed_is_filed_under_the_phase tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.14ms
test_a_picture_taken_inside_a_step_is_filed_under_it tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.20ms
test_a_picture_taken_inside_a_step_says_so_itself tests/unit/test_step_screenshots.py Stable 100.0% 4 0 0 4 builds 393ms
test_a_plain_dict_of_headers_is_read tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_plain_note tests/functional/test_attachments.py Stable 100.0% 2 0 0 2 builds 0.16ms
test_a_plain_number_elapsed_is_read_as_it_is tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_a_plain_pytest_test_names_no_scenario tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.14ms
test_a_plain_run_is_not_a_worker tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_plain_run_writes_a_junit_file tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 768ms
test_a_plain_step_carries_no_gherkin_badge tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.14ms
test_a_playwright_page_is_photographed tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_plugin_is_named_and_versioned tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_plugin_manager_that_raises_costs_the_tab_and_nothing_else tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_plugin_with_no_version_is_still_named tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_a_prefix_is_typed_the_way_the_path_reads tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_prefix_that_does_not_match_leaves_the_id_alone tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_prefix_that_swallows_the_whole_id_is_refused tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_private_argument_is_not_offered_as_a_fixture tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_profile_cannot_be_called_none tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.64ms
test_a_profile_found_in_another_case_is_reported_as_it_was_written tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.67ms
test_a_profile_that_is_not_a_table_says_so tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.84ms
test_a_profiles_list_entries_are_added_to_the_ones_already_set tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.88ms
test_a_project_with_no_config_files_at_all_is_left_alone tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.76ms
test_a_property_that_raises_does_not_take_the_test_down_with_it tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_pull_request_reports_the_branch_and_not_the_merge_ref tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 15ms
test_a_query_credential_does_not_survive_a_call tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.32ms
test_a_quote_in_a_name_cannot_end_an_attribute tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 0.56ms
test_a_re_run_workflow_links_its_own_attempt tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.32ms
test_a_real_exception_beats_an_assert_seen_first tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_real_retry_reaches_the_page_with_both_failures_on_it tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 426ms
test_a_real_run_is_shaped_by_the_profile_it_names tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 380ms
test_a_real_run_stops_before_collection_on_a_profile_that_is_not_there tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 213ms
test_a_real_run_takes_its_override_from_the_environment tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 369ms
test_a_receiver_is_not_offered_as_a_placeholder_value tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.32ms
test_a_record_whose_phases_are_unreadable_falls_back_to_its_duration tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_a_record_with_neither_takes_no_time tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.15ms
test_a_record_with_no_phases_uses_its_own_duration tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_record_with_nothing_readable_took_no_time tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_record_with_nothing_to_identify_it_has_no_anchor_of_its_own tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_record_written_before_steps_had_parents_still_renders tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.16ms
test_a_records_time_is_the_sum_of_its_phases tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_report_path_that_cannot_be_written_is_refused_before_the_merge tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 108ms
test_a_repr_that_raises_does_not_take_the_report_down tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_a_rerun_count_that_cannot_be_read_becomes_zero tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_rerun_is_one_testcase_with_the_count_in_system_out tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_a_rerun_of_a_matrix_does_not_share_the_first_attempts_token tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 0.71ms
test_a_reset_is_never_implied_by_anything_else tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_a_response_object_fills_in_the_whole_attachment tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.38ms
test_a_retried_leg_whose_artifact_landed_twice_keeps_the_later_run tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_retried_test_keeps_its_place_in_collection_order tests/unit/test_reruns.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_retried_test_shows_the_attempt_that_was_reported tests/unit/test_logs.py Stable 100.0% 4 0 0 4 builds 396ms
test_a_retry_inside_one_build_is_enough_to_be_flaky tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.54ms
test_a_retry_keeps_the_screenshots_of_the_attempt_it_replaces tests/unit/test_reruns.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_retry_keeps_what_the_attempt_before_it_failed_with tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.32ms
test_a_retry_reports_the_attempt_that_stuck tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 389ms
test_a_retry_that_attached_nothing_keeps_the_earlier_evidence tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 372ms
test_a_retry_that_took_its_own_screenshot_keeps_that_one tests/unit/test_reruns.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_a_row_a_profile_repeats_from_the_ini_file_is_shown_once tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.87ms
test_a_row_is_found_through_the_table_rather_than_by_its_id tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 0.66ms
test_a_row_the_profile_answers_differently_is_the_profiles_answer tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.15ms
test_a_row_with_a_url_becomes_a_link tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.49ms
test_a_row_with_no_node_id_is_still_addressable tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 1.30ms
test_a_row_with_no_node_id_offers_no_command tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.52ms
test_a_row_with_no_picture_says_so_rather_than_offering_one tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 418ms
test_a_row_with_no_trail_parks_nothing_and_offers_nothing tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.81ms
test_a_row_without_a_url_is_still_plain_text tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_a_run_carries_its_four_fields_through_a_bundle tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_run_exactly_at_the_limit_is_not_called_short tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_a_run_that_asked_for_branches_but_measured_none_gets_no_tile tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_a_run_that_asked_for_no_xml_writes_none tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.86ms
test_a_run_that_collected_nothing_still_writes_a_valid_document tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 243ms
test_a_run_that_measured_nothing_draws_no_histogram tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.49ms
test_a_run_that_measured_nothing_is_not_coloured_as_a_success tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_run_that_measured_nothing_says_so tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 435ms
test_a_run_that_named_no_trace_markers_writes_the_document_it_always_did tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_run_that_rated_nothing_writes_no_severity_property tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_run_that_wrote_no_html_report_offers_no_link tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_run_token_from_the_flag_beats_the_ini_and_the_ci_system tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 0.80ms
test_a_run_with_no_coverage_anywhere_says_nothing_at_all tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.52ms
test_a_run_with_no_coverage_at_all_gets_no_such_notice tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 412ms
test_a_run_with_no_coverage_leaves_the_tab_empty tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_a_run_with_no_files_renders_no_rows tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_a_run_with_no_plugins_at_all_names_none tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_a_run_with_nothing_on_disk_is_left_alone tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.46ms
test_a_run_with_pytest_cov_fills_in_the_coverage_tab tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 437ms
test_a_run_with_pytest_cov_reports_the_total_the_terminal_printed tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 433ms
test_a_run_without_branch_coverage_gets_no_branch_tiles tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.37ms
test_a_run_without_coverage_says_how_to_get_it tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 363ms
test_a_run_without_pytest_cov_has_no_live_session tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_runner_too_old_for_the_second_variable_still_gets_a_token tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_scalar_is_not_treated_as_json tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_scenario_starting_is_remembered_for_the_record tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.95ms
test_a_scenario_with_no_tags_anywhere_records_an_empty_list tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.34ms
test_a_scenarios_steps_arrive_without_anyone_naming_them tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 426ms
test_a_scenarios_tags_arrive_as_markers tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 395ms
test_a_scheme_the_report_will_not_render_is_dropped_rather_than_linked tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_screenshot_attached_from_a_fixture_teardown_reaches_the_report tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 411ms
test_a_screenshot_attached_from_the_makereport_hook_still_reaches_the_report tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 411ms
test_a_screenshot_call_returning_a_path_is_not_a_picture tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_screenshot_call_that_raises_produces_no_picture tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_screenshot_caption_holding_markup_is_written_as_text tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 1.03ms
test_a_screenshot_inherited_from_the_shard_next_door_still_resolves tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 121ms
test_a_screenshot_is_not_lent_to_the_next_test tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 470ms
test_a_second_build_shows_what_moved tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 854ms
test_a_second_different_leg_landing_on_one_directory_is_named tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 57ms
test_a_second_or_more_is_said_in_seconds tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.16ms
test_a_second_render_in_one_process_starts_the_trend_over tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 1.43ms
test_a_second_run_opens_the_trends tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.03ms
test_a_second_shard_keeps_the_first_shards_screenshots tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 578ms
test_a_secret_is_hidden_by_default tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_selenium_driver_is_photographed tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_separator_is_folded_so_the_id_cannot_become_a_directory tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_a_sequential_test_is_left_in_the_order_it_ran tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.21ms
test_a_serial_run_has_no_worker_id tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_serial_run_says_nothing_about_workers tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.37ms
test_a_serial_shard_row_says_nothing_about_workers tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_a_session_with_no_data_to_report_is_not_a_failure tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_a_setting_no_layer_mentions_keeps_its_ini_value tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.65ms
test_a_setting_nobody_named_is_left_out_until_all_is_asked_for tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.92ms
test_a_setup_cfg_may_spell_the_sections_the_way_it_spells_pytests tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.35ms
test_a_setup_error_says_so_and_a_teardown_error_says_so tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.31ms
test_a_severity_is_its_own_kind_of_marker tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_severity_is_read_from_the_most_recent_build_that_named_one tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.69ms
test_a_severity_row_counts_the_tests_rated_at_it tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.71ms
test_a_severity_with_empty_brackets_is_an_ordinary_marker tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_shard_file_carries_every_record_key tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 278ms
test_a_shard_id_containing_html_still_cleans_and_writes_its_own_directory tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 281ms
test_a_shard_id_that_sanitises_to_nothing_is_a_usage_error tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.32ms
test_a_shard_names_its_screenshots_under_its_own_directory tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 304ms
test_a_shard_refuses_an_empty_id tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 229ms
test_a_shard_row_prefers_the_os_it_named_over_the_kernel tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_shard_row_says_how_many_workers_split_it tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_shard_run_refuses_to_write_one tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 275ms
test_a_shard_that_already_folded_a_retry_keeps_both_its_attempts tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.16ms
test_a_shard_writes_its_records_and_no_report tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 279ms
test_a_shards_own_build_info_still_beats_what_was_detected tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_a_shopper_buys_count_of_an_item[1] tests/functional/test_gherkin.py Stable 100.0% 2 0 0 2 builds 59ms
test_a_shopper_buys_count_of_an_item[3] tests/functional/test_gherkin.py Stable 100.0% 2 0 0 2 builds 59ms
test_a_shopper_can_buy_one_item tests/functional/test_steps.py Stable 100.0% 2 0 0 2 builds 257ms
test_a_shopper_can_buy_several[2] tests/functional/test_steps.py Stable 100.0% 2 0 0 2 builds 171ms
test_a_shopper_can_buy_several[5] tests/functional/test_steps.py Stable 100.0% 2 0 0 2 builds 165ms
test_a_signature_inspect_cannot_follow_costs_the_title_not_the_run tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.46ms
test_a_signature_that_binds_fills_the_placeholder_in tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_a_single_shard_that_measured_coverage_reports_it_plainly tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_skip_inside_a_step_is_not_a_failure_of_that_step tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_skip_is_its_own_thing tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.22ms
test_a_skip_reports_the_reason_not_the_tuple_repr tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_a_skip_with_no_reason_recorded_is_still_a_skip tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_a_skipif_condition_is_not_shown_as_the_bool_it_became tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 380ms
test_a_skipif_shows_the_reason_not_the_bool_it_became tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_skipif_written_with_a_string_condition_keeps_it tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_skipped_row_keeps_its_reason tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.72ms
test_a_skipped_test_is_a_skip_carrying_its_reason tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_skipped_test_is_not_promoted_by_a_clean_teardown tests/unit/test_teardown_failures.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_a_stale_bundle_does_not_join_a_token_carrying_build tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 396ms
test_a_status_is_grouped_by_its_class[-] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_status_is_grouped_by_its_class[200-2xx] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.33ms
test_a_status_is_grouped_by_its_class[301-3xx] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_a_status_is_grouped_by_its_class[404-4xx] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.42ms
test_a_status_is_grouped_by_its_class[503-5xx] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_a_status_is_grouped_by_its_class[999-] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_status_is_grouped_by_its_class[None-] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_status_is_grouped_by_its_class[oops-] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_status_is_toned_the_way_the_rows_own_pills_are tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_status_the_report_does_not_know_filters_nothing tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 0.87ms
test_a_step_after_the_failing_one_is_never_reported_as_run tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 440ms
test_a_step_called_with_nothing_says_nothing tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.13ms
test_a_step_index_pointing_past_the_end_is_not_trusted tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.13ms
test_a_step_index_that_is_not_a_number_is_not_trusted tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.14ms
test_a_step_is_filed_under_the_phase_that_ran_it tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 438ms
test_a_step_is_recorded_where_it_started_not_where_it_finished tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_step_is_timed tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 33ms
test_a_step_keeps_the_arguments_its_parser_pulled_out tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 452ms
test_a_step_keeps_what_it_was_called_with tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 410ms
test_a_step_nothing_was_attached_in_carries_no_chip tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.15ms
test_a_step_starting_and_finishing_reaches_the_steps_tab tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.66ms
test_a_step_that_raised_is_closed_with_why tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.63ms
test_a_step_that_raises_is_recorded_and_the_exception_carries_on tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_a_step_that_was_never_closed_is_closed_at_the_drain tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_step_the_suite_never_implemented_is_named_rather_than_skipped tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.77ms
test_a_step_title_cannot_become_a_template_placeholder tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 397ms
test_a_step_whose_parent_is_in_another_phase_is_a_root_here tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.16ms
test_a_step_with_no_kind_at_all_carries_no_badge tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.13ms
test_a_step_with_no_time_recorded_counts_as_none tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.27ms
test_a_stored_choice_outranks_the_system_preference tests/unit/test_theme.py Stable 100.0% 4 0 0 4 builds 30ms
test_a_string_is_passed_through_without_being_re_stringified tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_a_string_loses_the_quotes_that_said_nothing tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_a_sub_millisecond_step_is_not_shown_as_nothing tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.36ms
test_a_suite_is_named_by_its_file tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.16ms
test_a_suite_is_named_by_its_file_in_the_rail tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 400ms
test_a_suite_name_holding_markup_is_written_as_text tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 0.54ms
test_a_suite_name_in_the_table_crosses_to_its_own_group tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 406ms
test_a_suite_split_across_shards_is_one_suite tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 109ms
test_a_suite_split_across_workers_is_reported_once tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 1.05ms
test_a_suite_that_also_passed_counts_both_halves_as_its_total tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_suite_that_configured_nothing_gets_the_report_it_had_before tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_a_suite_that_has_only_ever_failed_totals_its_failures tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_suite_that_named_no_owner_gets_no_panel tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.03ms
test_a_suite_that_named_one_gets_the_panel tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.04ms
test_a_suite_that_rated_nothing_gets_no_severity_panel tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.19ms
test_a_suite_that_rated_one_test_gets_the_panel tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.12ms
test_a_summary_renders_end_to_end_from_the_files_it_was_built_from tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.46ms
test_a_summary_that_named_no_source_still_says_something tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_switch_a_profile_turns_on_reads_as_on tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.60ms
test_a_switch_takes_the_words_an_ini_file_would_have_used tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.68ms
test_a_switch_that_is_neither_fails_the_run tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.84ms
test_a_system_that_only_says_ci_is_still_named tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.35ms
test_a_tab_hash_can_carry_options_behind_a_question_mark tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 0.71ms
test_a_target_replaces_the_bands_rather_than_joining_them tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_target_the_build_exactly_met_is_not_shown_as_a_failure tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.73ms
test_a_teardown_that_raised_turns_a_pass_into_an_error tests/unit/test_teardown_failures.py Stable 100.0% 4 0 0 4 builds 0.33ms
test_a_test_counts_once_because_it_has_one_severity tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.65ms
test_a_test_faster_than_the_time_column_can_show_is_not_flat_zero tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.17ms
test_a_test_holding_no_browser_produces_nothing tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_test_is_timed_by_the_phases_pytest_reported tests/unit/test_durations.py Stable 100.0% 5 0 0 5 builds 1.4s
test_a_test_missing_from_the_latest_build_is_marked tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.91ms
test_a_test_name_holding_markup_is_written_as_text tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 0.70ms
test_a_test_name_in_the_table_crosses_to_its_own_entry tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 411ms
test_a_test_name_never_becomes_script_the_page_runs tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 414ms
test_a_test_name_never_reaches_the_page_as_source_code tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.83ms
test_a_test_named_under_a_failure_group_reaches_the_page_escaped tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.22ms
test_a_test_nobody_claimed_is_a_row_rather_than_a_gap tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.63ms
test_a_test_nobody_rated_is_unrated_rather_than_normal tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_test_only_ever_skipped_has_no_pass_rate tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.70ms
test_a_test_that_already_failed_keeps_its_own_failure tests/unit/test_teardown_failures.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_a_test_that_alternates_is_flaky tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.10ms
test_a_test_that_always_passed_is_stable tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.74ms
test_a_test_that_attached_nothing_collects_nothing tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.88ms
test_a_test_that_attached_nothing_gets_no_screenshot tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 403ms
test_a_test_that_captured_nothing_has_no_payload tests/unit/test_logs.py Stable 100.0% 4 0 0 4 builds 394ms
test_a_test_that_errored_in_setup_is_left_alone tests/unit/test_teardown_failures.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_a_test_that_failed_before_its_teardown_keeps_that_failure tests/unit/test_teardown_failures.py Stable 100.0% 4 0 0 4 builds 389ms
test_a_test_that_managed_to_fail_twice_is_blamed_on_the_last tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.13ms
test_a_test_that_named_no_steps_shows_it_under_the_body tests/unit/test_step_screenshots.py Stable 100.0% 4 0 0 4 builds 400ms
test_a_test_that_names_no_steps_still_says_where_its_time_went tests/functional/test_steps.py Stable 100.0% 2 0 0 2 builds 89ms
test_a_test_that_never_passed_is_broken_not_flaky tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.14ms
test_a_test_that_never_ran_twice_is_stored_as_is tests/unit/test_reruns.py Stable 100.0% 4 0 0 4 builds 0.40ms
test_a_test_that_passed_is_a_pass_carrying_no_error tests/unit/test_offline.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_a_test_that_passes_on_a_retry_is_reported_as_passed tests/unit/test_reruns.py Stable 100.0% 4 0 0 4 builds 391ms
test_a_test_that_ran_once_gets_no_payload_in_a_real_run tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 410ms
test_a_test_that_ran_once_has_no_trail tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_a_test_that_took_its_own_picture_is_not_photographed_again tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 367ms
test_a_test_that_was_not_parametrized_has_no_parameters tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_test_this_run_no_longer_has_is_nobodys_morning tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.66ms
test_a_test_where_nothing_failed_blames_no_step tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.16ms
test_a_test_where_nothing_took_any_time_draws_no_bars tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.13ms
test_a_test_with_no_docstring_says_nothing tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_test_with_no_owner_marker_has_no_owners tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_test_with_no_pictures_files_nothing tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.14ms
test_a_test_with_no_steps_draws_nothing tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.14ms
test_a_test_with_two_owners_counts_for_both tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.66ms
test_a_tests_owners_reach_the_rail_as_one_attribute tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_thousand_deep_does_not_take_the_run_down_with_it tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 2.95ms
test_a_thread_that_leaked_a_step_does_not_indent_the_next_test tests/unit/test_async_steps.py Stable 100.0% 4 0 0 4 builds 2.35ms
test_a_ticketless_marker_links_nowhere tests/functional/test_traceability.py Stable 100.0% 2 0 0 2 builds 0.17ms
test_a_timedelta_style_elapsed_is_read_through_total_seconds tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_title_holding_markup_is_shown_as_text tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 425ms
test_a_title_naming_something_the_call_did_not_pass_keeps_its_braces tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_toml_profile_lands_on_the_options_the_flags_land_on tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.70ms
test_a_toml_table_is_the_natural_way_to_write_link_patterns tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.73ms
test_a_trail_that_arrives_already_folded_is_not_flattened tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_truncated_bundle_is_reported_rather_than_raising tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.18ms
test_a_truncated_list_is_written_out_in_full_behind_the_card tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.55ms
test_a_truncated_list_opens_rather_than_ending_at_a_count tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.21ms
test_a_tuple_is_accepted_where_a_list_was_expected tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_typo_is_reported_rather_than_promising_a_build tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_typo_stops_the_merge_rather_than_stamping_something_wrong tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_a_unittest_driver_is_found_on_the_test_itself tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 391ms
test_a_unittest_driver_on_self_is_found tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_a_unix_timestamp_is_accepted tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 1.76ms
test_a_unix_timestamp_is_taken_as_it_is tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_url_keeps_the_braces_that_are_not_the_placeholder tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_a_url_without_a_query_is_untouched tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_usefixtures_marker_counts_as_asking tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 362ms
test_a_usefixtures_marker_counts_as_asking tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_value_exactly_at_the_limit_is_left_alone tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_value_holding_an_equals_sign_survives_intact tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_value_that_cannot_be_repred_does_not_take_the_run_down tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_a_value_that_is_not_a_number_falls_back[None] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_value_that_is_not_a_number_falls_back[] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_a_value_that_is_not_a_number_falls_back[later] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_a_value_that_is_not_a_number_falls_back[value3] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_value_that_is_not_a_number_falls_back[value4] tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_value_that_will_not_stringify_does_not_take_the_step_down tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_a_value_the_flag_would_have_refused_fails_rather_than_being_dropped tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.63ms
test_a_variable_set_to_nothing_is_not_an_answer tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_variable_this_version_does_not_know_is_left_alone tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_version_that_is_not_a_number_is_read_as_the_oldest tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 2.71ms
test_a_walk_out_of_the_folder_is_flattened tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_walk_out_of_the_tree_does_not_survive tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_a_walk_that_raises_falls_back_rather_than_failing_the_test tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_windows_path_is_split_the_same_way tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.19ms
test_a_windows_runners_backslashes_become_the_same_id tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_windows_separator_is_flattened_too tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_a_with_block_records_one_step tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.37ms
test_a_word_nobody_recognises_ranks_after_every_level tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.13ms
test_a_word_nobody_recognises_sorts_after_the_five tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.68ms
test_a_word_outside_the_five_is_kept tests/functional/test_severity.py Stable 100.0% 2 0 0 2 builds 0.19ms
test_a_worker_hands_its_records_to_the_controller tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_a_worker_is_detected_and_named tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_a_wrapped_chain_pointed_back_at_itself_does_not_hang tests/unit/test_async_steps.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_a_wrapper_around_a_driver_can_be_shot tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_a_wrapper_is_photographed_through_the_driver_it_wraps tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_a_wrapper_whose_driver_is_itself_is_not_asked_twice tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.35ms
test_a_written_bundle_reads_back_as_the_same_bundle tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 29ms
test_add_files_the_image_against_the_step_that_was_open tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_add_outside_any_step_is_filed_against_no_step tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_add_stringifies_whatever_label_it_was_given tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_after_step_records_what_the_step_was_called_with tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.46ms
test_always_opens_where_auto_would_not tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.13ms
test_an_absolute_name_cannot_take_over_the_join tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_an_afternoon_time_is_shown_on_the_twelve_hour_clock tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_an_age_limit_and_a_count_intersect tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.91ms
test_an_anchor_is_letters_digits_and_dashes tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 0.31ms
test_an_archive_named_by_an_older_version_falls_back_to_its_mtime tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.63ms
test_an_archive_without_durations_is_read_as_unmeasured tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.68ms
test_an_archives_time_is_read_from_its_name tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.73ms
test_an_async_page_is_left_alone tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 0.41ms
test_an_attachment_is_filed_under_the_step_that_made_it tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 434ms
test_an_attachment_is_not_handed_to_the_next_test tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 365ms
test_an_attachment_still_lands_after_the_buffer_was_replaced tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_an_attachment_with_no_parts_holds_nothing tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_an_attempt_carries_four_fields_and_not_a_whole_record tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_an_attribute_that_was_never_written_is_no_branches_at_all tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_an_attribute_without_the_bracketed_half_is_not_guessed_at tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_an_automatic_capture_is_filed_against_the_step_that_threw tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.17ms
test_an_elapsed_that_is_neither_is_not_guessed_at tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_an_empty_argument_list_is_kept_rather_than_replaced tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_an_empty_id_has_a_key_of_its_own tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_an_empty_list_is_no_row_at_all tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_an_entry_with_no_url_names_no_link tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_an_entry_with_no_value_is_still_a_row tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_an_environment_variable_beats_the_profile tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.75ms
test_an_error_beats_a_skip_for_the_same_collector tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 118ms
test_an_error_is_grouped_beside_the_failures tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.79ms
test_an_error_keeps_its_whole_traceback_and_is_still_read tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.15ms
test_an_error_keeps_the_whole_traceback_rather_than_the_e_lines tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.36ms
test_an_error_with_nothing_to_show_is_still_an_error tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_an_errored_step_counts_as_having_thrown tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.13ms
test_an_exception_class_in_a_marker_is_named_not_repred tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 408ms
test_an_exception_class_is_named_rather_than_repred tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.38ms
test_an_exception_named_on_the_last_line_still_wins tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_an_exception_wins_over_a_plain_name_whatever_the_order tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_an_expected_outcome_is_not_a_failure tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.17ms
test_an_explicit_field_beats_the_response_object tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_an_html_file_named_outright_is_still_accepted tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 112ms
test_an_html_file_named_with_no_folder_at_all_is_fine tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_an_html_file_reports_the_folder_holding_it tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_an_html_file_whose_folder_is_a_file_is_refused_too tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.66ms
test_an_html_file_with_no_folder_reports_the_current_directory tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_an_htmlcov_left_over_from_last_week_is_not_linked tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.72ms
test_an_htmlcov_written_by_this_run_is_linked tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.69ms
test_an_icon_takes_its_size_from_the_text_around_it tests/unit/test_icons.py Stable 100.0% 4 0 0 4 builds 0.31ms
test_an_id_is_percent_encoded_on_the_way_into_the_url tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_an_id_is_rendered_as_a_link_that_opens_the_tracker tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.41ms
test_an_id_reaches_the_xml_as_a_property_on_the_testcase tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_an_id_that_is_nothing_at_all_stays_nothing tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_an_id_that_is_only_digits_still_sorts_as_a_number tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_an_id_that_would_escape_the_report_folder_is_sanitised_on_the_way_in tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_an_image_the_test_attached_is_kept_when_capture_is_off tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 377ms
test_an_imperative_xfail_with_no_reason_leaves_the_field_empty tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_an_ini_file_can_hold_the_shared_table_too tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.71ms
test_an_ini_file_configparser_chokes_on_is_named_by_the_profile_error tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.73ms
test_an_ini_profile_is_read_from_the_file_pytest_chose tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.16ms
test_an_ini_profiles_indented_block_is_read_as_one_entry_per_line tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.93ms
test_an_injected_fixture_is_not_shown_as_a_step_argument tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 396ms
test_an_interrupted_collection_still_writes_a_report tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 394ms
test_an_item_holding_nothing_offers_nothing tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_an_item_that_is_not_a_python_function_has_no_docstring tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_an_item_that_will_not_answer_is_still_not_missing_from_the_report tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_an_item_too_old_to_walk_falls_back_to_its_own_markers tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_an_item_with_no_function_asks_for_nothing tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_an_item_with_no_request_resolves_nothing tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_an_items_call_that_raises_costs_the_headers_and_nothing_else tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.68ms
test_an_older_shard_row_still_names_its_kernel tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_an_option_explicitly_none_falls_back_to_the_default tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_an_option_nobody_set_falls_back_to_the_default tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_an_option_the_merge_set_is_handed_back tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.36ms
test_an_option_with_no_default_and_no_value_is_none tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_an_order_is_created tests/functional/test_attachments.py Stable 100.0% 2 0 0 2 builds 0.76ms
test_an_ordinary_header_is_left_alone tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_an_ordinary_morning_time_loses_its_leading_zero tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_an_ordinary_screenshot_name_survives tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_an_ordinary_shard_id_is_left_alone tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_an_ordinary_value_cannot_be_shot tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_an_outlines_placeholders_are_shown_filled_in tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 418ms
test_an_owner_is_its_own_kind_of_marker tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_an_owner_is_pulled_out_of_the_row_of_tags tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_an_owner_marker_with_empty_brackets_owns_nothing tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.13ms
test_an_owner_row_counts_the_tests_that_team_holds tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.77ms
test_an_owner_written_twice_is_one_owner tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_an_unfamiliar_collector_is_named_after_itself tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_an_unknown_format_falls_back_to_text tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_an_unknown_junit_xpass_value_is_a_usage_error tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_an_unknown_key_survives_a_round_trip tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.30ms
test_an_unknown_nodeid_is_a_no_op tests/unit/test_teardown_failures.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_an_unknown_profile_names_the_ones_there_are tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.49ms
test_an_unknown_setting_in_a_profile_fails_the_run_and_names_the_file tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.78ms
test_an_unknown_setting_with_no_near_miss_lists_what_there_is tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.68ms
test_an_unknown_status_is_not_read_as_a_failure tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.15ms
test_an_unrecognised_status_becomes_an_error_and_is_reported tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_an_unwritable_junit_xml_exits_one_from_merge_but_two_from_junit tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 108ms
test_an_xdist_run_writes_one_junit_file tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 730ms
test_an_xdist_worker_says_which_one_it_is tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_an_xfail_is_a_skipped_with_the_pytest_xfail_type_and_an_empty_body tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.38ms
test_an_xfail_keeps_only_the_e_lines_the_way_a_failure_does tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.31ms
test_an_xfail_marker_on_a_test_that_failed_the_call_is_an_xpass tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_an_xfail_that_passed_anyway_is_an_xpass tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_an_xfail_with_nothing_to_show_is_still_an_xfail tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_an_xpass_is_a_passing_testcase_by_default_and_a_failure_on_request tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.47ms
test_anything_else_is_plural tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.14ms
test_anything_else_leaves_the_other_legs_work_alone[0] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_anything_else_leaves_the_other_legs_work_alone[] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_anything_else_leaves_the_other_legs_work_alone[false] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_anything_else_leaves_the_other_legs_work_alone[maybe] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_anything_else_leaves_the_other_legs_work_alone[no] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_applying_the_same_profile_twice_does_not_double_its_lists tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.01ms
test_aprox tests/functional/test_approx.py Stable 100.0% 2 0 0 2 builds 1.40ms
test_archive_body tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 1.57ms
test_archive_count_cli_beats_ini tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_archive_count_defaults_to_no_limit tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_archive_count_from_ini tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_archive_count_keeps_zero_apart_from_unset tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_archive_count_rejects_a_negative_count tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_archive_count_rejects_nonsense tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.37ms
test_archive_days_cli_beats_ini tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_archive_days_defaults_to_no_limit tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_archive_days_drops_the_builds_that_are_older tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.95ms
test_archive_days_from_ini tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_archive_days_rejects_a_negative_age tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_archive_days_rejects_nonsense tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_archive_days_takes_a_fraction_of_a_day tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_archive_row tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.45ms
test_archive_since_defaults_to_no_cutoff tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_archive_since_drops_the_builds_from_before_the_date tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.85ms
test_archive_since_from_ini tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_archive_since_reads_a_date_and_a_time tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_archive_since_reads_a_date_as_midnight tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 2.25ms
test_archive_since_rejects_nonsense tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_archive_timestamp_falls_back_to_the_mtime tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.64ms
test_archive_timestamp_ignores_the_mtime_of_a_named_file tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.77ms
test_archive_timestamp_reads_the_name tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_asking_for_a_profile_where_none_are_defined_says_how_to_write_one tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.67ms
test_asking_for_nothing_gives_nothing tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_attach_decodes_the_bytes_it_was_given tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.36ms
test_attach_file_reads_the_file_and_names_it tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.87ms
test_attach_is_advertised_as_public tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_attach_is_importable_from_package tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_attach_is_the_screenshot_helper tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_attach_json_takes_an_object tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_attach_names_the_right_helper_for_a_string tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_attach_says_which_helper_text_belongs_in tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_attach_text_lands_in_the_buffer tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_attaching_from_a_fixture_teardown_still_lands_on_the_test tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 356ms
test_attachment_body_holds_its_meta_and_every_part tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.55ms
test_attachment_item tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.47ms
test_attachment_item_without_a_status_leaves_the_pill_empty tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.44ms
test_attachment_lines_are_relative_to_the_xml tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 1.41ms
test_attachment_meta tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.41ms
test_attachment_part tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.38ms
test_attachments_survive_an_xdist_run tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 666ms
test_auto_opens_on_a_desktop_run tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_auto_stays_quiet_in_ci tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_auto_stays_quiet_on_a_headless_box tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_auto_stays_quiet_on_a_macos_build_agent tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_auto_stays_quiet_when_output_is_redirected tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_azure_assembles_the_build_results_page tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_before_scenario_falls_back_to_the_absolute_path tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_before_scenario_prefers_the_path_the_run_saw tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_before_scenario_remembers_the_feature_file_the_test_came_from tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_before_step_opens_the_step_with_its_gherkin_badge tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.37ms
test_blank_entries_are_dropped tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_both_footers_name_the_version_that_drew_the_page tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 26ms
test_both_spellings_of_a_setting_have_a_variable tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_both_spellings_of_the_tool_table_are_read tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.61ms
test_both_themes_declare_exactly_the_same_tokens tests/unit/test_theme.py Stable 100.0% 4 0 0 4 builds 28ms
test_branch_coverage_is_announced_only_when_it_was_measured tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.46ms
test_branch_coverage_is_reported_only_when_it_was_measured tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 920ms
test_branch_tiles_appear_once_branch_coverage_was_switched_on tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.34ms
test_build_info_is_split_the_way_the_pytest_flag_splits_it tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_build_info_is_written_as_lists_because_json_has_no_tuples tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 33ms
test_build_info_keeps_equals_in_the_value tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_build_info_merges_cli_and_ini tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_build_info_reads_two_spellings_of_one_label_as_one_row tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_build_info_shows_a_label_once_however_many_layers_named_it tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_build_info_skips_blanks_and_keeps_bare_keys tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_build_info_the_flag_did_not_mention_still_comes_from_the_shards tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_build_summary_keeps_the_least_covered_files_when_it_has_to_cut tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_build_summary_lists_everything_when_the_limit_is_zero tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_builds_are_ordered_oldest_first_with_this_run_last tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.94ms
test_builds_inside_one_minute_are_still_told_apart tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.96ms
test_builds_sort_on_the_stamp_not_the_file_name tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.74ms
test_bundles_written_before_any_of_this_existed_still_merge tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_bytes_are_decoded_without_raising_on_bad_utf8 tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_capture_honours_a_lower_limit tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_capture_notice_is_silent_when_capture_is_on tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_capture_notice_is_silent_when_logs_are_switched_off tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_capture_notice_warns_when_stdout_is_not_captured tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_capture_photographs_the_browser_the_test_was_holding tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_capture_stops_at_the_limit tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_capture_summary_covers_the_failed_only_mode tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_capture_summary_falls_back_to_the_root_logger_level tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_capture_summary_names_the_streams_that_survive tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_capture_summary_says_when_nothing_is_kept tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_captured_output_is_collected_as_the_phases_go_by tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_charts_name_their_tokens_so_a_theme_change_can_re_read_them tests/unit/test_theme.py Stable 100.0% 4 0 0 4 builds 28ms
test_ci_set_to_false_is_not_ci tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.40ms
test_clamp_to_twelve tests/unit/test_time_converter.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_cleaning_a_folder_that_was_never_written_is_not_an_error tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.48ms
test_cli_list_label_overrides_every_lower_layer[build_info] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.40ms
test_cli_list_label_overrides_every_lower_layer[link_patterns] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.83ms
test_cli_list_label_overrides_every_lower_layer[links] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.11ms
test_collect_coverage_does_nothing_when_it_is_switched_off tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 4.66ms
test_collect_coverage_finds_nothing_without_complaining tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 1.00ms
test_collect_coverage_reads_the_file_it_was_given tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 3.23ms
test_collect_coverage_says_so_when_the_named_file_is_not_coverage tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 1.75ms
test_collection_errors_sort_ahead_of_every_shards_tests tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 109ms
test_colour_codes_do_not_hide_the_exception tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_colour_written_into_the_message_does_not_hide_the_exception tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.15ms
test_concurrent_children_go_under_the_sibling_that_opened_them tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.17ms
test_control_characters_do_not_break_the_document tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.44ms
test_count_log_lines_covers_every_section tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_coverage_chip tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.28ms
test_coverage_data_files_are_combined_when_coverage_is_importable tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 115ms
test_coverage_data_naming_nothing_readable_says_so tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.75ms
test_coverage_delta_against_the_previous_build tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_coverage_delta_is_none_on_a_first_build tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_coverage_delta_skips_builds_that_measured_nothing tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_coverage_file_from_ini tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_coverage_grade_bands tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_coverage_grade_does_not_fail_a_target_it_exactly_meets tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_coverage_grade_follows_the_projects_own_target tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_coverage_limit_defaults_and_floors_at_zero tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.32ms
test_coverage_mode_cli_beats_ini tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_coverage_mode_defaults_to_auto tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.48ms
test_coverage_mode_from_ini tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_coverage_mode_ignores_a_value_it_does_not_know tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_coverage_pys_own_json_is_read_back tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.83ms
test_coverage_row tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.39ms
test_coverage_row_for_a_file_with_no_branches tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.33ms
test_coverage_switched_off_is_not_read_at_all tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_coverage_target_is_none_when_nothing_set_it tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_coverage_target_reads_cov_fail_under tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_coverage_tile tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.29ms
test_credential_names_are_recognised[Authorization] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.39ms
test_credential_names_are_recognised[Cookie] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_credential_names_are_recognised[Set-Cookie] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_credential_names_are_recognised[X-Api-Key] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_credential_names_are_recognised[access_token] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_credential_names_are_recognised[api_key] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_credential_names_are_recognised[client_secret] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_credential_names_are_recognised[password] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.31ms
test_credential_names_are_recognised[proxy-authorization] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_credential_names_are_recognised[refresh_token] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_crossing_to_a_suite_opens_that_group_and_shuts_the_rest tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 408ms
test_curl_escapes_a_quote_in_the_body tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_curl_repeats_the_call_with_the_redaction_intact tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_custom_title_cuts_longer_names_at_twenty tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.13ms
test_custom_title_keeps_names_up_to_twenty tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_days_cuts_back_from_now tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_dbx1 tests/functional/test_autouse.py Stable 100.0% 2 0 0 2 builds 0.22ms
test_dbx2 tests/functional/test_autouse.py Stable 100.0% 2 0 0 2 builds 0.18ms
test_delta_against_the_previous_build tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.35ms
test_delta_is_none_on_a_first_build tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_delta_is_none_when_a_build_did_not_record_the_count tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_delta_reads_the_counts_archived_builds_store_as_strings tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_describe_answers_every_question_at_once tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_discover_coverage_finds_a_report_beside_the_html tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.87ms
test_discover_coverage_ignores_a_stale_data_file tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 1.56ms
test_discover_coverage_returns_none_from_an_empty_folder tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 5.11ms
test_display_is_assumed_on_macos_and_windows tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_display_is_read_from_the_environment_elsewhere tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_dry_run_writes_nothing_and_prints_the_summary tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 1.97ms
test_durations_land_in_their_bands tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.55ms
test_each_button_names_which_of_the_three_things_it_copied tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.89ms
test_each_failure_keeps_its_own_screenshot tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 409ms
test_each_phase_records_its_own_time[call] tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_each_phase_records_its_own_time[setup] tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_each_phase_records_its_own_time[teardown] tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_each_row_carries_its_own_full_error tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 1.86ms
test_each_row_is_graded_against_the_projects_own_target tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_each_test_metrics_row_carries_its_own_rerun_count tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 2.34ms
test_empty_bytes_are_not_a_picture tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_empty_text_attaches_nothing tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_env_row tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.29ms
test_environment_label_cuts_longer_names_at_ten tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_environment_label_keeps_names_of_exactly_ten tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_environment_label_keeps_short_names tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_environment_list_label_overrides_profile_and_shared_table[build_info] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.91ms
test_environment_list_label_overrides_profile_and_shared_table[link_patterns] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.79ms
test_environment_list_label_overrides_profile_and_shared_table[links] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.83ms
test_environment_name_cli_beats_ini tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_environment_name_defaults_to_empty tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_environment_name_from_ini tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_escape_report_text_defuses_the_template_placeholder_syntax tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_every_attachment_reaches_the_rail tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 417ms
test_every_attempt_is_kept_in_the_order_it_ran tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.40ms
test_every_attempt_of_a_failing_test_collapses_into_one_record tests/unit/test_reruns.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_every_bdd_hook_is_declared_optional tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 0.43ms
test_every_bundle_beside_the_leg_is_folded_in tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 1.90ms
test_every_bundle_is_told_where_it_sits_in_the_order tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_every_choice_key_offers_exactly_the_choices_its_flag_does tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_every_component_fills_every_placeholder_it_declares tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 2.30ms
test_every_component_template_has_a_class_and_the_other_way_round tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.24ms
test_every_failing_row_carries_its_own_error tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 2.89ms
test_every_filter_hiding_the_row_is_cleared_first tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 0.74ms
test_every_icon_publishes_the_measurements_its_box_is_built_from tests/unit/test_icons.py Stable 100.0% 4 0 0 4 builds 2.42ms
test_every_icon_takes_its_colour_from_the_text_around_it tests/unit/test_icons.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_every_icon_the_report_asks_for_is_shipped_as_an_svg tests/unit/test_icons.py Stable 100.0% 4 0 0 4 builds 2.94ms
test_every_ini_question_raises_so_the_helpers_fall_through tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_every_known_ci_variable_is_recognised tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_every_library_the_page_loads_is_shipped_with_it tests/unit/test_offline.py Stable 100.0% 4 0 0 4 builds 103ms
test_every_merged_bundle_is_named_on_stderr tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 1.35ms
test_every_merged_bundle_is_named_with_what_it_contributed tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_every_nav_link_routes_to_the_tab_it_opens tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 27ms
test_every_outcome_a_test_can_end_on_is_a_button tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 9.74ms
test_every_part_of_a_call_is_kept tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_every_phase_of_a_test_reaches_the_report tests/unit/test_logs.py Stable 100.0% 4 0 0 4 builds 386ms
test_every_picture_a_test_took_reaches_its_row tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 422ms
test_every_profile_key_carries_the_default_its_flag_was_registered_with tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_every_profile_key_names_an_option_that_exists tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_every_routed_hash_lands_on_a_real_tab tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 27ms
test_every_row_carries_an_anchor tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 9.73ms
test_every_row_survives_a_name_that_looks_like_a_tag tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 414ms
test_every_status_is_counted_once tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 1.62ms
test_every_step_gets_an_id_of_its_own tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_every_step_reaches_the_tab tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 439ms
test_every_test_gets_all_three_phases_even_with_no_steps tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 424ms
test_every_test_is_photographed_when_the_run_asks_for_it tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 347ms
test_every_token_the_page_uses_is_declared_in_both_themes tests/unit/test_theme.py Stable 100.0% 4 0 0 4 builds 29ms
test_every_worker_of_an_xdist_run_is_shaped_by_the_same_profile tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 681ms
test_everything_else_keeps_the_repr_that_cannot_mislead tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_everything_else_the_test_was_handed_is_offered_too tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_excluded_lines_are_only_mentioned_when_there_were_some tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.33ms
test_exit_code_reflects_failures_only_when_asked tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 221ms
test_expired_archives_are_returned_oldest_first tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.58ms
test_failed_mode_keeps_nothing_from_a_test_that_passed tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.62ms
test_failed_mode_keeps_only_the_failures tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 384ms
test_failed_mode_keeps_only_the_failures tests/unit/test_logs.py Stable 100.0% 4 0 0 4 builds 397ms
test_failed_mode_keeps_only_the_failures tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 410ms
test_failed_mode_keeps_what_a_failure_attached[ERROR] tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.85ms
test_failed_mode_keeps_what_a_failure_attached[FAIL] tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.69ms
test_failing_deeper_beats_failing_later tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.14ms
test_fancybox_is_not_redistributed tests/unit/test_offline.py Stable 100.0% 4 0 0 4 builds 100ms
test_fewer_workers_than_asked_for_is_said_rather_than_smoothed_over tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_figure_carries_its_sign tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_file_redaction_can_be_switched_off tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.55ms
test_filename_is_safe_to_write_to_disk tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_first_last_and_worst_each_keep_what_they_say tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.92ms
test_fixture_fail tests/functional/test_usefixtures.py Stable 100.0% 2 0 0 2 builds 0.18ms
test_fixture_pass tests/functional/test_fixture.py Stable 100.0% 2 0 0 2 builds 0.24ms
test_fixture_pass tests/functional/test_mark.py Stable 100.0% 2 0 0 2 builds 0.23ms
test_fixture_pass tests/functional/test_usefixtures.py Stable 100.0% 2 0 0 2 builds 0.30ms
test_fixture_pass[1-1] tests/functional/test_parameterize.py Stable 100.0% 2 0 0 2 builds 0.25ms
test_flipping_scores_worse_than_failing_outright tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.44ms
test_floating_error tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.46ms
test_floating_error_offers_no_expand_when_nothing_was_cut tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.51ms
test_folders_and_files_can_be_named_together tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.63ms
test_format_lines_collapses_runs tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_format_log_sections_replays_the_phases_in_order tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_format_percent_drops_a_trailing_zero tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_funcargs_of_the_wrong_type_are_ignored tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_generate_fills_in_the_placeholders tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_generate_leaves_a_first_build_blank tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.33ms
test_git_failing_is_not_the_report_failing tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_github_actions_is_named_and_linked tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_gitlab_is_linked_with_the_url_it_publishes_itself tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_has_data_rejects_a_run_that_measured_nothing tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_has_display_reads_the_real_environment tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_header_pairs_reads_a_case_insensitive_mapping tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_headers_are_redacted_by_name tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_heading tests/functional/test_screenshot.py Stable 100.0% 2 0 0 2 builds 1.8s
test_heading tests/functional/test_selenium.py Stable 100.0% 2 0 0 2 builds 1.2s
test_heading[chromium] tests/functional/test_playwright.py Stable 100.0% 2 0 0 2 builds 862ms
test_html_report_must_not_be_a_path_that_merely_contains_html tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 2.44ms
test_httpx_spelling_is_read_too tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_icons_are_inlined_rather_than_fetched tests/unit/test_icons.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_icons_carried_as_tokens_are_base64_not_percent_encoded tests/unit/test_theme.py Stable 100.0% 4 0 0 4 builds 28ms
test_in_ci_reads_a_system_specific_variable tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_in_ci_reads_the_generic_variable tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_in_ci_reads_the_real_environment tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_inspect_answers_the_same_totals_as_json tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 1.85ms
test_inspect_can_answer_as_json tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 2.09ms
test_inspect_fails_when_there_are_no_bundles tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 1.18ms
test_inspect_lists_every_bundle_without_writing_anything tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 2.09ms
test_inspect_lists_the_bundles_and_writes_nothing tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 2.39ms
test_interactive_follows_the_stream tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_is_interactive_reads_the_original_stdout tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_is_midnight tests/unit/test_time_converter.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_jenkins_falls_back_to_the_job_url_when_the_root_url_is_unset tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_js_literal_defuses_the_template_placeholder_syntax tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_js_literal_keeps_a_name_from_closing_the_script_tag tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_js_literal_quotes_an_apostrophe_rather_than_ending_the_array tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_js_literal_renders_a_list_of_names tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_json_that_is_not_even_an_object_is_skipped tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.88ms
test_json_that_is_not_one_of_ours_is_skipped_and_named tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.48ms
test_keywords_build_the_options_when_none_were_given tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_kind_falls_back_to_the_type_pytest_bdd_resolved tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_kind_is_a_plain_step_when_neither_is_a_gherkin_word tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_kind_is_a_plain_step_when_the_object_offers_nothing tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_kind_is_the_word_the_feature_file_wrote[ then ] tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_kind_is_the_word_the_feature_file_wrote[And] tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_kind_is_the_word_the_feature_file_wrote[But] tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_kind_is_the_word_the_feature_file_wrote[Given] tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_kind_is_the_word_the_feature_file_wrote[WHEN] tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_legs_that_ran_different_commits_both_get_named tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_legs_with_different_packages_are_listed_separately tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_linked_markers_are_grouped_by_the_marker_they_were_written_as tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_lookup_error_names_a_step_the_suite_never_implemented tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_main_returns_the_code_it_would_have_exited_with tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 1.04ms
test_measured_nothing_notice_names_the_flag_that_was_typed tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_measured_nothing_notice_without_a_named_source tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.67ms
test_merge_log_sections_keeps_the_latest_attempt tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_merge_log_sections_skips_empty_captures tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_merged_totals_equal_the_row_count tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 115ms
test_merging_into_the_shard_directorys_parent_keeps_the_shard_screenshots tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 104ms
test_merging_twice_in_one_process_does_not_double_the_dashboard tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 223ms
test_midday_stays_twelve tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_midnight_is_shown_as_twelve_rather_than_zero tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_milliseconds_are_rounded_to_a_whole_number tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.53ms
test_milliseconds_stay_milliseconds_while_they_are_short tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.29ms
test_more_failures_than_last_time_is_the_bad_direction tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_more_than_fits_fades_out_rather_than_stopping_flat tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.75ms
test_movement_names_what_changed tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.90ms
test_naming_the_html_file_itself_is_allowed tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_neither_a_header_nor_a_body_credential_survives tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_nesting_stops_being_drawn_past_the_depth_limit tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_no_age_limit_is_no_cutoff tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_no_bundles_found_exits_two_and_says_where_it_looked tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 1.52ms
test_no_change_carries_no_unit tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_no_change_is_words_not_a_figure tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_no_chart_colour_is_written_as_a_literal tests/unit/test_theme.py Stable 100.0% 4 0 0 4 builds 30ms
test_no_ci_is_an_empty_run_rather_than_a_row tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_no_colour_is_left_hard_coded_in_the_app_stylesheets tests/unit/test_theme.py Stable 100.0% 4 0 0 4 builds 31ms
test_no_delta_hides_the_whole_tile tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.61ms
test_no_display_on_a_headless_box tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_no_figure_or_unit_without_a_delta tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_no_headers_at_all_is_not_an_error tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_no_limit_leaves_the_folder_alone tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.90ms
test_no_measured_time_at_all_is_still_a_flat_zero tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.18ms
test_no_notice_is_raised_on_an_ordinary_run tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_no_notice_when_everything_is_being_captured tests/unit/test_logs.py Stable 100.0% 4 0 0 4 builds 381ms
test_no_plugin_is_ever_installed tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_no_profile_is_said_out_loud tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.88ms
test_no_shard_measuring_coverage_says_how_to_get_some tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_no_token_is_declared_without_being_used tests/unit/test_theme.py Stable 100.0% 4 0 0 4 builds 29ms
test_no_wording_without_a_delta tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_none_mode_keeps_nothing tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 376ms
test_none_mode_keeps_nothing tests/unit/test_logs.py Stable 100.0% 4 0 0 4 builds 372ms
test_none_mode_keeps_nothing tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 425ms
test_none_mode_keeps_nothing_but_still_drains_the_buffer tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.70ms
test_none_never_opens tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.13ms
test_none_uses_no_profile_however_the_default_was_pinned tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.76ms
test_not_a_bundle_is_falsey_and_says_what_it_is tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_not_in_ci_on_a_bare_environment tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.39ms
test_not_in_ci_when_the_variable_says_so tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_not_interactive_on_a_closed_stream tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_not_interactive_without_a_stream_at_all tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_notes_are_optional tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.55ms
test_nothing_is_photographed_when_the_run_turns_it_off tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 377ms
test_nothing_is_said_when_the_limit_was_switched_off tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_nothing_is_said_when_the_table_lists_the_whole_run tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_nothing_is_switched_on_when_nothing_asks_for_it tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_nothing_merged_is_nothing_to_say tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_nothing_photographable_yields_nothing tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_nothing_set_keeps_every_build tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.65ms
test_nothing_to_attach tests/functional/test_attachments.py Stable 100.0% 2 0 0 2 builds 0.14ms
test_now_stamps_the_moment_the_merge_ran tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_on_duplicate_error_names_the_nodeid_and_the_shards tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.32ms
test_one_attachment_is_counted_in_the_singular tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.16ms
test_one_broken_module_seen_by_four_shards_is_reported_once tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 112ms
test_one_bundle_left_behind_is_reported_in_the_singular tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 1.53ms
test_one_environment_is_described_once_rather_than_per_shard tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_one_failing_build_is_not_yet_a_standing_failure tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.62ms
test_one_of_something_is_singular tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.15ms
test_one_page_reached_through_three_fixtures_is_photographed_once tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 366ms
test_one_picture_on_a_row_is_named_by_the_test_alone tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 369ms
test_one_shard_is_counted_in_the_singular tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.37ms
test_one_shard_of_several_measuring_coverage_says_what_it_covers tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_one_shards_folder_sits_under_that_root tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.43ms
test_one_test_is_counted_in_the_singular tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_only_a_failure_counts_as_a_failure tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.38ms
test_only_one_row_is_ever_open tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.07ms
test_only_the_e_lines_of_a_traceback_are_kept tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_only_the_failures_are_grouped tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.80ms
test_open_mode_cli_beats_ini tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_open_mode_defaults_to_auto tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_open_mode_from_ini tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_open_mode_ignores_blank_option tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_open_mode_rejects_anything_else tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_open_mode_tolerates_case_and_spacing tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_open_report_absolutises_a_relative_path tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.56ms
test_open_report_asks_for_a_tab tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.54ms
test_open_report_does_nothing_in_ci tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.59ms
test_open_report_does_nothing_when_switched_off tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.53ms
test_open_report_gives_up_on_a_path_it_cannot_resolve tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.71ms
test_open_report_gives_up_on_a_path_it_cannot_resolve tests/unit/test_reporter_assets.py Stable 100.0% 4 0 0 4 builds 0.82ms
test_open_report_hands_the_file_to_the_browser tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 7.01ms
test_open_report_percent_encodes_the_path tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.83ms
test_open_report_reports_a_browser_that_declined tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.62ms
test_open_report_survives_a_browser_that_blows_up tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.61ms
test_options_and_keywords_together_are_refused_rather_than_merged tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.35ms
test_options_given_whole_are_used_as_they_are tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_ordering_nothing_yields_nothing tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.32ms
test_ordinary_headers_are_left_alone[Accept] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_ordinary_headers_are_left_alone[Content-Length] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_ordinary_headers_are_left_alone[Content-Type] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_ordinary_headers_are_left_alone[User-Agent] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_ordinary_headers_are_left_alone[X-Request-Id] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_ordinary_text_passes_through_untouched tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_output_is_escaped_rather_than_rendered tests/unit/test_logs.py Stable 100.0% 4 0 0 4 builds 353ms
test_ownership_is_read_from_the_most_recent_build_that_named_one tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.72ms
test_package_is_a_regular_package tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_params_are_empty_when_pytest_bdd_hands_over_no_mapping[7] tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_params_are_empty_when_pytest_bdd_hands_over_no_mapping[None] tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_params_are_empty_when_pytest_bdd_hands_over_no_mapping[not a dict] tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_params_are_empty_when_pytest_bdd_hands_over_no_mapping[value1] tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_params_are_sorted_so_the_row_reads_the_same_every_run tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_params_drop_private_names tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_params_drop_the_fixtures_injected_beside_them tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_params_keep_every_scalar_a_gherkin_parser_can_yield tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_params_keep_the_steps_own_parsed_arguments tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_pass tests/functional/test_simple.py Stable 100.0% 2 0 0 2 builds 0.16ms
test_pass tests/functional/test_yield_fixture.py Stable 100.0% 2 0 0 2 builds 0.16ms
test_pending_count_is_what_the_running_test_has_produced tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_percent_of_calls_an_empty_file_covered tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_playwright_style_screenshot_is_the_last_resort tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_profile_list_label_overrides_shared_table[build_info] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.26ms
test_profile_list_label_overrides_shared_table[link_patterns] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.12ms
test_profile_list_label_overrides_shared_table[links] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.93ms
test_punctuation_alone_never_makes_two_tests_one_address tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_pytests_own_markers_are_told_apart_from_everyone_elses tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 382ms
test_pytests_own_markers_are_told_apart_from_everyone_elses tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_query_redaction_can_be_switched_off tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_quiet_silences_the_notes tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 2.92ms
test_read_coverage_path_returns_none_for_a_file_that_is_not_there tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 1.25ms
test_read_coverage_path_returns_none_for_broken_json tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 1.17ms
test_read_coverage_path_returns_none_for_something_that_is_not_coverage tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 4.95ms
test_read_coverage_path_sniffs_json tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 1.03ms
test_read_coverage_path_sniffs_xml tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.85ms
test_read_falls_through_to_the_older_name tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_read_is_none_when_the_object_answers_to_none_of_them tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_read_skips_a_name_that_is_present_but_none tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_read_survives_an_attribute_that_raises tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_read_takes_the_first_name_the_object_answers_to tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.37ms
test_reading_an_attribute_that_raises_is_not_a_failure tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_records_from_several_workers_land_in_collection_order tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 1.62ms
test_records_merged_from_a_worker_keep_the_reruns_they_arrived_with tests/unit/test_reruns.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_redaction_can_be_switched_off tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.36ms
test_redaction_can_be_switched_off tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_relative_name_keeps_a_file_outside_the_root tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_relative_name_leaves_a_relative_path_alone tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_relative_name_strips_the_checkout_directory tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_repeated_leading_dot_slashes_are_all_dropped tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_report_attachment_limit_defaults tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.13ms
test_report_attachment_limit_from_ini tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_report_attachment_limit_ignores_a_negative_value tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_report_attachment_limit_zero_means_no_limit tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_report_attachments_mode_cli_beats_ini tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_report_attachments_mode_defaults_to_all tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_report_attachments_mode_falls_back_on_nonsense tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_report_attachments_mode_from_ini tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_report_coverage_none_leaves_the_tab_empty tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 424ms
test_report_link tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.32ms
test_report_link_adds_side_nav_entries tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 372ms
test_report_link_drops_a_scheme_it_does_not_know tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 377ms
test_report_links_from_the_command_line tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_report_links_from_the_ini_too tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_report_links_ignores_an_entry_missing_half_of_itself tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_report_links_show_a_label_once_too tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_report_log_limit_defaults tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_report_log_limit_from_ini tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_report_log_limit_ignores_a_negative_value tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_report_log_limit_zero_means_no_limit tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_report_logs_mode_cli_beats_ini tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.13ms
test_report_logs_mode_defaults_to_all tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_report_logs_mode_falls_back_on_nonsense tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_report_logs_mode_from_ini tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.13ms
test_report_path tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_report_path_cli_beats_ini tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_report_path_defaults_to_cwd tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_report_path_expands_time_placeholders tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_report_path_from_ini tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_report_path_keeps_an_escaped_percent tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_report_path_leaves_a_plain_path_alone tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_report_profile_is_registered_as_an_ini_key tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.46ms
test_report_shard_reset_clears_the_shard_directory tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 398ms
test_report_url_gives_up_on_a_path_it_cannot_resolve tests/unit/test_report_open.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_rerun_stays_a_figure tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 9.90ms
test_reruns_are_summed_per_suite tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 0.77ms
test_resetting_a_folder_that_was_never_written_is_not_an_error tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.64ms
test_resetting_removes_what_the_last_run_left tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.99ms
test_resolve_says_where_every_value_came_from tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.91ms
test_retention_leaves_anything_that_is_not_an_archive_alone tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.66ms
test_retention_survives_a_folder_that_was_never_written tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.66ms
test_retention_survives_an_empty_folder tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.49ms
test_rewriting_the_same_leg_is_the_everyday_case tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 29ms
test_ring_dash_clamps tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.56ms
test_ring_dash_is_the_fraction_of_the_real_circumference tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_safe_link_drops_a_scheme_that_would_run_something tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_safe_link_keeps_relative_paths_and_the_schemes_it_knows tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_safe_link_reads_a_windows_drive_letter_as_a_path tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_save_encodes_an_image_that_arrived_decoded tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 1.40ms
test_save_writes_the_bytes_a_browser_handed_over tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.77ms
test_scenario_tags_are_deduplicated_across_feature_and_scenario tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_screenshot_details tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.45ms
test_screenshot_details_without_an_error tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.47ms
test_screenshots_from_two_machines_do_not_collide tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 109ms
test_selenium_is_asked_first tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_sequential_legs_with_shard_merge_render_once tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.1s
test_setting_a_field_is_visible_to_everything_reading_it tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_several_collection_records_are_counted_in_the_plural tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 2.03ms
test_several_prefixes_are_tried_in_turn tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_several_shards_measuring_coverage_are_not_reconciled_by_guessing tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_shard_merge_without_a_shard_is_a_usage_error tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.67ms
test_shards_that_all_captured_the_same_way_say_it_once tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.83ms
test_shards_that_captured_differently_are_named_one_by_one tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_shards_that_captured_output_the_same_way_get_one_row tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_shards_that_ran_under_different_roots_group_into_one_suite tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.50ms
test_show_config_prints_the_table_in_a_real_runs_header tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 376ms
test_since_is_the_cutoff_on_its_own tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_sizes_read_in_the_unit_that_stays_short[12-12 B] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.54ms
test_sizes_read_in_the_unit_that_stays_short[1536-1.5 KB] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_sizes_read_in_the_unit_that_stays_short[2097152-2.0 MB] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_skips_do_not_count_as_flipping tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.83ms
test_something_that_is_not_headers_at_all_is_read_as_none tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 1.45ms
test_something_that_is_not_text_is_stringified_first tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_something_with_a_screenshot_call_can_be_shot tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_start_and_stop_can_be_driven_directly tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_stderr_sections_go_to_system_err_and_there_is_one_of_each tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_step_error_closes_the_step_that_raised_with_why tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_step_error_needs_no_arguments_to_close_a_step tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.33ms
test_steps_are_filed_under_the_phase_that_was_running tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_steps_are_never_concatenated_across_records tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.47ms
test_steps_nest_by_being_called_from_inside_one_another tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_steps_survive_an_xdist_run tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 716ms
test_stopping_when_nothing_is_open_is_not_an_error tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_strict_exits_one_but_still_writes_the_report tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 107ms
test_sub_millisecond_phases_survive_into_the_rail tests/unit/test_step_report_helpers.py Stable 100.0% 3 0 0 3 builds 0.15ms
test_suite_row tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.40ms
test_summarize_json_lists_files_worst_first tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.55ms
test_summarize_json_survives_a_report_with_nothing_in_it tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_summarize_json_takes_the_total_coverage_py_published tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.67ms
test_summarize_json_works_out_covered_branches_for_an_older_coverage tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.80ms
test_summarize_xml_matches_the_formula_coverage_py_uses tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.38ms
test_summarize_xml_reads_the_lines_of_each_file tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_take_scenario_forgets_it_so_the_next_test_cannot_claim_it tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_take_scenario_is_none_when_no_scenario_ever_ran tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_taking_the_attachments_empties_the_buffer tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_taking_the_screenshots_empties_the_buffer tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_teardown_output_is_kept_for_a_teardown_only_failure tests/unit/test_teardown_failures.py Stable 100.0% 4 0 0 4 builds 424ms
test_template tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 39ms
test_template_carries_the_icons_and_no_font_awesome_request tests/unit/test_icons.py Stable 100.0% 4 0 0 4 builds 30ms
test_test_log_holds_every_section tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.50ms
test_test_metrics_is_opened_rather_than_clicked_into tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 0.44ms
test_test_row tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 1.05ms
test_test_row_without_logs_says_so tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.62ms
test_test_shot tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 0.45ms
test_text_is_empty_rather_than_the_word_none tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_text_shaped_like_a_placeholder_is_not_substituted tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 0.58ms
test_text_stringifies_whatever_it_found tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_anchor_comes_from_the_node_id_not_from_the_names_on_show tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 1.66ms
test_the_anchor_survives_a_test_being_added_in_front_of_it tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 2.96ms
test_the_api_logs_tab_is_reachable_by_both_of_its_names tests/unit/test_mvc_pages.py Stable 100.0% 5 0 0 5 builds 29ms
test_the_arguments_are_kept_beside_the_signature tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_the_arguments_default_to_this_processs_own tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_the_arguments_row_shows_what_the_merge_was_asked_to_do tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_the_attachment_buffer_recovers_from_the_wrong_type tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_the_attachment_helpers_are_importable_from_the_package[attach_api] tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_attachment_helpers_are_importable_from_the_package[attach_file] tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_the_attachment_helpers_are_importable_from_the_package[attach_json] tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_the_attachment_helpers_are_importable_from_the_package[attach_text] tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_the_attachment_helpers_are_the_module_ones[attach_api] tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_the_attachment_helpers_are_the_module_ones[attach_file] tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_attachment_helpers_are_the_module_ones[attach_json] tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_the_attachment_helpers_are_the_module_ones[attach_text] tests/unit/test_public_api.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_the_attachments_a_test_handed_over_are_collected tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 0.80ms
test_the_attempt_that_stuck_is_the_one_refreshed tests/unit/test_teardown_failures.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_the_attempt_that_stuck_is_the_one_reported tests/unit/test_reruns.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_the_bands_colour_a_percentage_with_no_target_set tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_the_bars_are_measured_against_this_tests_slowest_step tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.17ms
test_the_basket_survives_a_reload tests/functional/test_severity.py Stable 100.0% 2 0 0 2 builds 0.17ms
test_the_basket_totals_correctly tests/functional/test_severity.py Stable 100.0% 2 0 0 2 builds 0.17ms
test_the_buffer_is_not_handed_to_the_next_test tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_buffer_recovers_if_something_left_a_non_list_behind tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_the_buffer_starts_empty_even_if_something_left_a_non_list_behind tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_the_build_is_stamped_with_the_start_of_the_run tests/unit/test_durations.py Stable 100.0% 5 0 0 5 builds 0.16ms
test_the_bundles_left_behind_are_named_rather_than_dropped_in_silence tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 1.63ms
test_the_capture_notice_survives_a_shard_that_ran_with_dash_s tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 106ms
test_the_capture_row_is_read_off_this_legs_own_config tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 31ms
test_the_chart_labels_survive_a_quote_in_a_suite_name tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 107ms
test_the_cheatsheet_can_be_opened_from_the_button tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 402ms
test_the_chip_counts_only_what_was_attached_inside_this_step tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.15ms
test_the_chips_keep_the_url_in_step_with_the_table tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 3.84ms
test_the_ci_rows_are_there_when_the_run_was_a_ci_run tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 28ms
test_the_ci_systems_branch_beats_a_detached_head tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_the_click_does_the_work_rather_than_leaving_it_to_the_hash tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 0.43ms
test_the_command_comes_from_the_node_id_not_from_the_two_names_on_show tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.47ms
test_the_command_line_beats_the_environment_which_beats_the_ini_key tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.81ms
test_the_command_merges_bundles_in_its_own_process tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 225ms
test_the_config_command_can_answer_as_json tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 2.15ms
test_the_config_command_ignores_a_pyproject_that_does_not_configure_pytest tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.85ms
test_the_config_command_prints_the_table_and_leaves tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 2.04ms
test_the_config_command_reads_a_project_without_running_anything tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.46ms
test_the_config_command_says_so_when_the_profile_is_not_there tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.99ms
test_the_config_command_takes_a_pyproject_only_project tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.04ms
test_the_content_type_picks_the_syntax[-text] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_the_content_type_picks_the_syntax[application/json-json] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.41ms
test_the_content_type_picks_the_syntax[application/problem+json; charset=utf-8-json] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_the_content_type_picks_the_syntax[application/x-yaml-yaml] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_the_content_type_picks_the_syntax[text/html-html] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_the_content_type_picks_the_syntax[text/plain-text] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_the_content_type_picks_the_syntax[text/xml-xml] tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_the_controls_add_nothing_at_all_to_the_cell_the_table_exports tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.13ms
test_the_count_is_in_the_cell_once tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.83ms
test_the_counts_match_the_elements tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.33ms
test_the_counts_tell_records_and_collection_errors_apart tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 31ms
test_the_decorator_fills_its_title_from_the_call tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_the_decorator_returns_what_the_function_returned tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_the_dialog_a_truncated_list_opens_is_on_the_page tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.87ms
test_the_docstring_is_collapsed_to_one_paragraph tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_the_docstring_is_kept_as_one_paragraph tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 371ms
test_the_driver_under_a_wrapper_is_preferred_to_the_wrappers_own_call tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_the_earliest_shard_start_is_the_default tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_the_environment_alone_shapes_a_run_with_no_profile_at_all tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.55ms
test_the_environment_panel_is_filled_from_the_shards tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 5.03ms
test_the_environment_panel_names_every_shards_host tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 108ms
test_the_example_row_is_shown_as_a_parameter tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 416ms
test_the_exception_is_read_off_the_line_it_is_raised_on tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.24ms
test_the_exception_that_surfaced_wins_over_the_one_it_came_from tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.18ms
test_the_exception_types_past_the_panel_open_too tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.89ms
test_the_exit_status_is_kept_as_a_number tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 60ms
test_the_explanation_gives_a_list_a_row_per_label tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.82ms
test_the_explanation_names_the_layer_each_setting_came_from tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 1.05ms
test_the_explanation_prints_the_files_it_read_and_the_profiles_in_them tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.73ms
test_the_explanation_reaches_the_plain_ini_key_last tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.84ms
test_the_explanation_reports_a_typed_value_as_the_command_line tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.91ms
test_the_explanation_says_what_a_value_overrode tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.79ms
test_the_explanation_shortens_the_paths_it_prints tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.85ms
test_the_exports_still_carry_a_marker_the_fade_cannot_travel_as tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.35ms
test_the_fade_and_the_expand_button_agree_on_what_was_cut tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 2.64ms
test_the_failure_panel_is_answerable_on_a_first_run tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.90ms
test_the_failure_panel_names_the_tests_under_each_exception tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.01ms
test_the_feature_and_scenario_are_named tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 396ms
test_the_filter_is_anchored_so_pass_does_not_pull_in_xpass tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 0.61ms
test_the_first_argument_is_what_goes_in_the_url tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_first_attempt_is_not_pinned tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_the_first_line_with_anything_in_it_is_the_message tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_the_first_plain_name_is_kept_when_no_exception_is_ever_named tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_first_run_says_so_rather_than_drawing_empty_axes tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.36ms
test_the_fixtures_are_the_ones_the_test_asked_for tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 382ms
test_the_fixtures_are_the_ones_the_test_named_in_order tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_fixtures_every_test_gets_anyway_are_not_listed tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_the_flag_adds_the_packages_row tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 53ms
test_the_flag_beats_the_ini_key_and_the_ci_variables tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_flag_wins_over_the_ini_key tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_flaky_marker_is_counted_as_reruns_not_failures tests/unit/test_reruns.py Stable 100.0% 4 0 0 4 builds 461ms
test_the_folder_is_found_when_the_path_names_the_html_file tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.67ms
test_the_four_are_in_the_markup_the_whole_time tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.81ms
test_the_four_tiles_every_run_gets tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.44ms
test_the_gateway_is_reachable tests/functional/test_traceability.py Stable 100.0% 2 0 0 2 builds 0.23ms
test_the_gradient_names_its_colour_rather_than_saying_currentcolor tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.80ms
test_the_guide_goes_away_once_a_step_is_named tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 411ms
test_the_headline_falls_back_to_how_much_is_unrated tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.64ms
test_the_headline_leads_with_what_is_red_at_the_worst_level tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.71ms
test_the_headline_says_how_much_of_the_suite_is_unclaimed tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.67ms
test_the_headline_says_so_when_every_failure_is_the_same_thing tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.55ms
test_the_headline_says_so_when_every_test_is_claimed tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.16ms
test_the_headline_says_so_when_every_test_is_rated tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.91ms
test_the_headline_says_so_when_nothing_groups_with_anything tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.63ms
test_the_headline_says_where_to_start tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.61ms
test_the_history_strip_carries_a_sort_value tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.22ms
test_the_identifying_variable_is_the_one_that_has_to_be_there tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_the_import_error_itself_is_kept tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 405ms
test_the_indexes_travel_with_the_steps tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.20ms
test_the_ini_file_wins_a_name_the_toml_file_also_defines tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.92ms
test_the_ini_key_accepts_the_usual_spellings_of_yes[1] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_ini_key_accepts_the_usual_spellings_of_yes[True] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_the_ini_key_accepts_the_usual_spellings_of_yes[on] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_ini_key_accepts_the_usual_spellings_of_yes[true] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_the_ini_key_accepts_the_usual_spellings_of_yes[yes] tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_the_ini_key_adds_the_packages_row tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 55ms
test_the_ini_key_is_used_when_the_flag_was_not_given tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_the_ini_key_is_used_when_the_flag_was_not_typed tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_the_installed_packages_read_like_pip_freeze tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 37ms
test_the_internal_example_marker_is_not_shown_as_one tests/unit/test_bdd_steps.py Stable 100.0% 4 0 0 4 builds 383ms
test_the_json_report_keeps_the_text_unescaped tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 393ms
test_the_junit_command_fails_when_there_is_nothing_to_write tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 1.25ms
test_the_junit_command_writes_only_the_xml tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 3.16ms
test_the_junit_document_is_written_where_it_was_asked_for tests/unit/test_reporter_hooks.py Stable 100.0% 4 0 0 4 builds 1.02ms
test_the_junit_options_describe_the_matrix_not_this_leg tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 1.65ms
test_the_junit_path_can_be_set_in_the_ini tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_the_junit_path_flag_beats_the_ini tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_junit_subcommand_writes_no_report tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 2.24ms
test_the_junit_xpass_flag_beats_the_ini tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_the_junit_xpass_mode_can_be_set_in_the_ini tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_the_known_fixture_names_come_first tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_the_ladder_is_ranked_worst_first tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_the_largest_group_leads_and_carries_its_share tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.73ms
test_the_leg_keeps_the_kernel_string_beside_the_os_one tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 31ms
test_the_leg_records_its_own_honest_start tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 30ms
test_the_leg_records_the_ci_run_it_belonged_to tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 30ms
test_the_leg_records_the_machine_that_actually_ran_the_tests tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 32ms
test_the_leg_records_the_revision_it_ran tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 1.13ms
test_the_legs_own_records_are_replaced_rather_than_added_to tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 1.34ms
test_the_level_is_the_same_however_it_is_capitalised tests/functional/test_severity.py Stable 100.0% 2 0 0 2 builds 0.20ms
test_the_limit_can_be_lifted tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 365ms
test_the_limit_can_be_lifted tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_the_limit_can_be_lifted tests/unit/test_logs.py Stable 100.0% 4 0 0 4 builds 388ms
test_the_limit_can_be_lifted tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.37ms
test_the_limit_caps_what_one_test_can_record tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_the_limit_caps_what_one_test_records tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 384ms
test_the_limits_intersect tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.71ms
test_the_link_is_built_from_the_row_rather_than_carried_beside_it tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 0.68ms
test_the_link_is_relative_so_the_two_travel_together tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.72ms
test_the_link_to_the_annotated_html_is_dropped tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 30ms
test_the_list_is_sorted_so_the_row_reads_the_same_every_run tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_the_live_session_is_used_when_nothing_was_named tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.67ms
test_the_marker_names_are_the_built_in_ones_plus_whatever_was_configured tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_the_markers_reach_the_tab tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 469ms
test_the_merge_flag_names_the_environment_when_it_was_given tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.46ms
test_the_merge_flags_build_info_wins_over_the_shards tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_the_merge_never_opens_a_browser_by_default tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 117ms
test_the_merge_summary_does_not_name_a_report_it_did_not_write tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 2.02ms
test_the_merged_build_is_stamped_with_the_earliest_shard_start tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 108ms
test_the_merged_name_reaches_all_three_render_sites tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 106ms
test_the_message_and_the_picture_end_up_on_the_same_step tests/unit/test_step_screenshots.py Stable 100.0% 4 0 0 4 builds 388ms
test_the_message_cannot_be_clicked_and_cannot_be_clicked_through tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.59ms
test_the_message_goes_on_the_step_that_raised_not_on_its_ancestors tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_the_message_is_announced_as_well_as_drawn tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.42ms
test_the_message_is_not_repeated_up_the_tree tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 412ms
test_the_message_takes_itself_away_and_a_second_copy_restarts_it tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.46ms
test_the_module_hands_back_the_exit_code_rather_than_raising tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 97ms
test_the_module_runs_as_a_command_of_its_own tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 98ms
test_the_namespace_reads_the_very_dict_getoption_reads tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_the_nearest_severity_is_the_one_that_applies tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_note_says_how_much_of_the_run_is_being_listed tests/unit/test_coverage_rendering.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_the_notice_is_raised_when_output_is_not_being_captured tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_the_open_step_is_the_innermost_one tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_the_order_does_not_depend_on_the_order_they_were_downloaded tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_the_overridden_severity_is_shown_and_struck_through tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.25ms
test_the_packages_are_listed_in_a_case_insensitive_order tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 27ms
test_the_packages_are_the_last_thing_on_the_panel tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.28ms
test_the_packages_row_counts_them_in_its_label tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_the_page_is_handed_valid_arrays_for_every_series tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.17ms
test_the_page_routes_a_row_anchor_to_the_row tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 0.91ms
test_the_pages_inside_a_browsers_contexts_are_found tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_pages_inside_a_context_are_found tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_the_pair_is_node_first_so_nobody_asks_a_function_for_args tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_panel_asks_for_no_packages_by_default tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 28ms
test_the_panel_carries_the_whole_message_not_the_cell_s_fifty_characters tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 1.08ms
test_the_panel_counts_the_shards_it_was_built_from tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.31ms
test_the_panel_ends_on_the_attempt_the_row_is_showing tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 1.36ms
test_the_panel_is_offered_on_the_raw_length_not_the_escaped_one tests/unit/test_escaping.py Stable 100.0% 4 0 0 4 builds 0.70ms
test_the_panel_links_the_pipeline_the_shards_came_from tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.36ms
test_the_panel_names_every_shards_own_machine tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.45ms
test_the_panel_shows_what_went_onto_the_clipboard tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.67ms
test_the_panel_the_template_asks_for_is_the_one_that_is_filled tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.62ms
test_the_parameters_are_this_cases_own_row tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 366ms
test_the_parameters_are_this_cases_own_row tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_the_parameters_read_as_the_call_that_was_made tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.16ms
test_the_pass_rate_is_the_mean_of_the_tests_own_rates tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.63ms
test_the_payload_carries_the_schema_the_reader_checks tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 30ms
test_the_payload_names_this_leg tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 29ms
test_the_picture_lands_on_the_step_that_threw tests/unit/test_step_screenshots.py Stable 100.0% 4 0 0 4 builds 392ms
test_the_pictures_the_page_needs_travel_in_it tests/unit/test_offline.py Stable 100.0% 4 0 0 4 builds 100ms
test_the_pipeline_row_carries_its_own_url_to_link_to tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 31ms
test_the_plain_ini_key_loses_a_list_label_to_every_layer_above_it[build_info] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.75ms
test_the_plain_ini_key_loses_a_list_label_to_every_layer_above_it[link_patterns] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.84ms
test_the_plain_ini_key_loses_a_list_label_to_every_layer_above_it[links] tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.71ms
test_the_platform_row_names_the_os_and_not_the_kernel tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.63ms
test_the_plugin_list_is_empty_rather_than_missing tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_the_policies_that_keep_one_attempt_leave_the_trail_alone tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.95ms
test_the_profile_beats_the_plain_ini_key tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.68ms
test_the_projects_own_target_is_shown_beside_the_ring tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.40ms
test_the_properties_come_before_the_outcome tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_the_provenance_lines_name_every_merged_bundle tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 397ms
test_the_python_row_carries_the_implementation_and_the_word_size tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_the_rail_keeps_its_own_colours_in_both_themes tests/unit/test_theme.py Stable 100.0% 4 0 0 4 builds 28ms
test_the_rail_opens_collapsed_with_controls_to_open_it tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 399ms
test_the_reason_a_known_bug_was_expected_to_fail_is_kept_for_the_xml tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_the_record_duration_wins_when_it_is_the_larger_of_the_two tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.15ms
test_the_records_are_handed_over_verbatim tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 31ms
test_the_render_pipeline_falls_back_to_its_default_through_it tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_render_pipeline_resolves_a_path_through_it tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.61ms
test_the_report_fetches_nothing_to_draw_itself tests/unit/test_offline.py Stable 100.0% 4 0 0 4 builds 109ms
test_the_report_says_when_capture_is_switched_off tests/unit/test_logs.py Stable 100.0% 4 0 0 4 builds 387ms
test_the_reporter_is_handed_the_matrixs_clock tests/unit/test_merge_into_leg.py Stable 100.0% 4 0 0 4 builds 1.04ms
test_the_reruns_option_is_counted_as_reruns tests/unit/test_reruns.py Stable 100.0% 4 0 0 4 builds 475ms
test_the_reset_flag_is_honoured_when_it_was_typed tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_the_ring_and_the_tiles_are_filled_from_the_summary tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.54ms
test_the_root_defaults_to_where_the_merge_was_run tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_the_root_is_a_string_because_every_reader_treats_it_as_one tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.62ms
test_the_row_carries_the_command_that_runs_that_test_again tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 2.88ms
test_the_row_carries_the_picture_the_test_took tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 482ms
test_the_row_carries_the_whole_error_not_the_preview tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 2.10ms
test_the_row_counts_the_lines_it_can_open tests/unit/test_logs.py Stable 100.0% 4 0 0 4 builds 400ms
test_the_row_counts_what_it_can_open tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 396ms
test_the_row_counts_what_it_can_open tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 492ms
test_the_row_names_the_test_the_panel_will_be_opened_for tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.47ms
test_the_row_rests_as_one_button tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.80ms
test_the_row_says_how_many_attempts_there_are_to_open tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 9.77ms
test_the_row_thumbnails_open_a_strip_of_their_own tests/unit/test_screenshots.py Stable 100.0% 4 0 0 4 builds 435ms
test_the_rows_are_the_ladder_rather_than_the_worst_numbers tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.83ms
test_the_run_token_flag_beats_the_ci_environment tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_the_run_token_ini_beats_the_ci_environment tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_the_run_token_is_empty_off_a_ci_system tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_the_run_token_is_taken_from_the_ci_environment tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_the_running_pytest_cov_session_is_found tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_the_same_broken_file_is_recorded_once tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 0.34ms
test_the_same_browser_is_not_photographed_twice tests/unit/test_step_screenshots.py Stable 100.0% 4 0 0 4 builds 413ms
test_the_same_bundle_named_twice_is_read_once tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 0.86ms
test_the_same_fixture_asked_for_twice_is_listed_once tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_the_same_marker_carrying_different_values_is_said_each_time tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 368ms
test_the_same_marker_from_two_levels_is_said_once tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_the_same_marker_written_twice_is_said_once tests/unit/test_markers.py Stable 100.0% 4 0 0 4 builds 367ms
test_the_same_node_id_always_gives_the_same_anchor tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_the_same_page_named_and_cached_is_offered_once tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_the_same_plugin_listed_twice_is_named_once tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_the_same_test_twice_over_gets_an_anchor_each tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 1.85ms
test_the_screenshot_folder_is_removed_when_it_is_there tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.87ms
test_the_search_matches_a_test_name_typed_with_spaces tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 404ms
test_the_search_stops_rather_than_descending_for_ever tests/unit/test_screenshot_capture.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_the_selected_test_is_never_hidden_behind_a_shut_suite tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 401ms
test_the_session_collector_itself_is_not_recorded tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 0.35ms
test_the_settled_profile_name_is_written_back_onto_the_options tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.75ms
test_the_severity_panel_the_template_asks_for_is_the_one_that_is_filled tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.60ms
test_the_severity_reaches_the_rail_as_its_own_attribute tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 1.01ms
test_the_severity_reaches_the_xml_once_and_already_resolved tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_the_severity_row_stays_out_of_the_row_of_tags tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.31ms
test_the_shard_flag_beats_the_ini tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_the_shard_id_can_be_set_in_the_ini tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.36ms
test_the_shard_merge_flag_beats_an_ini_that_switches_it_off tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_shard_merge_flag_can_be_set_in_the_ini tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_the_shard_reset_flag_beats_an_ini_that_switches_it_off tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_the_shard_reset_flag_can_be_set_in_the_ini tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.34ms
test_the_shard_run_token_can_be_set_in_the_ini tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_the_shard_run_token_flag_beats_the_ini tests/unit/test_plugin.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_shards_live_in_a_subtree_of_the_report_folder tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_shards_own_environment_is_used_when_the_flag_was_not tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.37ms
test_the_share_bar_is_drawn_against_the_busiest_owner tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.57ms
test_the_shared_table_applies_to_a_run_that_names_no_profile tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.61ms
test_the_shared_table_is_what_every_profile_starts_from tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.71ms
test_the_size_is_the_characters_of_every_part tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_the_spacing_somebody_typed_is_not_kept tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_the_status_colours_survive_both_themes tests/unit/test_theme.py Stable 100.0% 4 0 0 4 builds 28ms
test_the_step_carrying_the_message_is_the_one_that_threw tests/unit/test_step_report_helpers.py Stable 100.0% 5 0 0 5 builds 0.15ms
test_the_step_limit_defaults_when_nobody_set_one tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_step_limit_defaults_when_what_was_set_is_not_a_number tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_streak_is_counted_from_the_newest_build tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.86ms
test_the_strip_travels_to_the_next_line_rather_than_reappearing_on_it tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.71ms
test_the_suite_is_taken_from_the_nodeid tests/unit/test_outcome_classification.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_the_suite_that_failed_most_often_is_the_one_named tests/unit/test_last_branches.py Stable 100.0% 4 0 0 4 builds 0.32ms
test_the_sum_of_the_durations_is_the_run tests/unit/test_durations.py Stable 100.0% 5 0 0 5 builds 0.23ms
test_the_summary_counts_collection_records_when_there_are_some tests/unit/test_cli_commands.py Stable 100.0% 4 0 0 4 builds 1.93ms
test_the_summary_counts_the_suites_the_rail_is_showing tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 406ms
test_the_switch_is_a_labelled_control_wired_to_the_toggle tests/unit/test_theme.py Stable 100.0% 4 0 0 4 builds 28ms
test_the_tab_guides_you_when_nothing_named_a_step tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 375ms
test_the_tab_guides_you_when_nothing_was_attached tests/unit/test_attachment_report.py Stable 100.0% 4 0 0 4 builds 378ms
test_the_tab_opens_on_a_failure_that_has_steps tests/unit/test_step_report.py Stable 100.0% 4 0 0 4 builds 400ms
test_the_tabs_whose_hash_starts_the_same_way_are_still_tabs tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 1.15ms
test_the_tail_of_a_cut_message_is_split_off_to_be_faded tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 1.38ms
test_the_templates_name_no_cdn tests/unit/test_offline.py Stable 100.0% 4 0 0 4 builds 4.13ms
test_the_temporary_file_is_cleaned_up_even_when_the_report_raises tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.55ms
test_the_temporary_file_is_not_left_behind tests/unit/test_coverage_sources.py Stable 100.0% 4 0 0 4 builds 0.91ms
test_the_tenth_shard_does_not_sort_second tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_the_tenth_shard_is_not_ordered_second tests/unit/test_merge_identity.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_the_theme_is_settled_before_the_page_paints tests/unit/test_theme.py Stable 100.0% 4 0 0 4 builds 28ms
test_the_time_column_sorts_on_the_seconds_it_no_longer_prints tests/unit/test_durations.py Stable 100.0% 3 0 0 3 builds 0.44ms
test_the_title_leads_with_the_path_not_the_host tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_the_toggle_says_whether_it_is_open tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.67ms
test_the_tool_table_can_pin_the_profile_a_bare_pytest_run_uses tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.87ms
test_the_top_of_midnight_hour_keeps_its_two_digit_minutes tests/unit/test_small_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_the_totals_no_longer_hide_the_error tests/unit/test_teardown_failures.py Stable 100.0% 4 0 0 4 builds 408ms
test_the_traceback_is_not_read_out_over_the_news tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.32ms
test_the_trail_is_as_long_as_the_rerun_count_says tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.39ms
test_the_tree_and_the_table_are_different_galleries tests/unit/test_step_screenshots.py Stable 100.0% 4 0 0 4 builds 401ms
test_the_two_age_limits_take_the_stricter_of_the_pair tests/unit/test_archives.py Stable 100.0% 4 0 0 4 builds 0.15ms
test_the_unclassified_pile_is_held_at_the_bottom_however_large_it_is tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.71ms
test_the_url_is_only_rewritten_while_test_metrics_is_the_open_tab tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 0.62ms
test_the_walk_yields_the_same_order_twice_running tests/unit/test_bundle_io.py Stable 100.0% 4 0 0 4 builds 1.95ms
test_the_way_out_clears_the_filter_and_the_url_with_it tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 0.41ms
test_the_whitespace_xml_does_allow_is_kept tests/unit/test_attachment_junit_helpers.py Stable 100.0% 4 0 0 4 builds 0.41ms
test_the_widths_are_taken_in_one_step_so_the_line_only_wraps_once tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.50ms
test_the_words_the_flag_documents_are_accepted[ now ] tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_words_the_flag_documents_are_accepted[EARLIEST] tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_the_words_the_flag_documents_are_accepted[earliest] tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_the_words_the_flag_documents_are_accepted[now] tests/unit/test_cli_validation.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_the_workers_that_reported_are_counted tests/unit/test_environment.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_the_worst_behaved_tests_are_at_the_top tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 1.52ms
test_the_worst_team_is_at_the_top tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.64ms
test_the_xdist_workers_this_leg_used_are_named tests/unit/test_shard_payload.py Stable 100.0% 4 0 0 4 builds 31ms
test_the_xpass_mode_accepts_pass_fail_and_skip tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_the_xpass_mode_refuses_anything_else tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.22ms
test_they_come_out_one_after_another tests/unit/test_error_actions.py Stable 100.0% 4 0 0 4 builds 0.40ms
test_three_sections_are_fetched_at_once tests/functional/test_steps.py Stable 100.0% 2 0 0 2 builds 73ms
test_time_comes_from_phases_not_from_duration tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.26ms
test_time_converter tests/unit/test_time_converter.py Stable 100.0% 4 0 0 4 builds 0.29ms
test_title_is_the_name_alone_when_there_is_no_keyword tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.51ms
test_title_keeps_the_keyword_in_front_of_the_name tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_title_of_an_outline_row_is_the_row_that_ran tests/unit/test_bdd.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_toggling_a_chip_is_one_place_to_leave_rather_than_four tests/unit/test_status_links.py Stable 100.0% 4 0 0 4 builds 0.75ms
test_tooltip_gives_the_two_counts_behind_the_delta tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_trim_lines_cuts_at_a_comma_never_mid_range tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_trim_lines_leaves_a_short_list_alone tests/unit/test_coverage.py Stable 100.0% 4 0 0 4 builds 0.20ms
test_trim_log_sections_drops_a_section_the_budget_cannot_reach tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_trim_log_sections_is_a_no_op_without_a_limit tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_trim_log_sections_keeps_the_tail_and_says_what_went tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.27ms
test_trim_log_sections_leaves_output_under_the_limit_alone tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_trim_log_sections_spends_the_budget_on_the_last_sections tests/unit/test_util.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_trimming_keeps_the_head_and_says_what_went tests/unit/test_attachments.py Stable 100.0% 4 0 0 4 builds 0.18ms
test_two_at_one_scope_are_read_as_the_worse_of_them tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.14ms
test_two_broken_files_are_both_recorded tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 0.23ms
test_two_browsers_in_one_test_are_both_photographed tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 376ms
test_two_bundles_with_the_same_id_keep_the_newer_one tests/unit/test_merge_cli.py Stable 100.0% 4 0 0 4 builds 108ms
test_two_ci_systems_numbering_their_builds_alike_get_different_tokens tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 0.63ms
test_two_legs_whose_ids_sanitise_alike_are_warned_about tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 1.98ms
test_two_levels_at_one_scope tests/functional/test_severity.py Stable 100.0% 2 0 0 2 builds 0.26ms
test_two_markers_saying_different_things_both_survive tests/unit/test_markers_edge.py Stable 100.0% 4 0 0 4 builds 0.24ms
test_two_pictures_on_one_row_say_which_browser_each_came_from tests/unit/test_auto_screenshots.py Stable 100.0% 4 0 0 4 builds 413ms
test_two_records_that_mangle_alike_get_distinct_names tests/unit/test_junit.py Stable 100.0% 4 0 0 4 builds 0.43ms
test_two_shard_processes_then_the_merge_command tests/unit/test_shards.py Stable 100.0% 5 0 0 5 builds 699ms
test_two_steps_that_each_raised_both_keep_their_message tests/unit/test_steps.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_two_tests_of_the_same_name_in_different_files_are_told_apart tests/unit/test_deep_links.py Stable 100.0% 4 0 0 4 builds 1.81ms
test_unit_agrees_with_the_figure tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_unowned_sorts_last_however_bad_it_is tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.67ms
test_unparseable_toml_that_names_this_plugin_fails_the_run tests/unit/test_profiles.py Stable 100.0% 4 0 0 4 builds 0.68ms
test_unrated_sorts_last_however_many_tests_are_in_it tests/unit/test_analytics.py Stable 100.0% 5 0 0 5 builds 0.71ms
test_upstream_is_down tests/functional/test_attachments.py Stable 100.0% 2 0 0 2 builds 0.23ms
test_what_was_typed_is_stripped_before_it_is_compared tests/unit/test_shards_helpers.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_whitespace_around_the_marker_and_the_url_is_not_part_of_either tests/unit/test_traceability.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_without_a_token_every_bundle_in_the_folder_is_merged tests/unit/test_merge_helpers.py Stable 100.0% 4 0 0 4 builds 0.53ms
test_without_rerunfailures_a_repeated_nodeid_is_never_swallowed tests/unit/test_reruns.py Stable 100.0% 4 0 0 4 builds 0.30ms
test_without_rerunfailures_nothing_is_folded_and_nothing_is_trailed tests/unit/test_rerun_trail.py Stable 100.0% 4 0 0 4 builds 0.21ms
test_wording_carries_the_sign tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.17ms
test_wording_is_singular_for_one tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_wording_says_no_change_rather_than_plus_zero tests/unit/test_run_delta.py Stable 100.0% 4 0 0 4 builds 0.16ms
test_worker_records_are_routed_by_kind tests/unit/test_collect_errors.py Stable 100.0% 4 0 0 4 builds 0.32ms
test_workers_do_not_each_write_a_report tests/unit/test_xdist.py Stable 100.0% 4 0 0 4 builds 862ms
test_writing_through_the_namespace_is_seen_by_getoption tests/unit/test_shim.py Stable 100.0% 4 0 0 4 builds 0.19ms
test_xfail tests/functional/test_skip_xfail_xpass.py Stable 100.0% 2 0 0 2 builds 0.24ms
test_xpass tests/functional/test_skip_xfail_xpass.py Stable 100.0% 2 0 0 2 builds 0.25ms
test_skip tests/functional/test_skip_xfail_xpass.py Skipped -- 2 0 0 -- 0.24ms
Test Suites
Outcome breakdown for every test suite in this run
Suite Pass Fail Skip xPass xFail Error Rerun
tests/functional/test_approx.py 1 0 0 0 0 0 0
tests/functional/test_attachments.py 5 2 0 0 0 0 6
tests/functional/test_autouse.py 2 0 0 0 0 0 0
tests/functional/test_fixture.py 1 1 0 0 0 0 3
tests/functional/test_gherkin.py 2 1 0 0 0 0 3
tests/functional/test_gherkin_screenshot.py 0 1 0 0 0 0 3
tests/functional/test_mark.py 1 1 0 0 0 0 3
tests/functional/test_parameterize.py 1 1 0 0 0 0 3
tests/functional/test_playwright.py 1 1 0 0 0 0 3
tests/functional/test_screenshot.py 1 1 0 0 0 0 3
tests/functional/test_selenium.py 1 1 0 0 0 0 3
tests/functional/test_severity.py 7 2 0 0 0 0 6
tests/functional/test_simple.py 1 2 0 0 0 0 6
tests/functional/test_skip_xfail_xpass.py 0 0 1 1 1 0 0
tests/functional/test_steps.py 5 2 0 0 0 0 6
tests/functional/test_traceability.py 3 2 0 0 0 0 6
tests/functional/test_usefixtures.py 2 0 0 0 0 0 0
tests/functional/test_yield_fixture.py 1 1 0 0 0 0 3
tests/unit/test_analytics.py 91 0 0 0 0 0 0
tests/unit/test_archives.py 41 0 0 0 0 0 0
tests/unit/test_async_steps.py 2 18 0 0 0 0 54
tests/unit/test_attachment_junit_helpers.py 33 0 0 0 0 0 0
tests/unit/test_attachment_report.py 16 0 0 0 0 0 0
tests/unit/test_attachments.py 75 0 0 0 0 0 0
tests/unit/test_auto_screenshots.py 24 0 0 0 0 0 0
tests/unit/test_bdd.py 39 0 0 0 0 0 0
tests/unit/test_bdd_steps.py 13 0 0 0 0 0 0
tests/unit/test_bundle_io.py 23 0 0 0 0 0 0
tests/unit/test_cli_commands.py 16 0 0 0 0 0 0
tests/unit/test_cli_validation.py 20 0 0 0 0 0 0
tests/unit/test_collect_errors.py 15 0 0 0 0 0 0
tests/unit/test_coverage.py 58 0 0 0 0 0 0
tests/unit/test_coverage_rendering.py 34 0 0 0 0 0 0
tests/unit/test_coverage_sources.py 31 0 0 0 0 0 0
tests/unit/test_deep_links.py 17 0 0 0 0 0 0
tests/unit/test_durations.py 5 0 0 0 0 0 0
tests/unit/test_environment.py 37 0 0 0 0 0 0
tests/unit/test_error_actions.py 36 0 0 0 0 0 0
tests/unit/test_escaping.py 18 0 0 0 0 0 0
tests/unit/test_icons.py 6 0 0 0 0 0 0
tests/unit/test_junit.py 23 0 0 0 0 0 0
tests/unit/test_last_branches.py 18 0 0 0 0 0 0
tests/unit/test_logs.py 11 0 0 0 0 0 0
tests/unit/test_markers.py 16 0 0 0 0 0 0
tests/unit/test_markers_edge.py 40 0 0 0 0 0 0
tests/unit/test_merge_cli.py 17 0 0 0 0 0 0
tests/unit/test_merge_helpers.py 29 0 0 0 0 0 0
tests/unit/test_merge_identity.py 43 0 0 0 0 0 0
tests/unit/test_merge_into_leg.py 15 0 0 0 0 0 0
tests/unit/test_mvc_pages.py 29 0 0 0 0 0 0
tests/unit/test_offline.py 6 0 0 0 0 0 0
tests/unit/test_outcome_classification.py 22 0 0 0 0 0 0
tests/unit/test_plugin.py 21 0 0 0 0 0 0
tests/unit/test_profiles.py 95 0 0 0 0 0 0
tests/unit/test_public_api.py 13 0 0 0 0 0 0
tests/unit/test_report_open.py 38 0 0 0 0 0 0
tests/unit/test_reporter_assets.py 19 0 0 0 0 0 0
tests/unit/test_reporter_hooks.py 14 0 0 0 0 0 0
tests/unit/test_rerun_trail.py 18 0 0 0 0 0 0
tests/unit/test_reruns.py 12 0 0 0 0 0 0
tests/unit/test_run_delta.py 20 0 0 0 0 0 0
tests/unit/test_screenshot_capture.py 48 0 0 0 0 0 0
tests/unit/test_screenshots.py 13 0 0 0 0 0 0
tests/unit/test_shard_payload.py 31 0 0 0 0 0 0
tests/unit/test_shards.py 53 0 0 0 0 0 0
tests/unit/test_shards_helpers.py 52 0 0 0 0 0 0
tests/unit/test_shim.py 19 0 0 0 0 0 0
tests/unit/test_small_helpers.py 49 0 0 0 0 0 0
tests/unit/test_status_links.py 16 0 0 0 0 0 0
tests/unit/test_step_report.py 29 0 0 0 0 0 0
tests/unit/test_step_report_helpers.py 54 0 0 0 0 0 0
tests/unit/test_step_screenshots.py 7 0 0 0 0 0 0
tests/unit/test_steps.py 26 0 0 0 0 0 0
tests/unit/test_teardown_failures.py 12 0 0 0 0 0 0
tests/unit/test_theme.py 12 0 0 0 0 0 0
tests/unit/test_time_converter.py 3 0 0 0 0 0 0
tests/unit/test_traceability.py 41 0 0 0 0 0 0
tests/unit/test_util.py 61 0 0 0 0 0 0
tests/unit/test_xdist.py 14 0 0 0 0 0 0
Test Metrics
Every test case with its status, duration and error
Suite Test Case Status Time Rerun Error Message Logs Data Steps Screens
tests/functional/test_approx.py test_aprox PASS 1.40 ms
tests/functional/test_attachments.py test_an_order_is_created PASS 0.76 ms
tests/functional/test_attachments.py test_the_api_rejects_the_order FAIL 0.42 ms AssertionError: the order was rejected asser
tests/functional/test_attachments.py test_upstream_is_down PASS 0.23 ms
tests/functional/test_attachments.py test_the_fixture_attaches_on_failure FAIL 0.32 ms AssertionError: deleting a shipped order should
tests/functional/test_attachments.py test_a_file_from_disk PASS 0.90 ms
tests/functional/test_attachments.py test_a_plain_note PASS 0.16 ms
tests/functional/test_attachments.py test_nothing_to_attach PASS 0.14 ms
tests/functional/test_autouse.py test_dbx1 PASS 0.22 ms
tests/functional/test_autouse.py test_dbx2 PASS 0.18 ms
tests/functional/test_fixture.py test_fixture_pass PASS 0.24 ms
tests/functional/test_fixture.py test_fixture_fail FAIL 0.31 ms AssertionError: assert 'Saving world' == 'Jesus
tests/functional/test_gherkin.py test_a_shopper_buys_count_of_an_item[1] PASS 59 ms
tests/functional/test_gherkin.py test_a_shopper_buys_count_of_an_item[3] PASS 59 ms
tests/functional/test_gherkin.py test_a_declined_card_names_the_step_that_failed FAIL 106 ms AssertionError: card declined by the gatewa
tests/functional/test_gherkin_screenshot.py test_a_wrong_heading_is_photographed_on_the_step_that_failed FAIL 726 ms AssertionError: assert 'Example Domain' == 'Not
tests/functional/test_mark.py test_fixture_pass PASS 0.23 ms
tests/functional/test_mark.py test_fixture_fail FAIL 0.28 ms assert 5 == 6
tests/functional/test_parameterize.py test_fixture_pass[1-1] PASS 0.25 ms
tests/functional/test_parameterize.py test_fixture_pass[1-2] FAIL 0.30 ms assert 1 == 2
tests/functional/test_playwright.py test_heading[chromium] PASS 862 ms
tests/functional/test_playwright.py test_heading_mismatch[chromium] FAIL 874 ms AssertionError: assert 'Example Domain' == 'Not
tests/functional/test_screenshot.py test_heading PASS 1.78 s
tests/functional/test_screenshot.py test_heading_mismatch FAIL 1.36 s AssertionError: 'Example Domain' != 'Not the he
tests/functional/test_selenium.py test_heading PASS 1.21 s
tests/functional/test_selenium.py test_heading_mismatch FAIL 1.44 s AssertionError: assert 'Example Domain' == 'Not
tests/functional/test_severity.py test_a_customer_can_pay PASS 0.32 ms
tests/functional/test_severity.py test_a_declined_card_is_rejected FAIL 0.34 ms AssertionError: the order completed anyway
tests/functional/test_severity.py test_two_levels_at_one_scope PASS 0.26 ms
tests/functional/test_severity.py test_the_level_is_the_same_however_it_is_capitalised PASS 0.20 ms
tests/functional/test_severity.py test_a_levelless_marker_rates_nothing PASS 0.26 ms
tests/functional/test_severity.py test_a_word_outside_the_five_is_kept PASS 0.19 ms
tests/functional/test_severity.py test_the_basket_totals_correctly PASS 0.17 ms
tests/functional/test_severity.py test_the_basket_survives_a_reload PASS 0.17 ms
tests/functional/test_simple.py test_pass PASS 0.16 ms
tests/functional/test_simple.py test_fail FAIL 0.24 ms Exception: fail
tests/functional/test_simple.py test_failx2 FAIL 0.24 ms Exception: fail
tests/functional/test_skip_xfail_xpass.py test_skip SKIP 0.24 ms ('/Users/prashanthsams/Documents/pytest-html-repor
tests/functional/test_skip_xfail_xpass.py test_xfail xFAIL 0.24 ms assert 5 == 3
tests/functional/test_skip_xfail_xpass.py test_xpass xPASS 0.25 ms
tests/functional/test_steps.py test_a_shopper_can_buy_one_item PASS 257 ms
tests/functional/test_steps.py test_a_shopper_can_buy_several[2] PASS 171 ms
tests/functional/test_steps.py test_a_shopper_can_buy_several[5] PASS 165 ms
tests/functional/test_steps.py test_a_declined_card_is_reported_on_the_step_that_failed FAIL 261 ms AssertionError: card declined by the ga
tests/functional/test_steps.py test_a_test_that_names_no_steps_still_says_where_its_time_went PASS 89 ms
tests/functional/test_steps.py test_three_sections_are_fetched_at_once PASS 73 ms
tests/functional/test_steps.py test_an_async_step_that_fails_names_itself FAIL 41 ms AssertionError: gateway timed out
tests/functional/test_traceability.py test_a_declined_card_is_rejected PASS 0.21 ms
tests/functional/test_traceability.py test_a_refund_returns_the_full_amount FAIL 0.34 ms assert 99.5 == 100.0
tests/functional/test_traceability.py test_the_gateway_is_reachable PASS 0.23 ms
tests/functional/test_traceability.py test_searching_for_a_product FAIL 0.24 ms AssertionError: no results returned
tests/functional/test_usefixtures.py test_fixture_pass PASS 0.30 ms
tests/functional/test_usefixtures.py test_fixture_fail PASS 0.18 ms
tests/functional/test_yield_fixture.py test_pass PASS 0.16 ms
tests/functional/test_yield_fixture.py test_fail FAIL 0.28 ms assert False
tests/unit/test_analytics.py test_only_a_failure_counts_as_a_failure PASS 0.38 ms
tests/unit/test_analytics.py test_an_expected_outcome_is_not_a_failure PASS 0.17 ms
tests/unit/test_analytics.py test_a_skip_is_its_own_thing PASS 0.22 ms
tests/unit/test_analytics.py test_an_unknown_status_is_not_read_as_a_failure PASS 0.15 ms
tests/unit/test_analytics.py test_a_test_that_always_passed_is_stable PASS 1.74 ms
tests/unit/test_analytics.py test_a_test_that_alternates_is_flaky PASS 1.10 ms
tests/unit/test_analytics.py test_a_test_that_never_passed_is_broken_not_flaky PASS 1.14 ms
tests/unit/test_analytics.py test_one_failing_build_is_not_yet_a_standing_failure PASS 0.62 ms
tests/unit/test_analytics.py test_a_retry_inside_one_build_is_enough_to_be_flaky PASS 0.54 ms
tests/unit/test_analytics.py test_skips_do_not_count_as_flipping PASS 0.83 ms
tests/unit/test_analytics.py test_a_test_only_ever_skipped_has_no_pass_rate PASS 0.70 ms
tests/unit/test_analytics.py test_the_streak_is_counted_from_the_newest_build PASS 0.86 ms
tests/unit/test_analytics.py test_a_test_missing_from_the_latest_build_is_marked PASS 0.91 ms
tests/unit/test_analytics.py test_builds_are_ordered_oldest_first_with_this_run_last PASS 0.94 ms
tests/unit/test_analytics.py test_builds_sort_on_the_stamp_not_the_file_name PASS 0.74 ms
tests/unit/test_analytics.py test_a_broken_archive_is_skipped_not_fatal PASS 0.86 ms
tests/unit/test_analytics.py test_builds_inside_one_minute_are_still_told_apart PASS 0.96 ms
tests/unit/test_analytics.py test_an_archive_without_durations_is_read_as_unmeasured PASS 0.68 ms
tests/unit/test_analytics.py test_a_duration_that_cannot_be_one_is_read_as_unmeasured PASS 0.57 ms
tests/unit/test_analytics.py test_a_long_run_is_read_in_hours PASS 0.23 ms
tests/unit/test_analytics.py test_movement_names_what_changed PASS 0.90 ms
tests/unit/test_analytics.py test_a_first_build_has_nothing_to_have_moved_from PASS 0.57 ms
tests/unit/test_analytics.py test_durations_land_in_their_bands PASS 0.55 ms
tests/unit/test_analytics.py test_a_run_that_measured_nothing_draws_no_histogram PASS 0.49 ms
tests/unit/test_analytics.py test_a_clean_suite_scores_full_marks PASS 0.78 ms
tests/unit/test_analytics.py test_flipping_scores_worse_than_failing_outright PASS 1.44 ms
tests/unit/test_analytics.py test_the_exception_is_read_off_the_line_it_is_raised_on PASS 0.24 ms
tests/unit/test_analytics.py test_a_dotted_exception_groups_with_its_bare_name PASS 0.23 ms
tests/unit/test_analytics.py test_a_bare_assert_is_read_as_an_assertion PASS 0.18 ms
tests/unit/test_analytics.py test_an_error_keeps_its_whole_traceback_and_is_still_read PASS 0.15 ms
tests/unit/test_analytics.py test_the_exception_that_surfaced_wins_over_the_one_it_came_from PASS 0.18 ms
tests/unit/test_analytics.py test_a_diff_line_is_not_mistaken_for_a_raised_exception PASS 0.20 ms
tests/unit/test_analytics.py test_colour_written_into_the_message_does_not_hide_the_exception PASS 0.15 ms
tests/unit/test_analytics.py test_a_message_naming_nothing_is_left_unclassified PASS 0.19 ms
tests/unit/test_analytics.py test_only_the_failures_are_grouped PASS 0.80 ms
tests/unit/test_analytics.py test_an_error_is_grouped_beside_the_failures PASS 0.79 ms
tests/unit/test_analytics.py test_the_largest_group_leads_and_carries_its_share PASS 0.73 ms
tests/unit/test_analytics.py test_the_unclassified_pile_is_held_at_the_bottom_however_large_it_is PASS 0.71 ms
tests/unit/test_analytics.py test_a_group_is_compared_against_the_build_before PASS 0.65 ms
tests/unit/test_analytics.py test_a_first_build_has_no_movement_to_report PASS 0.50 ms
tests/unit/test_analytics.py test_the_headline_says_where_to_start PASS 0.61 ms
tests/unit/test_analytics.py test_the_headline_says_so_when_every_failure_is_the_same_thing PASS 0.55 ms
tests/unit/test_analytics.py test_the_headline_says_so_when_nothing_groups_with_anything PASS 0.63 ms
tests/unit/test_analytics.py test_a_green_run_has_no_headline_at_all PASS 0.74 ms
tests/unit/test_analytics.py test_the_first_run_says_so_rather_than_drawing_empty_axes PASS 1.36 ms
tests/unit/test_analytics.py test_a_build_that_decided_nothing_leaves_a_gap_not_a_zero PASS 1.32 ms
tests/unit/test_analytics.py test_the_page_is_handed_valid_arrays_for_every_series PASS 1.17 ms
tests/unit/test_analytics.py test_a_test_name_never_reaches_the_page_as_source_code PASS 0.83 ms
tests/unit/test_analytics.py test_a_name_that_looks_like_a_placeholder_is_not_filled_in PASS 0.96 ms
tests/unit/test_analytics.py test_the_worst_behaved_tests_are_at_the_top PASS 1.52 ms
tests/unit/test_analytics.py test_the_history_strip_carries_a_sort_value PASS 1.22 ms
tests/unit/test_analytics.py test_the_failure_panel_names_the_tests_under_each_exception PASS 1.01 ms
tests/unit/test_analytics.py test_the_failure_panel_is_answerable_on_a_first_run PASS 0.90 ms
tests/unit/test_analytics.py test_a_green_run_has_no_failure_panel PASS 1.07 ms
tests/unit/test_analytics.py test_a_test_named_under_a_failure_group_reaches_the_page_escaped PASS 1.22 ms
tests/unit/test_analytics.py test_a_truncated_list_is_written_out_in_full_behind_the_card PASS 1.55 ms
tests/unit/test_analytics.py test_a_truncated_list_opens_rather_than_ending_at_a_count PASS 1.21 ms
tests/unit/test_analytics.py test_a_movement_card_opens_the_same_way PASS 1.33 ms
tests/unit/test_analytics.py test_a_card_short_enough_to_show_everything_offers_nothing_to_open PASS 1.02 ms
tests/unit/test_analytics.py test_the_exception_types_past_the_panel_open_too PASS 1.89 ms
tests/unit/test_analytics.py test_the_dialog_a_truncated_list_opens_is_on_the_page PASS 1.87 ms
tests/unit/test_analytics.py test_a_run_with_nothing_on_disk_is_left_alone PASS 0.46 ms
tests/unit/test_analytics.py test_an_owner_row_counts_the_tests_that_team_holds PASS 0.77 ms
tests/unit/test_analytics.py test_a_test_with_two_owners_counts_for_both PASS 0.66 ms
tests/unit/test_analytics.py test_a_test_nobody_claimed_is_a_row_rather_than_a_gap PASS 0.63 ms
tests/unit/test_analytics.py test_unowned_sorts_last_however_bad_it_is PASS 0.67 ms
tests/unit/test_analytics.py test_the_worst_team_is_at_the_top PASS 0.64 ms
tests/unit/test_analytics.py test_ownership_is_read_from_the_most_recent_build_that_named_one PASS 0.72 ms
tests/unit/test_analytics.py test_a_build_archived_before_ownership_existed_reads_as_unowned PASS 0.54 ms
tests/unit/test_analytics.py test_a_test_this_run_no_longer_has_is_nobodys_morning PASS 0.66 ms
tests/unit/test_analytics.py test_the_pass_rate_is_the_mean_of_the_tests_own_rates PASS 0.63 ms
tests/unit/test_analytics.py test_the_share_bar_is_drawn_against_the_busiest_owner PASS 0.57 ms
tests/unit/test_analytics.py test_the_headline_says_how_much_of_the_suite_is_unclaimed PASS 0.67 ms
tests/unit/test_analytics.py test_the_headline_says_so_when_every_test_is_claimed PASS 1.16 ms
tests/unit/test_analytics.py test_a_suite_that_named_no_owner_gets_no_panel PASS 1.03 ms
tests/unit/test_analytics.py test_a_suite_that_named_one_gets_the_panel PASS 1.04 ms
tests/unit/test_analytics.py test_the_panel_the_template_asks_for_is_the_one_that_is_filled PASS 0.62 ms
tests/unit/test_analytics.py test_a_severity_row_counts_the_tests_rated_at_it PASS 0.71 ms
tests/unit/test_analytics.py test_a_test_counts_once_because_it_has_one_severity PASS 0.65 ms
tests/unit/test_analytics.py test_the_rows_are_the_ladder_rather_than_the_worst_numbers PASS 0.83 ms
tests/unit/test_analytics.py test_unrated_sorts_last_however_many_tests_are_in_it PASS 0.71 ms
tests/unit/test_analytics.py test_a_word_nobody_recognises_sorts_after_the_five PASS 0.68 ms
tests/unit/test_analytics.py test_a_severity_is_read_from_the_most_recent_build_that_named_one PASS 0.69 ms
tests/unit/test_analytics.py test_a_build_archived_before_severity_existed_reads_as_unrated PASS 0.66 ms
tests/unit/test_analytics.py test_the_headline_leads_with_what_is_red_at_the_worst_level PASS 0.71 ms
tests/unit/test_analytics.py test_the_headline_falls_back_to_how_much_is_unrated PASS 0.64 ms
tests/unit/test_analytics.py test_the_headline_says_so_when_every_test_is_rated PASS 0.91 ms
tests/unit/test_analytics.py test_a_suite_that_rated_nothing_gets_no_severity_panel PASS 1.19 ms
tests/unit/test_analytics.py test_a_suite_that_rated_one_test_gets_the_panel PASS 1.12 ms
tests/unit/test_analytics.py test_the_severity_panel_the_template_asks_for_is_the_one_that_is_filled PASS 0.60 ms
tests/unit/test_archives.py test_archive_count_defaults_to_no_limit PASS 0.18 ms
tests/unit/test_archives.py test_archive_count_from_ini PASS 0.15 ms
tests/unit/test_archives.py test_archive_count_cli_beats_ini PASS 0.15 ms
tests/unit/test_archives.py test_archive_count_keeps_zero_apart_from_unset PASS 0.22 ms
tests/unit/test_archives.py test_archive_count_rejects_nonsense PASS 0.37 ms
tests/unit/test_archives.py test_archive_count_rejects_a_negative_count PASS 0.17 ms
tests/unit/test_archives.py test_archive_days_defaults_to_no_limit PASS 0.22 ms
tests/unit/test_archives.py test_archive_days_from_ini PASS 0.18 ms
tests/unit/test_archives.py test_archive_days_cli_beats_ini PASS 0.16 ms
tests/unit/test_archives.py test_archive_days_takes_a_fraction_of_a_day PASS 0.15 ms
tests/unit/test_archives.py test_archive_days_rejects_nonsense PASS 0.16 ms
tests/unit/test_archives.py test_archive_days_rejects_a_negative_age PASS 0.15 ms
tests/unit/test_archives.py test_archive_since_defaults_to_no_cutoff PASS 0.16 ms
tests/unit/test_archives.py test_archive_since_reads_a_date_as_midnight PASS 2.25 ms
tests/unit/test_archives.py test_archive_since_reads_a_date_and_a_time PASS 0.23 ms
tests/unit/test_archives.py test_archive_since_from_ini PASS 0.23 ms
tests/unit/test_archives.py test_archive_since_rejects_nonsense PASS 0.18 ms
tests/unit/test_archives.py test_no_age_limit_is_no_cutoff PASS 0.16 ms
tests/unit/test_archives.py test_days_cuts_back_from_now PASS 0.22 ms
tests/unit/test_archives.py test_since_is_the_cutoff_on_its_own PASS 0.17 ms
tests/unit/test_archives.py test_the_two_age_limits_take_the_stricter_of_the_pair PASS 0.15 ms
tests/unit/test_archives.py test_archive_timestamp_reads_the_name PASS 0.16 ms
tests/unit/test_archives.py test_archive_timestamp_ignores_the_mtime_of_a_named_file PASS 0.77 ms
tests/unit/test_archives.py test_archive_timestamp_falls_back_to_the_mtime PASS 0.64 ms
tests/unit/test_archives.py test_nothing_set_keeps_every_build PASS 0.65 ms
tests/unit/test_archives.py test_a_count_keeps_the_newest PASS 0.64 ms
tests/unit/test_archives.py test_a_count_of_zero_keeps_nothing PASS 0.67 ms
tests/unit/test_archives.py test_a_count_larger_than_the_history_drops_nothing PASS 0.83 ms
tests/unit/test_archives.py test_a_cutoff_drops_what_is_older_than_it PASS 0.71 ms
tests/unit/test_archives.py test_the_limits_intersect PASS 0.71 ms
tests/unit/test_archives.py test_expired_archives_are_returned_oldest_first PASS 0.58 ms
tests/unit/test_archives.py test_no_limit_leaves_the_folder_alone PASS 0.90 ms
tests/unit/test_archives.py test_a_count_keeps_room_for_the_build_being_reported PASS 1.10 ms
tests/unit/test_archives.py test_a_count_of_zero_removes_the_folder PASS 0.84 ms
tests/unit/test_archives.py test_archive_days_drops_the_builds_that_are_older PASS 0.95 ms
tests/unit/test_archives.py test_archive_since_drops_the_builds_from_before_the_date PASS 0.85 ms
tests/unit/test_archives.py test_an_age_limit_and_a_count_intersect PASS 0.91 ms
tests/unit/test_archives.py test_the_folder_is_found_when_the_path_names_the_html_file PASS 0.67 ms
tests/unit/test_archives.py test_retention_leaves_anything_that_is_not_an_archive_alone PASS 0.66 ms
tests/unit/test_archives.py test_retention_survives_an_empty_folder PASS 0.49 ms
tests/unit/test_archives.py test_retention_survives_a_folder_that_was_never_written PASS 0.66 ms
tests/unit/test_async_steps.py test_an_async_with_block_records_one_step FAIL 0.39 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_an_async_with_block_is_held_open_across_what_it_awaits FAIL 0.32 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_an_async_with_block_hands_back_the_step_it_opened FAIL 0.30 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_a_sync_block_and_an_async_one_nest_in_one_another FAIL 0.31 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_the_message_goes_on_the_async_step_that_raised FAIL 0.31 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_a_decorated_coroutine_is_timed_across_the_call FAIL 0.34 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_a_decorated_coroutine_still_returns_what_it_returned FAIL 0.32 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_a_decorated_coroutines_own_arguments_fill_in_its_title FAIL 0.48 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_a_coroutine_that_raises_is_failed_and_the_exception_carries_on_out FAIL 0.32 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_an_async_function_behind_another_decorator_is_still_found FAIL 0.33 ms ValueError: not enough values to unpack (expect
tests/unit/test_async_steps.py test_a_wrapped_chain_pointed_back_at_itself_does_not_hang PASS 0.26 ms
tests/unit/test_async_steps.py test_an_async_generator_is_not_mistaken_for_a_coroutine FAIL 0.41 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_gathered_legs_are_siblings_and_not_a_chain FAIL 0.41 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_gathered_legs_still_nest_under_the_step_that_fanned_them_out FAIL 0.34 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_a_plain_await_nests_the_way_a_plain_call_does FAIL 0.33 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_an_attachment_made_in_one_leg_is_filed_under_that_leg FAIL 0.31 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_one_step_object_entered_twice_at_once_closes_both FAIL 0.38 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_a_step_held_open_across_a_yield_closes_where_the_fixture_resumes FAIL 0.48 ms RuntimeError: Cannot run the event loop whi
tests/unit/test_async_steps.py test_a_cancelled_tasks_open_step_is_closed_rather_than_left_behind FAIL 0.40 ms RuntimeError: asyncio.run() cannot be calle
tests/unit/test_async_steps.py test_a_thread_that_leaked_a_step_does_not_indent_the_next_test PASS 2.35 ms
tests/unit/test_attachment_junit_helpers.py test_a_plain_dict_of_headers_is_read PASS 0.22 ms
tests/unit/test_attachment_junit_helpers.py test_a_list_of_pairs_is_read_too PASS 0.17 ms
tests/unit/test_attachment_junit_helpers.py test_no_headers_at_all_is_not_an_error PASS 0.30 ms
tests/unit/test_attachment_junit_helpers.py test_an_items_call_that_raises_costs_the_headers_and_nothing_else PASS 0.68 ms
tests/unit/test_attachment_junit_helpers.py test_something_that_is_not_headers_at_all_is_read_as_none PASS 1.45 ms
tests/unit/test_attachment_junit_helpers.py test_a_secret_is_hidden_by_default PASS 0.19 ms
tests/unit/test_attachment_junit_helpers.py test_redaction_can_be_switched_off PASS 0.36 ms
tests/unit/test_attachment_junit_helpers.py test_an_ordinary_header_is_left_alone PASS 0.21 ms
tests/unit/test_attachment_junit_helpers.py test_a_timedelta_style_elapsed_is_read_through_total_seconds PASS 0.17 ms
tests/unit/test_attachment_junit_helpers.py test_a_plain_number_elapsed_is_read_as_it_is PASS 0.26 ms
tests/unit/test_attachment_junit_helpers.py test_a_client_that_kept_no_timing_reports_none PASS 0.18 ms
tests/unit/test_attachment_junit_helpers.py test_an_elapsed_that_is_neither_is_not_guessed_at PASS 0.16 ms
tests/unit/test_attachment_junit_helpers.py test_milliseconds_are_rounded_to_a_whole_number PASS 0.53 ms
tests/unit/test_attachment_junit_helpers.py test_a_duration_that_is_not_a_number_has_no_milliseconds PASS 0.18 ms
tests/unit/test_attachment_junit_helpers.py test_a_call_under_a_second_is_shown_in_milliseconds PASS 1.24 ms
tests/unit/test_attachment_junit_helpers.py test_a_call_of_a_second_or_more_is_shown_in_seconds PASS 0.18 ms
tests/unit/test_attachment_junit_helpers.py test_a_call_with_no_timing_says_nothing PASS 0.31 ms
tests/unit/test_attachment_junit_helpers.py test_the_size_is_the_characters_of_every_part PASS 0.24 ms
tests/unit/test_attachment_junit_helpers.py test_an_attachment_with_no_parts_holds_nothing PASS 0.18 ms
tests/unit/test_attachment_junit_helpers.py test_keywords_build_the_options_when_none_were_given PASS 0.30 ms
tests/unit/test_attachment_junit_helpers.py test_options_given_whole_are_used_as_they_are PASS 0.20 ms
tests/unit/test_attachment_junit_helpers.py test_options_and_keywords_together_are_refused_rather_than_merged PASS 0.35 ms
tests/unit/test_attachment_junit_helpers.py test_a_records_time_is_the_sum_of_its_phases PASS 0.17 ms
tests/unit/test_attachment_junit_helpers.py test_a_record_whose_phases_are_unreadable_falls_back_to_its_duration PASS 0.25 ms
tests/unit/test_attachment_junit_helpers.py test_a_record_with_no_phases_uses_its_own_duration PASS 0.18 ms
tests/unit/test_attachment_junit_helpers.py test_a_record_with_nothing_readable_took_no_time PASS 0.17 ms
tests/unit/test_attachment_junit_helpers.py test_the_first_line_with_anything_in_it_is_the_message PASS 0.16 ms
tests/unit/test_attachment_junit_helpers.py test_a_message_that_is_all_blank_lines_says_nothing PASS 0.14 ms
tests/unit/test_attachment_junit_helpers.py test_a_control_character_is_escaped_rather_than_written_raw PASS 0.16 ms
tests/unit/test_attachment_junit_helpers.py test_a_higher_illegal_codepoint_is_escaped_in_four_digits PASS 0.15 ms
tests/unit/test_attachment_junit_helpers.py test_ordinary_text_passes_through_untouched PASS 0.14 ms
tests/unit/test_attachment_junit_helpers.py test_the_whitespace_xml_does_allow_is_kept PASS 0.41 ms
tests/unit/test_attachment_junit_helpers.py test_something_that_is_not_text_is_stringified_first PASS 0.16 ms
tests/unit/test_attachment_report.py test_every_attachment_reaches_the_rail PASS 417 ms
tests/unit/test_attachment_report.py test_the_row_counts_what_it_can_open PASS 396 ms
tests/unit/test_attachment_report.py test_a_call_carries_its_parts_and_its_status PASS 403 ms
tests/unit/test_attachment_report.py test_a_call_with_a_request_body_keeps_every_part PASS 364 ms
tests/unit/test_attachment_report.py test_a_credential_never_reaches_the_file PASS 369 ms
tests/unit/test_attachment_report.py test_a_payload_is_escaped_rather_than_rendered PASS 357 ms
tests/unit/test_attachment_report.py test_a_non_ascii_payload_survives_the_write PASS 369 ms
tests/unit/test_attachment_report.py test_failed_mode_keeps_only_the_failures PASS 384 ms
tests/unit/test_attachment_report.py test_none_mode_keeps_nothing PASS 376 ms
tests/unit/test_attachment_report.py test_a_large_payload_is_trimmed_to_the_limit PASS 373 ms
tests/unit/test_attachment_report.py test_the_limit_can_be_lifted PASS 365 ms
tests/unit/test_attachment_report.py test_an_attachment_is_not_handed_to_the_next_test PASS 365 ms
tests/unit/test_attachment_report.py test_attaching_from_a_fixture_teardown_still_lands_on_the_test PASS 356 ms
tests/unit/test_attachment_report.py test_the_tab_guides_you_when_nothing_was_attached PASS 378 ms
tests/unit/test_attachment_report.py test_a_retry_that_attached_nothing_keeps_the_earlier_evidence PASS 372 ms
tests/unit/test_attachment_report.py test_attachments_survive_an_xdist_run PASS 666 ms
tests/unit/test_attachments.py test_credential_names_are_recognised[Authorization] PASS 0.39 ms
tests/unit/test_attachments.py test_credential_names_are_recognised[proxy-authorization] PASS 0.21 ms
tests/unit/test_attachments.py test_credential_names_are_recognised[Cookie] PASS 0.25 ms
tests/unit/test_attachments.py test_credential_names_are_recognised[Set-Cookie] PASS 0.20 ms
tests/unit/test_attachments.py test_credential_names_are_recognised[X-Api-Key] PASS 0.18 ms
tests/unit/test_attachments.py test_credential_names_are_recognised[api_key] PASS 0.19 ms
tests/unit/test_attachments.py test_credential_names_are_recognised[access_token] PASS 0.18 ms
tests/unit/test_attachments.py test_credential_names_are_recognised[refresh_token] PASS 0.26 ms
tests/unit/test_attachments.py test_credential_names_are_recognised[password] PASS 0.31 ms
tests/unit/test_attachments.py test_credential_names_are_recognised[client_secret] PASS 0.20 ms
tests/unit/test_attachments.py test_ordinary_headers_are_left_alone[Content-Type] PASS 0.20 ms
tests/unit/test_attachments.py test_ordinary_headers_are_left_alone[Accept] PASS 0.18 ms
tests/unit/test_attachments.py test_ordinary_headers_are_left_alone[User-Agent] PASS 0.18 ms
tests/unit/test_attachments.py test_ordinary_headers_are_left_alone[X-Request-Id] PASS 0.20 ms
tests/unit/test_attachments.py test_ordinary_headers_are_left_alone[Content-Length] PASS 0.27 ms
tests/unit/test_attachments.py test_headers_are_redacted_by_name PASS 0.30 ms
tests/unit/test_attachments.py test_redaction_can_be_switched_off PASS 0.22 ms
tests/unit/test_attachments.py test_a_body_is_redacted_at_any_depth PASS 0.23 ms
tests/unit/test_attachments.py test_a_credential_in_the_query_string_is_blanked_out PASS 0.26 ms
tests/unit/test_attachments.py test_a_url_without_a_query_is_untouched PASS 0.18 ms
tests/unit/test_attachments.py test_a_bare_query_flag_is_left_alone PASS 0.17 ms
tests/unit/test_attachments.py test_query_redaction_can_be_switched_off PASS 0.16 ms
tests/unit/test_attachments.py test_a_har_shaped_header_list_is_redacted PASS 0.18 ms
tests/unit/test_attachments.py test_header_pairs_reads_a_case_insensitive_mapping PASS 0.22 ms
tests/unit/test_attachments.py test_a_json_body_is_pretty_printed PASS 0.47 ms
tests/unit/test_attachments.py test_a_body_that_is_not_json_is_left_as_it_is PASS 0.18 ms
tests/unit/test_attachments.py test_a_scalar_is_not_treated_as_json PASS 0.18 ms
tests/unit/test_attachments.py test_a_malformed_json_body_survives_verbatim PASS 0.18 ms
tests/unit/test_attachments.py test_bytes_are_decoded_without_raising_on_bad_utf8 PASS 0.16 ms
tests/unit/test_attachments.py test_a_decoded_body_skips_the_round_trip PASS 0.18 ms
tests/unit/test_attachments.py test_the_content_type_picks_the_syntax[application/json-json] PASS 0.41 ms
tests/unit/test_attachments.py test_the_content_type_picks_the_syntax[application/problem+json; charset=utf-8-json] PASS 0.26 ms
tests/unit/test_attachments.py test_the_content_type_picks_the_syntax[text/xml-xml] PASS 0.30 ms
tests/unit/test_attachments.py test_the_content_type_picks_the_syntax[text/html-html] PASS 0.22 ms
tests/unit/test_attachments.py test_the_content_type_picks_the_syntax[application/x-yaml-yaml] PASS 0.21 ms
tests/unit/test_attachments.py test_the_content_type_picks_the_syntax[text/plain-text] PASS 0.21 ms
tests/unit/test_attachments.py test_the_content_type_picks_the_syntax[-text] PASS 0.21 ms
tests/unit/test_attachments.py test_curl_repeats_the_call_with_the_redaction_intact PASS 0.18 ms
tests/unit/test_attachments.py test_curl_escapes_a_quote_in_the_body PASS 0.16 ms
tests/unit/test_attachments.py test_sizes_read_in_the_unit_that_stays_short[12-12 B] PASS 0.54 ms
tests/unit/test_attachments.py test_sizes_read_in_the_unit_that_stays_short[1536-1.5 KB] PASS 0.25 ms
tests/unit/test_attachments.py test_sizes_read_in_the_unit_that_stays_short[2097152-2.0 MB] PASS 0.29 ms
tests/unit/test_attachments.py test_a_status_is_grouped_by_its_class[200-2xx] PASS 0.33 ms
tests/unit/test_attachments.py test_a_status_is_grouped_by_its_class[301-3xx] PASS 0.23 ms
tests/unit/test_attachments.py test_a_status_is_grouped_by_its_class[404-4xx] PASS 0.42 ms
tests/unit/test_attachments.py test_a_status_is_grouped_by_its_class[503-5xx] PASS 0.25 ms
tests/unit/test_attachments.py test_a_status_is_grouped_by_its_class[None-] PASS 0.20 ms
tests/unit/test_attachments.py test_a_status_is_grouped_by_its_class[-] PASS 0.20 ms
tests/unit/test_attachments.py test_a_status_is_grouped_by_its_class[999-] PASS 0.20 ms
tests/unit/test_attachments.py test_a_status_is_grouped_by_its_class[oops-] PASS 0.20 ms
tests/unit/test_attachments.py test_trimming_keeps_the_head_and_says_what_went PASS 0.18 ms
tests/unit/test_attachments.py test_a_part_under_the_limit_is_untouched PASS 0.16 ms
tests/unit/test_attachments.py test_the_limit_can_be_lifted PASS 0.19 ms
tests/unit/test_attachments.py test_filename_is_safe_to_write_to_disk PASS 0.20 ms
tests/unit/test_attachments.py test_attach_text_lands_in_the_buffer PASS 0.22 ms
tests/unit/test_attachments.py test_taking_the_attachments_empties_the_buffer PASS 0.24 ms
tests/unit/test_attachments.py test_empty_text_attaches_nothing PASS 0.21 ms
tests/unit/test_attachments.py test_a_part_with_no_text_is_dropped PASS 0.18 ms
tests/unit/test_attachments.py test_an_unknown_format_falls_back_to_text PASS 0.17 ms
tests/unit/test_attachments.py test_attach_json_takes_an_object PASS 0.22 ms
tests/unit/test_attachments.py test_attach_file_reads_the_file_and_names_it PASS 0.87 ms
tests/unit/test_attachments.py test_a_json_file_is_redacted_like_any_other_body PASS 0.79 ms
tests/unit/test_attachments.py test_a_har_file_keeps_none_of_its_auth_headers PASS 0.75 ms
tests/unit/test_attachments.py test_file_redaction_can_be_switched_off PASS 0.55 ms
tests/unit/test_attachments.py test_a_file_that_is_not_structured_is_kept_verbatim PASS 0.67 ms
tests/unit/test_attachments.py test_a_response_object_fills_in_the_whole_attachment PASS 0.38 ms
tests/unit/test_attachments.py test_a_query_credential_does_not_survive_a_call PASS 0.32 ms
tests/unit/test_attachments.py test_the_title_leads_with_the_path_not_the_host PASS 0.26 ms
tests/unit/test_attachments.py test_every_part_of_a_call_is_kept PASS 0.20 ms
tests/unit/test_attachments.py test_neither_a_header_nor_a_body_credential_survives PASS 0.20 ms
tests/unit/test_attachments.py test_httpx_spelling_is_read_too PASS 0.19 ms
tests/unit/test_attachments.py test_a_property_that_raises_does_not_take_the_test_down_with_it PASS 0.20 ms
tests/unit/test_attachments.py test_a_call_can_be_described_without_any_response_object PASS 0.18 ms
tests/unit/test_attachments.py test_an_explicit_field_beats_the_response_object PASS 0.20 ms
tests/unit/test_attachments.py test_a_call_with_no_timing_shows_no_time PASS 0.19 ms
tests/unit/test_auto_screenshots.py test_a_selenium_driver_is_photographed PASS 0.19 ms
tests/unit/test_auto_screenshots.py test_a_playwright_page_is_photographed PASS 0.15 ms
tests/unit/test_auto_screenshots.py test_a_wrapper_is_photographed_through_the_driver_it_wraps PASS 0.15 ms
tests/unit/test_auto_screenshots.py test_a_browser_that_raises_is_not_worth_failing_a_test_over PASS 0.15 ms
tests/unit/test_auto_screenshots.py test_an_async_page_is_left_alone PASS 0.41 ms
tests/unit/test_auto_screenshots.py test_a_mock_is_not_mistaken_for_a_browser PASS 2.82 ms
tests/unit/test_auto_screenshots.py test_a_fixture_that_is_not_a_browser_is_left_alone PASS 0.21 ms
tests/unit/test_auto_screenshots.py test_a_context_is_photographed_through_its_pages PASS 0.16 ms
tests/unit/test_auto_screenshots.py test_a_browser_is_photographed_through_the_pages_inside_it PASS 0.20 ms
tests/unit/test_auto_screenshots.py test_a_context_holding_no_page_yields_nothing PASS 0.19 ms
tests/unit/test_auto_screenshots.py test_a_failing_test_is_photographed_with_no_hook_at_all PASS 367 ms
tests/unit/test_auto_screenshots.py test_a_passing_test_is_not_photographed_by_default PASS 374 ms
tests/unit/test_auto_screenshots.py test_every_test_is_photographed_when_the_run_asks_for_it PASS 347 ms
tests/unit/test_auto_screenshots.py test_nothing_is_photographed_when_the_run_turns_it_off PASS 377 ms
tests/unit/test_auto_screenshots.py test_an_image_the_test_attached_is_kept_when_capture_is_off PASS 377 ms
tests/unit/test_auto_screenshots.py test_a_test_that_took_its_own_picture_is_not_photographed_again PASS 367 ms
tests/unit/test_auto_screenshots.py test_a_unittest_driver_is_found_on_the_test_itself PASS 391 ms
tests/unit/test_auto_screenshots.py test_a_fixture_that_blew_up_after_the_browser_opened_is_photographed PASS 424 ms
tests/unit/test_auto_screenshots.py test_a_browser_named_something_else_is_still_found PASS 377 ms
tests/unit/test_auto_screenshots.py test_one_page_reached_through_three_fixtures_is_photographed_once PASS 366 ms
tests/unit/test_auto_screenshots.py test_two_browsers_in_one_test_are_both_photographed PASS 376 ms
tests/unit/test_auto_screenshots.py test_two_pictures_on_one_row_say_which_browser_each_came_from PASS 413 ms
tests/unit/test_auto_screenshots.py test_one_picture_on_a_row_is_named_by_the_test_alone PASS 369 ms
tests/unit/test_auto_screenshots.py test_a_browser_that_died_does_not_take_the_report_with_it PASS 362 ms
tests/unit/test_bdd.py test_read_takes_the_first_name_the_object_answers_to PASS 0.37 ms
tests/unit/test_bdd.py test_read_falls_through_to_the_older_name PASS 0.17 ms
tests/unit/test_bdd.py test_read_skips_a_name_that_is_present_but_none PASS 0.19 ms
tests/unit/test_bdd.py test_read_is_none_when_the_object_answers_to_none_of_them PASS 0.16 ms
tests/unit/test_bdd.py test_read_survives_an_attribute_that_raises PASS 0.17 ms
tests/unit/test_bdd.py test_text_stringifies_whatever_it_found PASS 0.17 ms
tests/unit/test_bdd.py test_text_is_empty_rather_than_the_word_none PASS 0.16 ms
tests/unit/test_bdd.py test_kind_is_the_word_the_feature_file_wrote[Given] PASS 0.20 ms
tests/unit/test_bdd.py test_kind_is_the_word_the_feature_file_wrote[WHEN] PASS 0.24 ms
tests/unit/test_bdd.py test_kind_is_the_word_the_feature_file_wrote[ then ] PASS 0.20 ms
tests/unit/test_bdd.py test_kind_is_the_word_the_feature_file_wrote[And] PASS 0.25 ms
tests/unit/test_bdd.py test_kind_is_the_word_the_feature_file_wrote[But] PASS 0.25 ms
tests/unit/test_bdd.py test_kind_falls_back_to_the_type_pytest_bdd_resolved PASS 0.18 ms
tests/unit/test_bdd.py test_kind_is_a_plain_step_when_neither_is_a_gherkin_word PASS 0.20 ms
tests/unit/test_bdd.py test_kind_is_a_plain_step_when_the_object_offers_nothing PASS 0.19 ms
tests/unit/test_bdd.py test_title_keeps_the_keyword_in_front_of_the_name PASS 0.18 ms
tests/unit/test_bdd.py test_title_is_the_name_alone_when_there_is_no_keyword PASS 0.51 ms
tests/unit/test_bdd.py test_title_of_an_outline_row_is_the_row_that_ran PASS 0.20 ms
tests/unit/test_bdd.py test_params_keep_the_steps_own_parsed_arguments PASS 0.18 ms
tests/unit/test_bdd.py test_params_drop_the_fixtures_injected_beside_them PASS 0.18 ms
tests/unit/test_bdd.py test_params_drop_private_names PASS 0.16 ms
tests/unit/test_bdd.py test_params_keep_every_scalar_a_gherkin_parser_can_yield PASS 0.17 ms
tests/unit/test_bdd.py test_params_are_sorted_so_the_row_reads_the_same_every_run PASS 0.17 ms
tests/unit/test_bdd.py test_params_are_empty_when_pytest_bdd_hands_over_no_mapping[None] PASS 0.19 ms
tests/unit/test_bdd.py test_params_are_empty_when_pytest_bdd_hands_over_no_mapping[value1] PASS 0.19 ms
tests/unit/test_bdd.py test_params_are_empty_when_pytest_bdd_hands_over_no_mapping[not a dict] PASS 0.27 ms
tests/unit/test_bdd.py test_params_are_empty_when_pytest_bdd_hands_over_no_mapping[7] PASS 0.28 ms
tests/unit/test_bdd.py test_before_step_opens_the_step_with_its_gherkin_badge PASS 0.37 ms
tests/unit/test_bdd.py test_after_step_records_what_the_step_was_called_with PASS 0.46 ms
tests/unit/test_bdd.py test_step_error_closes_the_step_that_raised_with_why PASS 0.21 ms
tests/unit/test_bdd.py test_step_error_needs_no_arguments_to_close_a_step PASS 0.33 ms
tests/unit/test_bdd.py test_lookup_error_names_a_step_the_suite_never_implemented PASS 0.25 ms
tests/unit/test_bdd.py test_before_scenario_remembers_the_feature_file_the_test_came_from PASS 0.23 ms
tests/unit/test_bdd.py test_before_scenario_prefers_the_path_the_run_saw PASS 0.20 ms
tests/unit/test_bdd.py test_before_scenario_falls_back_to_the_absolute_path PASS 0.20 ms
tests/unit/test_bdd.py test_scenario_tags_are_deduplicated_across_feature_and_scenario PASS 0.18 ms
tests/unit/test_bdd.py test_a_scenario_with_no_tags_anywhere_records_an_empty_list PASS 0.34 ms
tests/unit/test_bdd.py test_take_scenario_forgets_it_so_the_next_test_cannot_claim_it PASS 0.25 ms
tests/unit/test_bdd.py test_take_scenario_is_none_when_no_scenario_ever_ran PASS 0.23 ms
tests/unit/test_bdd_steps.py test_every_bdd_hook_is_declared_optional PASS 0.43 ms
tests/unit/test_bdd_steps.py test_a_scenarios_steps_arrive_without_anyone_naming_them PASS 426 ms
tests/unit/test_bdd_steps.py test_an_outlines_placeholders_are_shown_filled_in PASS 418 ms
tests/unit/test_bdd_steps.py test_a_gherkin_step_is_badged_as_one PASS 387 ms
tests/unit/test_bdd_steps.py test_the_feature_and_scenario_are_named PASS 396 ms
tests/unit/test_bdd_steps.py test_a_step_keeps_the_arguments_its_parser_pulled_out PASS 452 ms
tests/unit/test_bdd_steps.py test_an_injected_fixture_is_not_shown_as_a_step_argument PASS 396 ms
tests/unit/test_bdd_steps.py test_a_failing_step_is_the_one_that_carries_the_message PASS 386 ms
tests/unit/test_bdd_steps.py test_a_step_after_the_failing_one_is_never_reported_as_run PASS 440 ms
tests/unit/test_bdd_steps.py test_a_scenarios_tags_arrive_as_markers PASS 395 ms
tests/unit/test_bdd_steps.py test_the_internal_example_marker_is_not_shown_as_one PASS 383 ms
tests/unit/test_bdd_steps.py test_the_example_row_is_shown_as_a_parameter PASS 416 ms
tests/unit/test_bdd_steps.py test_a_generated_docstring_is_not_shown_as_a_description PASS 413 ms
tests/unit/test_bundle_io.py test_a_bundle_this_version_wrote_is_read PASS 1.07 ms
tests/unit/test_bundle_io.py test_a_file_that_is_not_json_is_skipped_and_named PASS 0.52 ms
tests/unit/test_bundle_io.py test_a_file_that_is_not_there_is_skipped_rather_than_raising PASS 0.38 ms
tests/unit/test_bundle_io.py test_json_that_is_not_one_of_ours_is_skipped_and_named PASS 0.48 ms
tests/unit/test_bundle_io.py test_json_that_is_not_even_an_object_is_skipped PASS 0.88 ms
tests/unit/test_bundle_io.py test_notes_are_optional PASS 0.55 ms
tests/unit/test_bundle_io.py test_a_bundle_from_the_future_stops_the_merge_rather_than_being_guessed_at PASS 0.60 ms
tests/unit/test_bundle_io.py test_a_version_that_is_not_a_number_is_read_as_the_oldest PASS 2.71 ms
tests/unit/test_bundle_io.py test_a_bundle_with_no_version_at_all_is_still_read PASS 1.01 ms
tests/unit/test_bundle_io.py test_a_bundle_with_no_id_is_named_after_its_own_directory PASS 0.30 ms
tests/unit/test_bundle_io.py test_an_id_that_would_escape_the_report_folder_is_sanitised_on_the_way_in PASS 0.24 ms
tests/unit/test_bundle_io.py test_a_bundle_says_where_its_pictures_are PASS 0.22 ms
tests/unit/test_bundle_io.py test_a_bundle_naming_its_own_asset_folder_is_believed PASS 0.25 ms
tests/unit/test_bundle_io.py test_a_bundle_describes_itself_readably PASS 0.43 ms
tests/unit/test_bundle_io.py test_a_key_this_version_never_heard_of_survives_being_read PASS 0.23 ms
tests/unit/test_bundle_io.py test_a_field_a_bundle_does_not_carry_answers_its_default PASS 0.41 ms
tests/unit/test_bundle_io.py test_a_field_that_exists_nowhere_is_an_attribute_error PASS 0.19 ms
tests/unit/test_bundle_io.py test_a_folder_of_artifacts_is_walked PASS 1.02 ms
tests/unit/test_bundle_io.py test_a_bundle_named_directly_is_taken PASS 0.69 ms
tests/unit/test_bundle_io.py test_the_same_bundle_named_twice_is_read_once PASS 0.86 ms
tests/unit/test_bundle_io.py test_the_walk_yields_the_same_order_twice_running PASS 1.95 ms
tests/unit/test_bundle_io.py test_a_folder_holding_no_bundles_yields_nothing PASS 0.85 ms
tests/unit/test_bundle_io.py test_a_path_that_is_not_there_yields_nothing PASS 0.70 ms
tests/unit/test_cli_commands.py test_a_merge_writes_the_report_it_was_asked_for PASS 214 ms
tests/unit/test_cli_commands.py test_a_merged_build_records_a_status_its_own_archive_loader_can_read PASS 206 ms
tests/unit/test_cli_commands.py test_a_merge_can_be_asked_to_fail_on_a_failing_run PASS 218 ms
tests/unit/test_cli_commands.py test_a_merge_of_a_passing_run_exits_zero_even_with_exit_code PASS 246 ms
tests/unit/test_cli_commands.py test_a_report_path_that_cannot_be_written_is_refused_before_the_merge PASS 108 ms
tests/unit/test_cli_commands.py test_a_merge_that_found_no_bundles_names_where_it_looked PASS 2.64 ms
tests/unit/test_cli_commands.py test_a_dry_run_writes_nothing_but_still_reports PASS 3.09 ms
tests/unit/test_cli_commands.py test_quiet_silences_the_notes PASS 2.92 ms
tests/unit/test_cli_commands.py test_the_summary_counts_collection_records_when_there_are_some PASS 1.93 ms
tests/unit/test_cli_commands.py test_several_collection_records_are_counted_in_the_plural PASS 2.03 ms
tests/unit/test_cli_commands.py test_the_junit_command_writes_only_the_xml PASS 3.16 ms
tests/unit/test_cli_commands.py test_the_junit_command_fails_when_there_is_nothing_to_write PASS 1.25 ms
tests/unit/test_cli_commands.py test_a_junit_dry_run_writes_no_document PASS 2.53 ms
tests/unit/test_cli_commands.py test_inspect_lists_the_bundles_and_writes_nothing PASS 2.39 ms
tests/unit/test_cli_commands.py test_inspect_can_answer_as_json PASS 2.09 ms
tests/unit/test_cli_commands.py test_inspect_fails_when_there_are_no_bundles PASS 1.18 ms
tests/unit/test_cli_validation.py test_a_folder_is_what_the_flag_usually_takes PASS 0.19 ms
tests/unit/test_cli_validation.py test_naming_the_html_file_itself_is_allowed PASS 0.16 ms
tests/unit/test_cli_validation.py test_a_flag_with_nothing_after_it_says_what_it_takes PASS 0.15 ms
tests/unit/test_cli_validation.py test_a_folder_named_after_the_file_it_holds_is_refused PASS 0.15 ms
tests/unit/test_cli_validation.py test_a_folder_that_is_really_a_file_is_refused_before_the_merge_runs PASS 0.61 ms
tests/unit/test_cli_validation.py test_an_html_file_whose_folder_is_a_file_is_refused_too PASS 0.66 ms
tests/unit/test_cli_validation.py test_an_html_file_named_with_no_folder_at_all_is_fine PASS 0.21 ms
tests/unit/test_cli_validation.py test_the_words_the_flag_documents_are_accepted[earliest] PASS 0.21 ms
tests/unit/test_cli_validation.py test_the_words_the_flag_documents_are_accepted[now] PASS 0.17 ms
tests/unit/test_cli_validation.py test_the_words_the_flag_documents_are_accepted[EARLIEST] PASS 0.16 ms
tests/unit/test_cli_validation.py test_the_words_the_flag_documents_are_accepted[ now ] PASS 0.17 ms
tests/unit/test_cli_validation.py test_a_unix_timestamp_is_accepted PASS 1.76 ms
tests/unit/test_cli_validation.py test_a_typo_is_reported_rather_than_promising_a_build PASS 0.17 ms
tests/unit/test_cli_validation.py test_the_module_runs_as_a_command_of_its_own PASS 98 ms
tests/unit/test_cli_validation.py test_the_module_hands_back_the_exit_code_rather_than_raising PASS 97 ms
tests/unit/test_cli_validation.py test_main_returns_the_code_it_would_have_exited_with PASS 1.04 ms
tests/unit/test_cli_validation.py test_a_folder_is_its_own_report_base PASS 0.72 ms
tests/unit/test_cli_validation.py test_an_html_file_reports_the_folder_holding_it PASS 0.19 ms
tests/unit/test_cli_validation.py test_an_html_file_with_no_folder_reports_the_current_directory PASS 0.18 ms
tests/unit/test_cli_validation.py test_a_folder_named_after_a_file_resolves_the_same_way_the_reporter_does PASS 0.16 ms
tests/unit/test_collect_errors.py test_a_collector_that_imported_cleanly_is_not_recorded PASS 0.69 ms
tests/unit/test_collect_errors.py test_the_session_collector_itself_is_not_recorded PASS 0.35 ms
tests/unit/test_collect_errors.py test_a_module_that_failed_to_import_is_recorded_as_an_error PASS 0.26 ms
tests/unit/test_collect_errors.py test_a_module_skipped_at_module_level_is_recorded_as_a_skip PASS 0.31 ms
tests/unit/test_collect_errors.py test_the_same_broken_file_is_recorded_once PASS 0.34 ms
tests/unit/test_collect_errors.py test_two_broken_files_are_both_recorded PASS 0.23 ms
tests/unit/test_collect_errors.py test_worker_records_are_routed_by_kind PASS 0.32 ms
tests/unit/test_collect_errors.py test_a_controller_keeps_one_copy_of_every_workers_collect_error PASS 0.35 ms
tests/unit/test_collect_errors.py test_a_broken_file_sorts_ahead_of_the_run PASS 1.82 ms
tests/unit/test_collect_errors.py test_a_broken_file_is_counted_in_the_totals PASS 1.14 ms
tests/unit/test_collect_errors.py test_a_module_that_will_not_import_reaches_the_report PASS 373 ms
tests/unit/test_collect_errors.py test_the_import_error_itself_is_kept PASS 405 ms
tests/unit/test_collect_errors.py test_a_module_level_skip_reaches_the_report_with_its_reason PASS 415 ms
tests/unit/test_collect_errors.py test_an_interrupted_collection_still_writes_a_report PASS 394 ms
tests/unit/test_collect_errors.py test_a_parallel_run_reports_the_broken_file_once PASS 736 ms
tests/unit/test_coverage.py test_coverage_mode_defaults_to_auto PASS 0.48 ms
tests/unit/test_coverage.py test_coverage_mode_from_ini PASS 0.29 ms
tests/unit/test_coverage.py test_coverage_mode_cli_beats_ini PASS 0.22 ms
tests/unit/test_coverage.py test_coverage_mode_ignores_a_value_it_does_not_know PASS 0.27 ms
tests/unit/test_coverage.py test_coverage_file_from_ini PASS 0.22 ms
tests/unit/test_coverage.py test_coverage_limit_defaults_and_floors_at_zero PASS 0.32 ms
tests/unit/test_coverage.py test_coverage_target_reads_cov_fail_under PASS 0.27 ms
tests/unit/test_coverage.py test_coverage_target_is_none_when_nothing_set_it PASS 0.20 ms
tests/unit/test_coverage.py test_percent_of_calls_an_empty_file_covered PASS 0.22 ms
tests/unit/test_coverage.py test_coverage_grade_bands PASS 0.17 ms
tests/unit/test_coverage.py test_coverage_grade_follows_the_projects_own_target PASS 0.17 ms
tests/unit/test_coverage.py test_coverage_grade_does_not_fail_a_target_it_exactly_meets PASS 0.20 ms
tests/unit/test_coverage.py test_format_lines_collapses_runs PASS 0.26 ms
tests/unit/test_coverage.py test_trim_lines_cuts_at_a_comma_never_mid_range PASS 0.18 ms
tests/unit/test_coverage.py test_trim_lines_leaves_a_short_list_alone PASS 0.20 ms
tests/unit/test_coverage.py test_relative_name_strips_the_checkout_directory PASS 0.24 ms
tests/unit/test_coverage.py test_relative_name_leaves_a_relative_path_alone PASS 0.16 ms
tests/unit/test_coverage.py test_relative_name_keeps_a_file_outside_the_root PASS 0.18 ms
tests/unit/test_coverage.py test_format_percent_drops_a_trailing_zero PASS 0.19 ms
tests/unit/test_coverage.py test_ring_dash_is_the_fraction_of_the_real_circumference PASS 0.29 ms
tests/unit/test_coverage.py test_ring_dash_clamps PASS 0.56 ms
tests/unit/test_coverage.py test_summarize_json_takes_the_total_coverage_py_published PASS 0.67 ms
tests/unit/test_coverage.py test_summarize_json_lists_files_worst_first PASS 0.55 ms
tests/unit/test_coverage.py test_summarize_json_works_out_covered_branches_for_an_older_coverage PASS 0.80 ms
tests/unit/test_coverage.py test_summarize_json_survives_a_report_with_nothing_in_it PASS 0.19 ms
tests/unit/test_coverage.py test_summarize_xml_matches_the_formula_coverage_py_uses PASS 0.38 ms
tests/unit/test_coverage.py test_summarize_xml_reads_the_lines_of_each_file PASS 0.24 ms
tests/unit/test_coverage.py test_build_summary_keeps_the_least_covered_files_when_it_has_to_cut PASS 0.19 ms
tests/unit/test_coverage.py test_build_summary_lists_everything_when_the_limit_is_zero PASS 0.15 ms
tests/unit/test_coverage.py test_has_data_rejects_a_run_that_measured_nothing PASS 0.24 ms
tests/unit/test_coverage.py test_coverage_delta_against_the_previous_build PASS 0.27 ms
tests/unit/test_coverage.py test_coverage_delta_skips_builds_that_measured_nothing PASS 0.20 ms
tests/unit/test_coverage.py test_coverage_delta_is_none_on_a_first_build PASS 0.16 ms
tests/unit/test_coverage.py test_read_coverage_path_sniffs_json PASS 1.03 ms
tests/unit/test_coverage.py test_read_coverage_path_sniffs_xml PASS 0.85 ms
tests/unit/test_coverage.py test_read_coverage_path_returns_none_for_something_that_is_not_coverage PASS 4.95 ms
tests/unit/test_coverage.py test_read_coverage_path_returns_none_for_a_file_that_is_not_there PASS 1.25 ms
tests/unit/test_coverage.py test_read_coverage_path_returns_none_for_broken_json PASS 1.17 ms
tests/unit/test_coverage.py test_discover_coverage_finds_a_report_beside_the_html PASS 0.87 ms
tests/unit/test_coverage.py test_discover_coverage_ignores_a_stale_data_file PASS 1.56 ms
tests/unit/test_coverage.py test_discover_coverage_returns_none_from_an_empty_folder PASS 5.11 ms
tests/unit/test_coverage.py test_collect_coverage_does_nothing_when_it_is_switched_off PASS 4.66 ms
tests/unit/test_coverage.py test_collect_coverage_reads_the_file_it_was_given PASS 3.23 ms
tests/unit/test_coverage.py test_collect_coverage_says_so_when_the_named_file_is_not_coverage PASS 1.75 ms
tests/unit/test_coverage.py test_collect_coverage_finds_nothing_without_complaining PASS 1.00 ms
tests/unit/test_coverage.py test_measured_nothing_notice_names_the_flag_that_was_typed PASS 0.28 ms
tests/unit/test_coverage.py test_measured_nothing_notice_without_a_named_source PASS 0.67 ms
tests/unit/test_coverage.py test_a_run_with_pytest_cov_reports_the_total_the_terminal_printed PASS 433 ms
tests/unit/test_coverage.py test_a_run_with_pytest_cov_fills_in_the_coverage_tab PASS 437 ms
tests/unit/test_coverage.py test_branch_coverage_is_reported_only_when_it_was_measured PASS 920 ms
tests/unit/test_coverage.py test_a_parallel_run_reports_the_combined_coverage PASS 1.21 s
tests/unit/test_coverage.py test_a_second_build_shows_what_moved PASS 854 ms
tests/unit/test_coverage.py test_a_run_without_coverage_says_how_to_get_it PASS 363 ms
tests/unit/test_coverage.py test_a_run_that_measured_nothing_says_so PASS 435 ms
tests/unit/test_coverage.py test_a_run_with_no_coverage_at_all_gets_no_such_notice PASS 412 ms
tests/unit/test_coverage.py test_report_coverage_none_leaves_the_tab_empty PASS 424 ms
tests/unit/test_coverage_rendering.py test_a_build_without_pytest_cov_installed_simply_has_no_target[error0] PASS 0.38 ms
tests/unit/test_coverage_rendering.py test_a_build_without_pytest_cov_installed_simply_has_no_target[error1] PASS 0.19 ms
tests/unit/test_coverage_rendering.py test_a_run_that_measured_nothing_is_not_coloured_as_a_success PASS 0.16 ms
tests/unit/test_coverage_rendering.py test_the_bands_colour_a_percentage_with_no_target_set PASS 0.15 ms
tests/unit/test_coverage_rendering.py test_a_target_the_build_exactly_met_is_not_shown_as_a_failure PASS 0.73 ms
tests/unit/test_coverage_rendering.py test_a_target_replaces_the_bands_rather_than_joining_them PASS 0.17 ms
tests/unit/test_coverage_rendering.py test_a_cobertura_condition_is_read_as_taken_over_total PASS 0.15 ms
tests/unit/test_coverage_rendering.py test_an_attribute_that_was_never_written_is_no_branches_at_all PASS 0.15 ms
tests/unit/test_coverage_rendering.py test_an_attribute_without_the_bracketed_half_is_not_guessed_at PASS 0.14 ms
tests/unit/test_coverage_rendering.py test_a_bracketed_half_that_is_not_two_numbers_is_not_guessed_at PASS 0.15 ms
tests/unit/test_coverage_rendering.py test_a_cobertura_total_that_is_not_a_number_counts_as_none PASS 0.19 ms
tests/unit/test_coverage_rendering.py test_a_live_run_says_it_measured_the_numbers_itself PASS 0.16 ms
tests/unit/test_coverage_rendering.py test_a_file_on_disk_says_when_it_was_written PASS 0.15 ms
tests/unit/test_coverage_rendering.py test_a_file_that_did_not_record_when_it_was_written_still_names_itself PASS 0.21 ms
tests/unit/test_coverage_rendering.py test_a_summary_that_named_no_source_still_says_something PASS 0.16 ms
tests/unit/test_coverage_rendering.py test_the_four_tiles_every_run_gets PASS 0.44 ms
tests/unit/test_coverage_rendering.py test_a_run_without_branch_coverage_gets_no_branch_tiles PASS 0.37 ms
tests/unit/test_coverage_rendering.py test_branch_tiles_appear_once_branch_coverage_was_switched_on PASS 0.34 ms
tests/unit/test_coverage_rendering.py test_a_run_that_asked_for_branches_but_measured_none_gets_no_tile PASS 0.26 ms
tests/unit/test_coverage_rendering.py test_excluded_lines_are_only_mentioned_when_there_were_some PASS 0.33 ms
tests/unit/test_coverage_rendering.py test_a_file_with_no_branches_shows_a_dash_not_a_zero PASS 0.23 ms
tests/unit/test_coverage_rendering.py test_a_file_with_branches_shows_how_many_were_taken PASS 0.30 ms
tests/unit/test_coverage_rendering.py test_each_row_is_graded_against_the_projects_own_target PASS 0.27 ms
tests/unit/test_coverage_rendering.py test_a_file_name_cannot_smuggle_markup_into_the_table PASS 0.20 ms
tests/unit/test_coverage_rendering.py test_a_run_with_no_files_renders_no_rows PASS 0.14 ms
tests/unit/test_coverage_rendering.py test_nothing_is_said_when_the_table_lists_the_whole_run PASS 0.22 ms
tests/unit/test_coverage_rendering.py test_nothing_is_said_when_the_limit_was_switched_off PASS 0.18 ms
tests/unit/test_coverage_rendering.py test_the_note_says_how_much_of_the_run_is_being_listed PASS 0.15 ms
tests/unit/test_coverage_rendering.py test_a_run_exactly_at_the_limit_is_not_called_short PASS 0.14 ms
tests/unit/test_coverage_rendering.py test_a_build_that_moved_up_says_so_with_a_sign PASS 0.15 ms
tests/unit/test_coverage_rendering.py test_a_build_that_moved_down_says_so PASS 0.22 ms
tests/unit/test_coverage_rendering.py test_a_movement_too_small_to_matter_is_called_no_change PASS 0.21 ms
tests/unit/test_coverage_rendering.py test_a_first_build_has_nothing_to_compare_against PASS 0.15 ms
tests/unit/test_coverage_rendering.py test_a_summary_renders_end_to_end_from_the_files_it_was_built_from PASS 0.46 ms
tests/unit/test_coverage_sources.py test_the_running_pytest_cov_session_is_found PASS 0.24 ms
tests/unit/test_coverage_sources.py test_a_run_without_pytest_cov_has_no_live_session PASS 0.17 ms
tests/unit/test_coverage_sources.py test_a_config_with_no_plugin_manager_at_all_has_no_session PASS 0.16 ms
tests/unit/test_coverage_sources.py test_a_plugin_manager_that_raises_costs_the_tab_and_nothing_else PASS 0.18 ms
tests/unit/test_coverage_sources.py test_a_cov_plugin_with_no_controller_yet_has_no_session PASS 0.21 ms
tests/unit/test_coverage_sources.py test_coverage_pys_own_json_is_read_back PASS 0.83 ms
tests/unit/test_coverage_sources.py test_a_session_with_no_data_to_report_is_not_a_failure PASS 0.27 ms
tests/unit/test_coverage_sources.py test_the_temporary_file_is_not_left_behind PASS 0.91 ms
tests/unit/test_coverage_sources.py test_the_temporary_file_is_cleaned_up_even_when_the_report_raises PASS 0.55 ms
tests/unit/test_coverage_sources.py test_a_run_that_wrote_no_html_report_offers_no_link PASS 0.22 ms
tests/unit/test_coverage_sources.py test_a_named_folder_that_was_never_written_offers_no_link PASS 0.60 ms
tests/unit/test_coverage_sources.py test_an_htmlcov_left_over_from_last_week_is_not_linked PASS 0.72 ms
tests/unit/test_coverage_sources.py test_an_htmlcov_written_by_this_run_is_linked PASS 0.69 ms
tests/unit/test_coverage_sources.py test_a_coverage_data_file_is_summarised PASS 84 ms
tests/unit/test_coverage_sources.py test_a_data_file_that_is_not_one_is_not_a_summary PASS 1.23 ms
tests/unit/test_coverage_sources.py test_a_path_that_cannot_be_read_at_all_is_not_coverage PASS 0.48 ms
tests/unit/test_coverage_sources.py test_a_coverage_json_names_itself_as_the_source PASS 0.62 ms
tests/unit/test_coverage_sources.py test_the_live_session_is_used_when_nothing_was_named PASS 0.67 ms
tests/unit/test_coverage_sources.py test_a_named_file_beats_the_live_session PASS 0.70 ms
tests/unit/test_coverage_sources.py test_a_live_session_that_measured_nothing_says_why PASS 1.00 ms
tests/unit/test_coverage_sources.py test_a_run_with_no_coverage_anywhere_says_nothing_at_all PASS 0.52 ms
tests/unit/test_coverage_sources.py test_a_run_with_no_coverage_leaves_the_tab_empty PASS 0.26 ms
tests/unit/test_coverage_sources.py test_the_ring_and_the_tiles_are_filled_from_the_summary PASS 0.54 ms
tests/unit/test_coverage_sources.py test_the_projects_own_target_is_shown_beside_the_ring PASS 0.40 ms
tests/unit/test_coverage_sources.py test_a_build_below_its_target_is_graded_low PASS 0.30 ms
tests/unit/test_coverage_sources.py test_a_build_that_moved_up_says_so_and_is_coloured_for_it PASS 0.33 ms
tests/unit/test_coverage_sources.py test_a_build_that_moved_down_is_coloured_for_that PASS 0.29 ms
tests/unit/test_coverage_sources.py test_a_build_that_held_level_is_neither PASS 0.29 ms
tests/unit/test_coverage_sources.py test_a_first_build_has_no_delta_to_show PASS 0.36 ms
tests/unit/test_coverage_sources.py test_branch_coverage_is_announced_only_when_it_was_measured PASS 0.46 ms
tests/unit/test_durations.py test_a_test_is_timed_by_the_phases_pytest_reported PASS 1.39 s
tests/unit/test_durations.py test_the_sum_of_the_durations_is_the_run PASS 0.23 ms
tests/unit/test_durations.py test_the_build_is_stamped_with_the_start_of_the_run PASS 0.16 ms
tests/unit/test_durations.py test_a_fast_test_is_not_printed_as_no_time_at_all PASS 0.94 ms
tests/unit/test_durations.py test_the_time_column_sorts_on_the_seconds_it_no_longer_prints PASS 0.44 ms
tests/unit/test_environment.py test_the_platform_row_names_the_os_and_not_the_kernel PASS 0.63 ms
tests/unit/test_environment.py test_the_python_row_carries_the_implementation_and_the_word_size PASS 0.26 ms
tests/unit/test_environment.py test_a_serial_run_says_nothing_about_workers PASS 0.37 ms
tests/unit/test_environment.py test_the_workers_that_reported_are_counted PASS 0.30 ms
tests/unit/test_environment.py test_fewer_workers_than_asked_for_is_said_rather_than_smoothed_over PASS 0.24 ms
tests/unit/test_environment.py test_a_controller_that_collected_no_records_still_reports_what_it_asked_for PASS 0.23 ms
tests/unit/test_environment.py test_a_nonsense_numprocesses_is_not_an_error PASS 0.24 ms
tests/unit/test_environment.py test_no_ci_is_an_empty_run_rather_than_a_row PASS 0.25 ms
tests/unit/test_environment.py test_github_actions_is_named_and_linked PASS 0.25 ms
tests/unit/test_environment.py test_the_first_attempt_is_not_pinned PASS 0.27 ms
tests/unit/test_environment.py test_a_github_enterprise_server_is_linked_to_itself PASS 0.24 ms
tests/unit/test_environment.py test_gitlab_is_linked_with_the_url_it_publishes_itself PASS 0.24 ms
tests/unit/test_environment.py test_azure_assembles_the_build_results_page PASS 0.23 ms
tests/unit/test_environment.py test_jenkins_falls_back_to_the_job_url_when_the_root_url_is_unset PASS 0.23 ms
tests/unit/test_environment.py test_a_system_that_only_says_ci_is_still_named PASS 0.35 ms
tests/unit/test_environment.py test_ci_set_to_false_is_not_ci PASS 0.40 ms
tests/unit/test_environment.py test_a_ci_run_that_cannot_be_linked_is_still_named PASS 0.28 ms
tests/unit/test_environment.py test_a_run_carries_its_four_fields_through_a_bundle PASS 0.22 ms
tests/unit/test_environment.py test_the_ci_systems_branch_beats_a_detached_head PASS 0.24 ms
tests/unit/test_environment.py test_a_pull_request_reports_the_branch_and_not_the_merge_ref PASS 15 ms
tests/unit/test_environment.py test_a_folder_that_is_not_a_checkout_reports_nothing PASS 29 ms
tests/unit/test_environment.py test_a_detached_head_is_left_out_rather_than_reported_as_a_branch PASS 0.39 ms
tests/unit/test_environment.py test_git_failing_is_not_the_report_failing PASS 0.29 ms
tests/unit/test_environment.py test_the_installed_packages_read_like_pip_freeze PASS 37 ms
tests/unit/test_environment.py test_the_packages_are_listed_in_a_case_insensitive_order PASS 27 ms
tests/unit/test_environment.py test_an_empty_list_is_no_row_at_all PASS 0.27 ms
tests/unit/test_environment.py test_the_packages_row_counts_them_in_its_label PASS 0.22 ms
tests/unit/test_environment.py test_a_row_without_a_url_is_still_plain_text PASS 0.27 ms
tests/unit/test_environment.py test_a_hostile_scheme_never_becomes_an_href PASS 0.25 ms
tests/unit/test_environment.py test_the_panel_asks_for_no_packages_by_default PASS 28 ms
tests/unit/test_environment.py test_the_flag_adds_the_packages_row PASS 53 ms
tests/unit/test_environment.py test_the_ini_key_adds_the_packages_row PASS 55 ms
tests/unit/test_environment.py test_a_build_info_branch_is_not_argued_with PASS 16 ms
tests/unit/test_environment.py test_the_ci_rows_are_there_when_the_run_was_a_ci_run PASS 28 ms
tests/unit/test_environment.py test_the_pipeline_row_carries_its_own_url_to_link_to PASS 31 ms
tests/unit/test_error_actions.py test_the_row_carries_the_whole_error_not_the_preview PASS 2.10 ms
tests/unit/test_error_actions.py test_the_row_names_the_test_the_panel_will_be_opened_for PASS 1.47 ms
tests/unit/test_error_actions.py test_every_failing_row_carries_its_own_error PASS 2.89 ms
tests/unit/test_error_actions.py test_the_row_carries_the_command_that_runs_that_test_again PASS 2.88 ms
tests/unit/test_error_actions.py test_the_command_comes_from_the_node_id_not_from_the_two_names_on_show PASS 1.47 ms
tests/unit/test_error_actions.py test_a_parametrised_test_is_quoted_so_a_shell_cannot_read_its_brackets PASS 1.54 ms
tests/unit/test_error_actions.py test_a_row_with_no_node_id_offers_no_command PASS 1.52 ms
tests/unit/test_error_actions.py test_a_passing_row_offers_nothing PASS 1.10 ms
tests/unit/test_error_actions.py test_a_message_of_pure_whitespace_counts_as_nothing_to_copy PASS 0.97 ms
tests/unit/test_error_actions.py test_a_skipped_row_keeps_its_reason PASS 1.72 ms
tests/unit/test_error_actions.py test_a_message_that_fits_is_copyable_but_has_nothing_to_expand_to PASS 1.39 ms
tests/unit/test_error_actions.py test_a_message_that_was_cut_offers_the_panel PASS 1.28 ms
tests/unit/test_error_actions.py test_a_message_holding_quotes_cannot_break_out_of_the_attribute PASS 1.20 ms
tests/unit/test_error_actions.py test_a_message_shaped_like_a_placeholder_is_not_substituted PASS 1.14 ms
tests/unit/test_error_actions.py test_the_controls_add_nothing_at_all_to_the_cell_the_table_exports PASS 1.13 ms
tests/unit/test_error_actions.py test_each_button_names_which_of_the_three_things_it_copied PASS 0.89 ms
tests/unit/test_error_actions.py test_a_browser_that_refused_the_clipboard_says_what_to_press_instead PASS 0.68 ms
tests/unit/test_error_actions.py test_the_panel_shows_what_went_onto_the_clipboard PASS 0.67 ms
tests/unit/test_error_actions.py test_more_than_fits_fades_out_rather_than_stopping_flat PASS 0.75 ms
tests/unit/test_error_actions.py test_the_traceback_is_not_read_out_over_the_news PASS 0.32 ms
tests/unit/test_error_actions.py test_a_failed_copy_shows_no_content_at_all PASS 0.66 ms
tests/unit/test_error_actions.py test_the_message_takes_itself_away_and_a_second_copy_restarts_it PASS 0.46 ms
tests/unit/test_error_actions.py test_the_message_is_announced_as_well_as_drawn PASS 0.42 ms
tests/unit/test_error_actions.py test_the_message_cannot_be_clicked_and_cannot_be_clicked_through PASS 0.59 ms
tests/unit/test_error_actions.py test_the_row_rests_as_one_button PASS 1.80 ms
tests/unit/test_error_actions.py test_the_four_are_in_the_markup_the_whole_time PASS 0.81 ms
tests/unit/test_error_actions.py test_the_strip_travels_to_the_next_line_rather_than_reappearing_on_it PASS 0.71 ms
tests/unit/test_error_actions.py test_the_widths_are_taken_in_one_step_so_the_line_only_wraps_once PASS 0.50 ms
tests/unit/test_error_actions.py test_they_come_out_one_after_another PASS 0.40 ms
tests/unit/test_error_actions.py test_only_one_row_is_ever_open PASS 1.07 ms
tests/unit/test_error_actions.py test_the_toggle_says_whether_it_is_open PASS 0.67 ms
tests/unit/test_error_actions.py test_the_tail_of_a_cut_message_is_split_off_to_be_faded PASS 1.38 ms
tests/unit/test_error_actions.py test_a_message_that_fits_fades_nowhere PASS 1.09 ms
tests/unit/test_error_actions.py test_the_exports_still_carry_a_marker_the_fade_cannot_travel_as PASS 1.35 ms
tests/unit/test_error_actions.py test_the_fade_and_the_expand_button_agree_on_what_was_cut PASS 2.64 ms
tests/unit/test_error_actions.py test_the_gradient_names_its_colour_rather_than_saying_currentcolor PASS 0.80 ms
tests/unit/test_escaping.py test_a_test_name_holding_markup_is_written_as_text PASS 0.70 ms
tests/unit/test_escaping.py test_a_failure_message_holding_a_repr_is_written_as_text PASS 0.61 ms
tests/unit/test_escaping.py test_a_quote_in_a_name_cannot_end_an_attribute PASS 0.56 ms
tests/unit/test_escaping.py test_a_suite_name_holding_markup_is_written_as_text PASS 0.54 ms
tests/unit/test_escaping.py test_text_shaped_like_a_placeholder_is_not_substituted PASS 0.58 ms
tests/unit/test_escaping.py test_a_long_message_holding_markup_is_escaped_in_the_modal PASS 0.74 ms
tests/unit/test_escaping.py test_the_panel_is_offered_on_the_raw_length_not_the_escaped_one PASS 0.70 ms
tests/unit/test_escaping.py test_a_screenshot_caption_holding_markup_is_written_as_text PASS 1.03 ms
tests/unit/test_escaping.py test_js_literal_renders_a_list_of_names PASS 0.21 ms
tests/unit/test_escaping.py test_js_literal_quotes_an_apostrophe_rather_than_ending_the_array PASS 0.17 ms
tests/unit/test_escaping.py test_js_literal_keeps_a_name_from_closing_the_script_tag PASS 0.23 ms
tests/unit/test_escaping.py test_js_literal_defuses_the_template_placeholder_syntax PASS 0.20 ms
tests/unit/test_escaping.py test_the_chart_labels_survive_a_quote_in_a_suite_name PASS 107 ms
tests/unit/test_escaping.py test_every_row_survives_a_name_that_looks_like_a_tag PASS 414 ms
tests/unit/test_escaping.py test_a_test_name_never_becomes_script_the_page_runs PASS 414 ms
tests/unit/test_escaping.py test_a_name_is_shown_exactly_as_pytest_named_it PASS 417 ms
tests/unit/test_escaping.py test_a_title_holding_markup_is_shown_as_text PASS 425 ms
tests/unit/test_escaping.py test_the_json_report_keeps_the_text_unescaped PASS 393 ms
tests/unit/test_icons.py test_every_icon_the_report_asks_for_is_shipped_as_an_svg PASS 2.94 ms
tests/unit/test_icons.py test_every_icon_publishes_the_measurements_its_box_is_built_from PASS 2.42 ms
tests/unit/test_icons.py test_an_icon_takes_its_size_from_the_text_around_it PASS 0.31 ms
tests/unit/test_icons.py test_icons_are_inlined_rather_than_fetched PASS 0.25 ms
tests/unit/test_icons.py test_template_carries_the_icons_and_no_font_awesome_request PASS 30 ms
tests/unit/test_icons.py test_every_icon_takes_its_colour_from_the_text_around_it PASS 0.22 ms
tests/unit/test_junit.py test_the_xpass_mode_accepts_pass_fail_and_skip PASS 0.27 ms
tests/unit/test_junit.py test_the_xpass_mode_refuses_anything_else PASS 0.22 ms
tests/unit/test_junit.py test_a_passing_test_is_a_bare_testcase PASS 0.53 ms
tests/unit/test_junit.py test_a_failure_carries_the_first_line_as_the_message_and_the_body_as_text PASS 0.26 ms
tests/unit/test_junit.py test_a_setup_error_says_so_and_a_teardown_error_says_so PASS 0.31 ms
tests/unit/test_junit.py test_a_skip_reports_the_reason_not_the_tuple_repr PASS 0.26 ms
tests/unit/test_junit.py test_an_xfail_is_a_skipped_with_the_pytest_xfail_type_and_an_empty_body PASS 0.38 ms
tests/unit/test_junit.py test_an_xpass_is_a_passing_testcase_by_default_and_a_failure_on_request PASS 0.47 ms
tests/unit/test_junit.py test_a_collection_error_keeps_a_dotted_classname PASS 0.27 ms
tests/unit/test_junit.py test_a_collection_skip_says_the_module_was_skipped PASS 0.25 ms
tests/unit/test_junit.py test_an_unrecognised_status_becomes_an_error_and_is_reported PASS 0.26 ms
tests/unit/test_junit.py test_the_counts_match_the_elements PASS 0.33 ms
tests/unit/test_junit.py test_time_comes_from_phases_not_from_duration PASS 0.26 ms
tests/unit/test_junit.py test_a_rerun_is_one_testcase_with_the_count_in_system_out PASS 0.27 ms
tests/unit/test_junit.py test_control_characters_do_not_break_the_document PASS 0.44 ms
tests/unit/test_junit.py test_two_records_that_mangle_alike_get_distinct_names PASS 0.43 ms
tests/unit/test_junit.py test_attachment_lines_are_relative_to_the_xml PASS 1.41 ms
tests/unit/test_junit.py test_stderr_sections_go_to_system_err_and_there_is_one_of_each PASS 0.30 ms
tests/unit/test_junit.py test_a_plain_run_writes_a_junit_file PASS 768 ms
tests/unit/test_junit.py test_an_xdist_run_writes_one_junit_file PASS 730 ms
tests/unit/test_junit.py test_a_shard_run_refuses_to_write_one PASS 275 ms
tests/unit/test_junit.py test_a_run_that_collected_nothing_still_writes_a_valid_document PASS 243 ms
tests/unit/test_junit.py test_a_mistyped_junit_path_does_not_cost_the_report PASS 401 ms
tests/unit/test_last_branches.py test_a_first_build_has_no_worst_suite_to_name PASS 0.42 ms
tests/unit/test_last_branches.py test_the_suite_that_failed_most_often_is_the_one_named PASS 0.32 ms
tests/unit/test_last_branches.py test_a_suite_that_also_passed_counts_both_halves_as_its_total PASS 0.19 ms
tests/unit/test_last_branches.py test_a_suite_that_has_only_ever_failed_totals_its_failures PASS 0.17 ms
tests/unit/test_last_branches.py test_a_plugin_is_named_and_versioned PASS 0.19 ms
tests/unit/test_last_branches.py test_a_distribution_using_the_newer_attribute_name_is_read PASS 0.16 ms
tests/unit/test_last_branches.py test_a_distribution_that_will_not_say_what_it_is_called_is_skipped PASS 0.57 ms
tests/unit/test_last_branches.py test_a_plugin_with_no_version_is_still_named PASS 0.24 ms
tests/unit/test_last_branches.py test_the_same_plugin_listed_twice_is_named_once PASS 0.20 ms
tests/unit/test_last_branches.py test_the_list_is_sorted_so_the_row_reads_the_same_every_run PASS 0.24 ms
tests/unit/test_last_branches.py test_a_run_with_no_plugins_at_all_names_none PASS 0.27 ms
tests/unit/test_last_branches.py test_a_signature_inspect_cannot_follow_costs_the_title_not_the_run PASS 0.46 ms
tests/unit/test_last_branches.py test_a_signature_that_binds_fills_the_placeholder_in PASS 0.27 ms
tests/unit/test_last_branches.py test_a_receiver_is_not_offered_as_a_placeholder_value PASS 0.32 ms
tests/unit/test_last_branches.py test_the_attachment_buffer_recovers_from_the_wrong_type PASS 0.23 ms
tests/unit/test_last_branches.py test_an_attachment_still_lands_after_the_buffer_was_replaced PASS 0.19 ms
tests/unit/test_last_branches.py test_an_exception_named_on_the_last_line_still_wins PASS 0.18 ms
tests/unit/test_last_branches.py test_the_first_plain_name_is_kept_when_no_exception_is_ever_named PASS 0.17 ms
tests/unit/test_logs.py test_every_phase_of_a_test_reaches_the_report PASS 386 ms
tests/unit/test_logs.py test_a_test_that_captured_nothing_has_no_payload PASS 394 ms
tests/unit/test_logs.py test_the_row_counts_the_lines_it_can_open PASS 400 ms
tests/unit/test_logs.py test_failed_mode_keeps_only_the_failures PASS 397 ms
tests/unit/test_logs.py test_none_mode_keeps_nothing PASS 372 ms
tests/unit/test_logs.py test_output_is_escaped_rather_than_rendered PASS 353 ms
tests/unit/test_logs.py test_a_chatty_test_is_trimmed_to_the_limit PASS 359 ms
tests/unit/test_logs.py test_the_limit_can_be_lifted PASS 388 ms
tests/unit/test_logs.py test_a_retried_test_shows_the_attempt_that_was_reported PASS 396 ms
tests/unit/test_logs.py test_the_report_says_when_capture_is_switched_off PASS 387 ms
tests/unit/test_logs.py test_no_notice_when_everything_is_being_captured PASS 381 ms
tests/unit/test_markers.py test_a_module_level_pytestmark_is_not_missed PASS 374 ms
tests/unit/test_markers.py test_a_marker_on_the_class_is_not_missed PASS 369 ms
tests/unit/test_markers.py test_a_marker_added_while_the_test_ran_is_not_missed PASS 364 ms
tests/unit/test_markers.py test_a_marker_says_where_it_was_written PASS 379 ms
tests/unit/test_markers.py test_the_same_marker_written_twice_is_said_once PASS 367 ms
tests/unit/test_markers.py test_the_same_marker_carrying_different_values_is_said_each_time PASS 368 ms
tests/unit/test_markers.py test_pytests_own_markers_are_told_apart_from_everyone_elses PASS 382 ms
tests/unit/test_markers.py test_a_parametrize_marker_shows_its_names_not_every_row PASS 426 ms
tests/unit/test_markers.py test_a_skipif_condition_is_not_shown_as_the_bool_it_became PASS 380 ms
tests/unit/test_markers.py test_an_exception_class_in_a_marker_is_named_not_repred PASS 408 ms
tests/unit/test_markers.py test_the_parameters_are_this_cases_own_row PASS 366 ms
tests/unit/test_markers.py test_the_fixtures_are_the_ones_the_test_asked_for PASS 382 ms
tests/unit/test_markers.py test_a_usefixtures_marker_counts_as_asking PASS 362 ms
tests/unit/test_markers.py test_a_parametrized_argument_is_a_parameter_rather_than_a_fixture PASS 383 ms
tests/unit/test_markers.py test_the_docstring_is_kept_as_one_paragraph PASS 371 ms
tests/unit/test_markers.py test_a_class_docstring_is_not_repeated_under_every_method PASS 378 ms
tests/unit/test_markers_edge.py test_an_exception_class_is_named_rather_than_repred PASS 0.38 ms
tests/unit/test_markers_edge.py test_a_string_loses_the_quotes_that_said_nothing PASS 0.24 ms
tests/unit/test_markers_edge.py test_everything_else_keeps_the_repr_that_cannot_mislead PASS 0.16 ms
tests/unit/test_markers_edge.py test_a_repr_that_raises_does_not_take_the_report_down PASS 0.24 ms
tests/unit/test_markers_edge.py test_a_long_value_is_cut_to_something_a_badge_can_hold PASS 0.16 ms
tests/unit/test_markers_edge.py test_a_value_exactly_at_the_limit_is_left_alone PASS 0.15 ms
tests/unit/test_markers_edge.py test_a_marker_is_written_the_way_the_file_wrote_it PASS 0.22 ms
tests/unit/test_markers_edge.py test_a_marker_with_nothing_to_say_is_just_its_name PASS 0.47 ms
tests/unit/test_markers_edge.py test_a_parametrize_marker_shows_only_its_names PASS 0.16 ms
tests/unit/test_markers_edge.py test_a_skipif_shows_the_reason_not_the_bool_it_became PASS 0.15 ms
tests/unit/test_markers_edge.py test_a_skipif_written_with_a_string_condition_keeps_it PASS 0.15 ms
tests/unit/test_markers_edge.py test_pytests_own_markers_are_told_apart_from_everyone_elses PASS 0.15 ms
tests/unit/test_markers_edge.py test_a_marker_says_which_scope_it_was_written_at PASS 0.17 ms
tests/unit/test_markers_edge.py test_an_unfamiliar_collector_is_named_after_itself PASS 0.18 ms
tests/unit/test_markers_edge.py test_the_same_marker_from_two_levels_is_said_once PASS 0.21 ms
tests/unit/test_markers_edge.py test_two_markers_saying_different_things_both_survive PASS 0.24 ms
tests/unit/test_markers_edge.py test_a_marker_another_plugin_applied_as_plumbing_is_hidden PASS 0.20 ms
tests/unit/test_markers_edge.py test_an_item_too_old_to_walk_falls_back_to_its_own_markers PASS 0.20 ms
tests/unit/test_markers_edge.py test_a_walk_that_raises_falls_back_rather_than_failing_the_test PASS 0.15 ms
tests/unit/test_markers_edge.py test_the_pair_is_node_first_so_nobody_asks_a_function_for_args PASS 0.17 ms
tests/unit/test_markers_edge.py test_a_test_that_was_not_parametrized_has_no_parameters PASS 0.18 ms
tests/unit/test_markers_edge.py test_the_parameters_are_this_cases_own_row PASS 0.21 ms
tests/unit/test_markers_edge.py test_a_gherkin_example_row_is_unwrapped_into_its_own_values PASS 0.20 ms
tests/unit/test_markers_edge.py test_a_bdd_parameter_that_is_not_a_mapping_is_left_as_it_is PASS 0.16 ms
tests/unit/test_markers_edge.py test_a_callspec_with_no_params_at_all_yields_nothing PASS 0.16 ms
tests/unit/test_markers_edge.py test_the_fixtures_are_the_ones_the_test_named_in_order PASS 0.17 ms
tests/unit/test_markers_edge.py test_the_fixtures_every_test_gets_anyway_are_not_listed PASS 0.15 ms
tests/unit/test_markers_edge.py test_a_methods_receiver_is_not_a_fixture PASS 0.19 ms
tests/unit/test_markers_edge.py test_a_usefixtures_marker_counts_as_asking PASS 0.16 ms
tests/unit/test_markers_edge.py test_a_parametrized_argument_is_shown_as_a_parameter_not_a_fixture PASS 0.15 ms
tests/unit/test_markers_edge.py test_a_private_argument_is_not_offered_as_a_fixture PASS 0.20 ms
tests/unit/test_markers_edge.py test_the_same_fixture_asked_for_twice_is_listed_once PASS 0.20 ms
tests/unit/test_markers_edge.py test_an_item_with_no_function_asks_for_nothing PASS 0.21 ms
tests/unit/test_markers_edge.py test_a_function_with_no_code_object_asks_for_nothing PASS 0.24 ms
tests/unit/test_markers_edge.py test_the_docstring_is_collapsed_to_one_paragraph PASS 0.16 ms
tests/unit/test_markers_edge.py test_a_test_with_no_docstring_says_nothing PASS 0.18 ms
tests/unit/test_markers_edge.py test_a_long_docstring_is_cut PASS 0.17 ms
tests/unit/test_markers_edge.py test_an_item_that_is_not_a_python_function_has_no_docstring PASS 0.16 ms
tests/unit/test_markers_edge.py test_describe_answers_every_question_at_once PASS 0.18 ms
tests/unit/test_markers_edge.py test_an_item_that_will_not_answer_is_still_not_missing_from_the_report PASS 0.24 ms
tests/unit/test_merge_cli.py test_html_report_must_not_be_a_path_that_merely_contains_html PASS 2.44 ms
tests/unit/test_merge_cli.py test_an_html_file_named_outright_is_still_accepted PASS 112 ms
tests/unit/test_merge_cli.py test_no_bundles_found_exits_two_and_says_where_it_looked PASS 1.52 ms
tests/unit/test_merge_cli.py test_a_bad_archive_count_is_reported_against_the_merge_flag PASS 1.78 ms
tests/unit/test_merge_cli.py test_two_bundles_with_the_same_id_keep_the_newer_one PASS 108 ms
tests/unit/test_merge_cli.py test_inspect_lists_every_bundle_without_writing_anything PASS 2.09 ms
tests/unit/test_merge_cli.py test_inspect_answers_the_same_totals_as_json PASS 1.85 ms
tests/unit/test_merge_cli.py test_dry_run_writes_nothing_and_prints_the_summary PASS 1.97 ms
tests/unit/test_merge_cli.py test_the_merge_summary_does_not_name_a_report_it_did_not_write PASS 2.02 ms
tests/unit/test_merge_cli.py test_merging_into_the_shard_directorys_parent_keeps_the_shard_screenshots PASS 104 ms
tests/unit/test_merge_cli.py test_the_merge_never_opens_a_browser_by_default PASS 117 ms
tests/unit/test_merge_cli.py test_strict_exits_one_but_still_writes_the_report PASS 107 ms
tests/unit/test_merge_cli.py test_exit_code_reflects_failures_only_when_asked PASS 221 ms
tests/unit/test_merge_cli.py test_an_unwritable_junit_xml_exits_one_from_merge_but_two_from_junit PASS 108 ms
tests/unit/test_merge_cli.py test_a_folded_duplicates_attachment_names_the_shard_that_took_it PASS 3.49 ms
tests/unit/test_merge_cli.py test_the_junit_subcommand_writes_no_report PASS 2.24 ms
tests/unit/test_merge_cli.py test_the_command_merges_bundles_in_its_own_process PASS 225 ms
tests/unit/test_merge_helpers.py test_without_a_token_every_bundle_in_the_folder_is_merged PASS 0.53 ms
tests/unit/test_merge_helpers.py test_a_leg_with_a_token_keeps_only_the_bundles_carrying_it PASS 0.19 ms
tests/unit/test_merge_helpers.py test_a_bundle_with_no_token_is_put_aside_rather_than_merged PASS 0.18 ms
tests/unit/test_merge_helpers.py test_a_folder_holding_nothing_but_another_runs_leftovers_merges_nothing PASS 0.17 ms
tests/unit/test_merge_helpers.py test_every_merged_bundle_is_named_with_what_it_contributed PASS 0.21 ms
tests/unit/test_merge_helpers.py test_one_test_is_counted_in_the_singular PASS 0.19 ms
tests/unit/test_merge_helpers.py test_a_collection_error_is_not_counted_as_a_test PASS 0.32 ms
tests/unit/test_merge_helpers.py test_a_bundle_that_never_recorded_when_it_finished_says_so PASS 0.22 ms
tests/unit/test_merge_helpers.py test_nothing_merged_is_nothing_to_say PASS 0.18 ms
tests/unit/test_merge_helpers.py test_coverage_switched_off_is_not_read_at_all PASS 0.20 ms
tests/unit/test_merge_helpers.py test_a_single_shard_that_measured_coverage_reports_it_plainly PASS 0.17 ms
tests/unit/test_merge_helpers.py test_one_shard_of_several_measuring_coverage_says_what_it_covers PASS 0.17 ms
tests/unit/test_merge_helpers.py test_several_shards_measuring_coverage_are_not_reconciled_by_guessing PASS 0.17 ms
tests/unit/test_merge_helpers.py test_no_shard_measuring_coverage_says_how_to_get_some PASS 0.17 ms
tests/unit/test_merge_helpers.py test_a_named_coverage_file_is_read_in_preference_to_the_shards PASS 0.92 ms
tests/unit/test_merge_helpers.py test_a_named_coverage_file_that_is_not_coverage_says_which_file PASS 2.22 ms
tests/unit/test_merge_helpers.py test_coverage_data_naming_nothing_readable_says_so PASS 0.75 ms
tests/unit/test_merge_helpers.py test_a_folder_is_searched_for_the_data_files_inside_it PASS 0.83 ms
tests/unit/test_merge_helpers.py test_a_file_named_directly_is_taken_as_it_is PASS 0.91 ms
tests/unit/test_merge_helpers.py test_a_path_that_is_not_there_contributes_nothing PASS 0.53 ms
tests/unit/test_merge_helpers.py test_folders_and_files_can_be_named_together PASS 0.63 ms
tests/unit/test_merge_helpers.py test_build_info_is_split_the_way_the_pytest_flag_splits_it PASS 0.16 ms
tests/unit/test_merge_helpers.py test_the_spacing_somebody_typed_is_not_kept PASS 0.15 ms
tests/unit/test_merge_helpers.py test_a_value_holding_an_equals_sign_survives_intact PASS 0.15 ms
tests/unit/test_merge_helpers.py test_an_entry_with_no_value_is_still_a_row PASS 0.15 ms
tests/unit/test_merge_helpers.py test_blank_entries_are_dropped PASS 0.15 ms
tests/unit/test_merge_helpers.py test_shards_that_all_captured_the_same_way_say_it_once PASS 0.83 ms
tests/unit/test_merge_helpers.py test_shards_that_captured_differently_are_named_one_by_one PASS 0.27 ms
tests/unit/test_merge_helpers.py test_a_matrix_where_every_shard_captured_normally_says_nothing PASS 0.15 ms
tests/unit/test_merge_identity.py test_a_windows_runners_backslashes_become_the_same_id PASS 0.19 ms
tests/unit/test_merge_identity.py test_a_doubled_separator_is_collapsed PASS 0.16 ms
tests/unit/test_merge_identity.py test_a_leading_dot_slash_is_dropped PASS 0.23 ms
tests/unit/test_merge_identity.py test_repeated_leading_dot_slashes_are_all_dropped PASS 0.20 ms
tests/unit/test_merge_identity.py test_a_named_prefix_is_stripped PASS 0.16 ms
tests/unit/test_merge_identity.py test_a_prefix_is_typed_the_way_the_path_reads PASS 0.16 ms
tests/unit/test_merge_identity.py test_a_prefix_that_does_not_match_leaves_the_id_alone PASS 0.16 ms
tests/unit/test_merge_identity.py test_a_blank_prefix_is_skipped_rather_than_matching_everything PASS 0.17 ms
tests/unit/test_merge_identity.py test_a_prefix_that_swallows_the_whole_id_is_refused PASS 0.18 ms
tests/unit/test_merge_identity.py test_several_prefixes_are_tried_in_turn PASS 0.16 ms
tests/unit/test_merge_identity.py test_an_id_that_is_nothing_at_all_stays_nothing PASS 0.26 ms
tests/unit/test_merge_identity.py test_the_tenth_shard_is_not_ordered_second PASS 0.27 ms
tests/unit/test_merge_identity.py test_the_order_does_not_depend_on_the_order_they_were_downloaded PASS 0.20 ms
tests/unit/test_merge_identity.py test_a_retried_leg_whose_artifact_landed_twice_keeps_the_later_run PASS 0.20 ms
tests/unit/test_merge_identity.py test_a_duplicate_that_finished_earlier_does_not_win PASS 0.22 ms
tests/unit/test_merge_identity.py test_every_bundle_is_told_where_it_sits_in_the_order PASS 0.24 ms
tests/unit/test_merge_identity.py test_ordering_nothing_yields_nothing PASS 0.32 ms
tests/unit/test_merge_identity.py test_the_earliest_shard_start_is_the_default PASS 0.25 ms
tests/unit/test_merge_identity.py test_now_stamps_the_moment_the_merge_ran PASS 0.19 ms
tests/unit/test_merge_identity.py test_a_unix_timestamp_is_taken_as_it_is PASS 0.18 ms
tests/unit/test_merge_identity.py test_a_typo_stops_the_merge_rather_than_stamping_something_wrong PASS 0.26 ms
tests/unit/test_merge_identity.py test_the_panel_names_every_shards_own_machine PASS 0.45 ms
tests/unit/test_merge_identity.py test_the_panel_counts_the_shards_it_was_built_from PASS 0.31 ms
tests/unit/test_merge_identity.py test_one_shard_is_counted_in_the_singular PASS 0.37 ms
tests/unit/test_merge_identity.py test_the_merge_flag_names_the_environment_when_it_was_given PASS 0.46 ms
tests/unit/test_merge_identity.py test_the_shards_own_environment_is_used_when_the_flag_was_not PASS 0.37 ms
tests/unit/test_merge_identity.py test_shards_that_captured_output_the_same_way_get_one_row PASS 0.27 ms
tests/unit/test_merge_identity.py test_a_matrix_where_one_leg_ran_with_s_answers_for_each_leg PASS 0.31 ms
tests/unit/test_merge_identity.py test_the_merge_flags_build_info_wins_over_the_shards PASS 0.29 ms
tests/unit/test_merge_identity.py test_build_info_the_flag_did_not_mention_still_comes_from_the_shards PASS 0.28 ms
tests/unit/test_merge_identity.py test_a_matrix_that_agrees_about_its_build_says_it_once PASS 0.33 ms
tests/unit/test_merge_identity.py test_a_matrix_that_names_two_pipelines_links_neither PASS 0.22 ms
tests/unit/test_merge_identity.py test_legs_that_ran_different_commits_both_get_named PASS 0.20 ms
tests/unit/test_merge_identity.py test_bundles_written_before_any_of_this_existed_still_merge PASS 0.18 ms
tests/unit/test_merge_identity.py test_one_environment_is_described_once_rather_than_per_shard PASS 0.19 ms
tests/unit/test_merge_identity.py test_legs_with_different_packages_are_listed_separately PASS 0.24 ms
tests/unit/test_merge_identity.py test_a_shard_row_prefers_the_os_it_named_over_the_kernel PASS 0.20 ms
tests/unit/test_merge_identity.py test_an_older_shard_row_still_names_its_kernel PASS 0.17 ms
tests/unit/test_merge_identity.py test_a_shard_row_says_how_many_workers_split_it PASS 0.21 ms
tests/unit/test_merge_identity.py test_a_serial_shard_row_says_nothing_about_workers PASS 0.25 ms
tests/unit/test_merge_identity.py test_a_shards_own_build_info_still_beats_what_was_detected PASS 0.25 ms
tests/unit/test_merge_identity.py test_the_packages_are_the_last_thing_on_the_panel PASS 0.28 ms
tests/unit/test_merge_into_leg.py test_every_bundle_beside_the_leg_is_folded_in PASS 1.90 ms
tests/unit/test_merge_into_leg.py test_the_legs_own_records_are_replaced_rather_than_added_to PASS 1.34 ms
tests/unit/test_merge_into_leg.py test_the_reporter_is_handed_the_matrixs_clock PASS 1.04 ms
tests/unit/test_merge_into_leg.py test_the_environment_panel_is_filled_from_the_shards PASS 5.03 ms
tests/unit/test_merge_into_leg.py test_the_junit_options_describe_the_matrix_not_this_leg PASS 1.65 ms
tests/unit/test_merge_into_leg.py test_a_folder_with_no_bundles_merges_nothing PASS 0.64 ms
tests/unit/test_merge_into_leg.py test_every_merged_bundle_is_named_on_stderr PASS 1.35 ms
tests/unit/test_merge_into_leg.py test_a_leg_with_a_token_merges_only_this_runs_bundles PASS 1.53 ms
tests/unit/test_merge_into_leg.py test_the_bundles_left_behind_are_named_rather_than_dropped_in_silence PASS 1.63 ms
tests/unit/test_merge_into_leg.py test_a_bundle_with_no_token_is_put_aside_by_a_leg_that_has_one PASS 1.71 ms
tests/unit/test_merge_into_leg.py test_a_folder_holding_only_another_runs_bundles_merges_nothing PASS 1.17 ms
tests/unit/test_merge_into_leg.py test_a_leg_without_a_token_merges_everything_as_it_always_has PASS 1.48 ms
tests/unit/test_merge_into_leg.py test_one_bundle_left_behind_is_reported_in_the_singular PASS 1.53 ms
tests/unit/test_merge_into_leg.py test_a_file_that_is_not_a_bundle_does_not_stop_the_merge PASS 1.40 ms
tests/unit/test_merge_into_leg.py test_a_folder_of_only_unreadable_files_says_why_it_merged_nothing PASS 0.99 ms
tests/unit/test_mvc_pages.py test_archive_body PASS 1.57 ms
tests/unit/test_mvc_pages.py test_archive_row PASS 0.45 ms
tests/unit/test_mvc_pages.py test_floating_error PASS 0.46 ms
tests/unit/test_mvc_pages.py test_floating_error_offers_no_expand_when_nothing_was_cut PASS 0.51 ms
tests/unit/test_mvc_pages.py test_screenshot_details PASS 0.45 ms
tests/unit/test_mvc_pages.py test_screenshot_details_without_an_error PASS 0.47 ms
tests/unit/test_mvc_pages.py test_suite_row PASS 0.40 ms
tests/unit/test_mvc_pages.py test_test_row PASS 1.05 ms
tests/unit/test_mvc_pages.py test_test_row_without_logs_says_so PASS 0.62 ms
tests/unit/test_mvc_pages.py test_test_shot PASS 0.45 ms
tests/unit/test_mvc_pages.py test_test_log_holds_every_section PASS 0.50 ms
tests/unit/test_mvc_pages.py test_attachment_item PASS 0.47 ms
tests/unit/test_mvc_pages.py test_attachment_item_without_a_status_leaves_the_pill_empty PASS 0.44 ms
tests/unit/test_mvc_pages.py test_attachment_part PASS 0.38 ms
tests/unit/test_mvc_pages.py test_attachment_meta PASS 0.41 ms
tests/unit/test_mvc_pages.py test_attachment_body_holds_its_meta_and_every_part PASS 0.55 ms
tests/unit/test_mvc_pages.py test_env_row PASS 0.29 ms
tests/unit/test_mvc_pages.py test_coverage_row PASS 0.39 ms
tests/unit/test_mvc_pages.py test_coverage_row_for_a_file_with_no_branches PASS 0.33 ms
tests/unit/test_mvc_pages.py test_coverage_tile PASS 0.29 ms
tests/unit/test_mvc_pages.py test_coverage_chip PASS 0.28 ms
tests/unit/test_mvc_pages.py test_every_routed_hash_lands_on_a_real_tab PASS 27 ms
tests/unit/test_mvc_pages.py test_the_api_logs_tab_is_reachable_by_both_of_its_names PASS 29 ms
tests/unit/test_mvc_pages.py test_both_footers_name_the_version_that_drew_the_page PASS 26 ms
tests/unit/test_mvc_pages.py test_template PASS 39 ms
tests/unit/test_mvc_pages.py test_every_component_fills_every_placeholder_it_declares PASS 2.30 ms
tests/unit/test_mvc_pages.py test_every_component_template_has_a_class_and_the_other_way_round PASS 0.24 ms
tests/unit/test_offline.py test_the_report_fetches_nothing_to_draw_itself PASS 109 ms
tests/unit/test_offline.py test_the_templates_name_no_cdn PASS 4.13 ms
tests/unit/test_offline.py test_every_library_the_page_loads_is_shipped_with_it PASS 103 ms
tests/unit/test_offline.py test_fancybox_is_not_redistributed PASS 100 ms
tests/unit/test_offline.py test_the_pictures_the_page_needs_travel_in_it PASS 100 ms
tests/unit/test_offline.py test_a_test_that_passed_is_a_pass_carrying_no_error PASS 0.30 ms
tests/unit/test_outcome_classification.py test_an_xfail_that_passed_anyway_is_an_xpass PASS 0.25 ms
tests/unit/test_outcome_classification.py test_a_passing_setup_does_not_overwrite_the_tests_own_status PASS 0.21 ms
tests/unit/test_outcome_classification.py test_a_failed_call_is_a_failure_carrying_the_assertion PASS 0.21 ms
tests/unit/test_outcome_classification.py test_only_the_e_lines_of_a_traceback_are_kept PASS 0.22 ms
tests/unit/test_outcome_classification.py test_a_failure_with_no_representation_carries_no_error PASS 0.21 ms
tests/unit/test_outcome_classification.py test_an_xfail_marker_on_a_test_that_failed_the_call_is_an_xpass PASS 0.20 ms
tests/unit/test_outcome_classification.py test_a_failure_outside_the_call_phase_is_an_error_not_a_failure PASS 0.26 ms
tests/unit/test_outcome_classification.py test_an_error_keeps_the_whole_traceback_rather_than_the_e_lines PASS 0.36 ms
tests/unit/test_outcome_classification.py test_an_error_with_nothing_to_show_is_still_an_error PASS 0.22 ms
tests/unit/test_outcome_classification.py test_a_skipped_test_is_a_skip_carrying_its_reason PASS 0.21 ms
tests/unit/test_outcome_classification.py test_a_known_bug_that_failed_as_expected_is_an_xfail PASS 0.38 ms
tests/unit/test_outcome_classification.py test_an_xfail_keeps_only_the_e_lines_the_way_a_failure_does PASS 0.31 ms
tests/unit/test_outcome_classification.py test_an_xfail_with_nothing_to_show_is_still_an_xfail PASS 0.23 ms
tests/unit/test_outcome_classification.py test_a_skip_with_no_reason_recorded_is_still_a_skip PASS 0.28 ms
tests/unit/test_outcome_classification.py test_the_suite_is_taken_from_the_nodeid PASS 0.23 ms
tests/unit/test_outcome_classification.py test_the_reason_a_known_bug_was_expected_to_fail_is_kept_for_the_xml PASS 0.20 ms
tests/unit/test_outcome_classification.py test_an_imperative_xfail_with_no_reason_leaves_the_field_empty PASS 0.20 ms
tests/unit/test_outcome_classification.py test_each_phase_records_its_own_time[setup] PASS 0.25 ms
tests/unit/test_outcome_classification.py test_each_phase_records_its_own_time[call] PASS 0.30 ms
tests/unit/test_outcome_classification.py test_each_phase_records_its_own_time[teardown] PASS 0.26 ms
tests/unit/test_outcome_classification.py test_a_phase_pytest_does_not_time_is_not_recorded PASS 0.22 ms
tests/unit/test_outcome_classification.py test_captured_output_is_collected_as_the_phases_go_by PASS 0.28 ms
tests/unit/test_plugin.py test_report_path PASS 0.28 ms
tests/unit/test_plugin.py test_nothing_is_switched_on_when_nothing_asks_for_it PASS 0.29 ms
tests/unit/test_plugin.py test_the_shard_id_can_be_set_in_the_ini PASS 0.36 ms
tests/unit/test_plugin.py test_the_shard_flag_beats_the_ini PASS 0.19 ms
tests/unit/test_plugin.py test_the_shard_merge_flag_can_be_set_in_the_ini PASS 0.18 ms
tests/unit/test_plugin.py test_the_shard_merge_flag_beats_an_ini_that_switches_it_off PASS 0.17 ms
tests/unit/test_plugin.py test_the_shard_run_token_can_be_set_in_the_ini PASS 0.23 ms
tests/unit/test_plugin.py test_the_shard_run_token_flag_beats_the_ini PASS 0.17 ms
tests/unit/test_plugin.py test_the_shard_reset_flag_can_be_set_in_the_ini PASS 0.34 ms
tests/unit/test_plugin.py test_the_shard_reset_flag_beats_an_ini_that_switches_it_off PASS 0.18 ms
tests/unit/test_plugin.py test_the_junit_path_can_be_set_in_the_ini PASS 0.19 ms
tests/unit/test_plugin.py test_the_junit_path_flag_beats_the_ini PASS 0.17 ms
tests/unit/test_plugin.py test_the_junit_xpass_mode_can_be_set_in_the_ini PASS 0.18 ms
tests/unit/test_plugin.py test_the_junit_xpass_flag_beats_the_ini PASS 0.28 ms
tests/unit/test_plugin.py test_shard_merge_without_a_shard_is_a_usage_error PASS 0.67 ms
tests/unit/test_plugin.py test_a_shard_id_that_sanitises_to_nothing_is_a_usage_error PASS 0.32 ms
tests/unit/test_plugin.py test_an_unknown_junit_xpass_value_is_a_usage_error PASS 0.23 ms
tests/unit/test_plugin.py test_the_run_token_is_taken_from_the_ci_environment PASS 0.24 ms
tests/unit/test_plugin.py test_the_run_token_flag_beats_the_ci_environment PASS 0.22 ms
tests/unit/test_plugin.py test_the_run_token_ini_beats_the_ci_environment PASS 0.21 ms
tests/unit/test_plugin.py test_the_run_token_is_empty_off_a_ci_system PASS 0.21 ms
tests/unit/test_profiles.py test_every_profile_key_names_an_option_that_exists PASS 0.23 ms
tests/unit/test_profiles.py test_every_profile_key_carries_the_default_its_flag_was_registered_with PASS 0.19 ms
tests/unit/test_profiles.py test_every_choice_key_offers_exactly_the_choices_its_flag_does PASS 0.26 ms
tests/unit/test_profiles.py test_a_flag_and_its_ini_key_both_reach_the_same_setting PASS 0.33 ms
tests/unit/test_profiles.py test_a_toml_profile_lands_on_the_options_the_flags_land_on PASS 1.70 ms
tests/unit/test_profiles.py test_an_ini_profile_is_read_from_the_file_pytest_chose PASS 1.16 ms
tests/unit/test_profiles.py test_a_dated_path_in_an_ini_profile_survives_being_read PASS 1.02 ms
tests/unit/test_profiles.py test_the_ini_file_wins_a_name_the_toml_file_also_defines PASS 0.92 ms
tests/unit/test_profiles.py test_both_spellings_of_the_tool_table_are_read PASS 0.61 ms
tests/unit/test_profiles.py test_a_project_with_no_config_files_at_all_is_left_alone PASS 0.76 ms
tests/unit/test_profiles.py test_the_command_line_beats_the_environment_which_beats_the_ini_key PASS 0.81 ms
tests/unit/test_profiles.py test_the_tool_table_can_pin_the_profile_a_bare_pytest_run_uses PASS 0.87 ms
tests/unit/test_profiles.py test_none_uses_no_profile_however_the_default_was_pinned PASS 0.76 ms
tests/unit/test_profiles.py test_a_profile_cannot_be_called_none PASS 0.64 ms
tests/unit/test_profiles.py test_a_profile_found_in_another_case_is_reported_as_it_was_written PASS 0.67 ms
tests/unit/test_profiles.py test_the_settled_profile_name_is_written_back_onto_the_options PASS 0.75 ms
tests/unit/test_profiles.py test_a_flag_on_the_command_line_beats_the_profile PASS 1.04 ms
tests/unit/test_profiles.py test_an_environment_variable_beats_the_profile PASS 0.75 ms
tests/unit/test_profiles.py test_the_profile_beats_the_plain_ini_key PASS 0.68 ms
tests/unit/test_profiles.py test_a_setting_no_layer_mentions_keeps_its_ini_value PASS 0.65 ms
tests/unit/test_profiles.py test_the_shared_table_is_what_every_profile_starts_from PASS 0.71 ms
tests/unit/test_profiles.py test_the_shared_table_applies_to_a_run_that_names_no_profile PASS 0.61 ms
tests/unit/test_profiles.py test_an_ini_file_can_hold_the_shared_table_too PASS 0.71 ms
tests/unit/test_profiles.py test_a_profiles_list_entries_are_added_to_the_ones_already_set PASS 0.88 ms
tests/unit/test_profiles.py test_a_toml_table_is_the_natural_way_to_write_link_patterns PASS 0.73 ms
tests/unit/test_profiles.py test_an_ini_profiles_indented_block_is_read_as_one_entry_per_line PASS 0.93 ms
tests/unit/test_profiles.py test_a_list_can_be_overridden_from_the_environment_a_line_at_a_time PASS 0.75 ms
tests/unit/test_profiles.py test_a_switch_a_profile_turns_on_reads_as_on PASS 0.60 ms
tests/unit/test_profiles.py test_a_switch_takes_the_words_an_ini_file_would_have_used PASS 0.68 ms
tests/unit/test_profiles.py test_a_switch_that_is_neither_fails_the_run PASS 0.84 ms
tests/unit/test_profiles.py test_an_unknown_profile_names_the_ones_there_are PASS 1.49 ms
tests/unit/test_profiles.py test_a_near_miss_is_offered_the_name_it_nearly_typed PASS 0.99 ms
tests/unit/test_profiles.py test_asking_for_a_profile_where_none_are_defined_says_how_to_write_one PASS 0.67 ms
tests/unit/test_profiles.py test_an_unknown_setting_in_a_profile_fails_the_run_and_names_the_file PASS 0.78 ms
tests/unit/test_profiles.py test_an_unknown_setting_with_no_near_miss_lists_what_there_is PASS 0.68 ms
tests/unit/test_profiles.py test_a_value_the_flag_would_have_refused_fails_rather_than_being_dropped PASS 0.63 ms
tests/unit/test_profiles.py test_a_count_that_is_not_one_fails_the_run["ten"-takes a number] PASS 0.69 ms
tests/unit/test_profiles.py test_a_count_that_is_not_one_fails_the_run[-1-cannot be negative] PASS 1.01 ms
tests/unit/test_profiles.py test_a_profile_that_is_not_a_table_says_so PASS 0.84 ms
tests/unit/test_profiles.py test_unparseable_toml_that_names_this_plugin_fails_the_run PASS 0.68 ms
tests/unit/test_profiles.py test_a_broken_pyproject_that_says_nothing_about_this_plugin_is_not_our_business PASS 0.68 ms
tests/unit/test_profiles.py test_an_ini_file_configparser_chokes_on_is_named_by_the_profile_error PASS 0.73 ms
tests/unit/test_profiles.py test_both_spellings_of_a_setting_have_a_variable PASS 0.19 ms
tests/unit/test_profiles.py test_a_variable_set_to_nothing_is_not_an_answer PASS 0.19 ms
tests/unit/test_profiles.py test_a_variable_this_version_does_not_know_is_left_alone PASS 0.19 ms
tests/unit/test_profiles.py test_the_environment_alone_shapes_a_run_with_no_profile_at_all PASS 0.55 ms
tests/unit/test_profiles.py test_resolve_says_where_every_value_came_from PASS 0.91 ms
tests/unit/test_profiles.py test_a_real_run_is_shaped_by_the_profile_it_names PASS 380 ms
tests/unit/test_profiles.py test_a_real_run_takes_its_override_from_the_environment PASS 369 ms
tests/unit/test_profiles.py test_a_real_run_stops_before_collection_on_a_profile_that_is_not_there PASS 213 ms
tests/unit/test_profiles.py test_report_profile_is_registered_as_an_ini_key PASS 0.46 ms
tests/unit/test_profiles.py test_applying_the_same_profile_twice_does_not_double_its_lists PASS 1.01 ms
tests/unit/test_profiles.py test_every_worker_of_an_xdist_run_is_shaped_by_the_same_profile PASS 681 ms
tests/unit/test_profiles.py test_a_setup_cfg_may_spell_the_sections_the_way_it_spells_pytests PASS 1.35 ms
tests/unit/test_profiles.py test_a_row_a_profile_repeats_from_the_ini_file_is_shown_once PASS 0.87 ms
tests/unit/test_profiles.py test_a_row_the_profile_answers_differently_is_the_profiles_answer PASS 1.15 ms
tests/unit/test_profiles.py test_profile_list_label_overrides_shared_table[build_info] PASS 1.26 ms
tests/unit/test_profiles.py test_profile_list_label_overrides_shared_table[links] PASS 0.93 ms
tests/unit/test_profiles.py test_profile_list_label_overrides_shared_table[link_patterns] PASS 1.12 ms
tests/unit/test_profiles.py test_environment_list_label_overrides_profile_and_shared_table[build_info] PASS 0.91 ms
tests/unit/test_profiles.py test_environment_list_label_overrides_profile_and_shared_table[links] PASS 0.83 ms
tests/unit/test_profiles.py test_environment_list_label_overrides_profile_and_shared_table[link_patterns] PASS 0.79 ms
tests/unit/test_profiles.py test_cli_list_label_overrides_every_lower_layer[build_info] PASS 1.40 ms
tests/unit/test_profiles.py test_cli_list_label_overrides_every_lower_layer[links] PASS 1.11 ms
tests/unit/test_profiles.py test_cli_list_label_overrides_every_lower_layer[link_patterns] PASS 0.83 ms
tests/unit/test_profiles.py test_a_list_label_no_higher_layer_names_is_kept[build_info] PASS 0.94 ms
tests/unit/test_profiles.py test_a_list_label_no_higher_layer_names_is_kept[links] PASS 0.77 ms
tests/unit/test_profiles.py test_a_list_label_no_higher_layer_names_is_kept[link_patterns] PASS 0.71 ms
tests/unit/test_profiles.py test_a_list_label_keeps_the_position_the_lower_layer_gave_it[build_info] PASS 0.83 ms
tests/unit/test_profiles.py test_a_list_label_keeps_the_position_the_lower_layer_gave_it[links] PASS 0.95 ms
tests/unit/test_profiles.py test_a_list_label_keeps_the_position_the_lower_layer_gave_it[link_patterns] PASS 0.89 ms
tests/unit/test_profiles.py test_the_plain_ini_key_loses_a_list_label_to_every_layer_above_it[build_info] PASS 0.75 ms
tests/unit/test_profiles.py test_the_plain_ini_key_loses_a_list_label_to_every_layer_above_it[links] PASS 0.71 ms
tests/unit/test_profiles.py test_the_plain_ini_key_loses_a_list_label_to_every_layer_above_it[link_patterns] PASS 0.84 ms
tests/unit/test_profiles.py test_a_label_said_twice_inside_one_layer_keeps_the_first[build_info] PASS 0.78 ms
tests/unit/test_profiles.py test_a_label_said_twice_inside_one_layer_keeps_the_first[links] PASS 0.77 ms
tests/unit/test_profiles.py test_a_label_said_twice_inside_one_layer_keeps_the_first[link_patterns] PASS 0.72 ms
tests/unit/test_profiles.py test_a_list_label_is_matched_the_way_the_readers_match_it PASS 0.83 ms
tests/unit/test_profiles.py test_the_explanation_names_the_layer_each_setting_came_from PASS 1.05 ms
tests/unit/test_profiles.py test_the_explanation_says_what_a_value_overrode PASS 0.79 ms
tests/unit/test_profiles.py test_the_explanation_gives_a_list_a_row_per_label PASS 0.82 ms
tests/unit/test_profiles.py test_the_explanation_reports_a_typed_value_as_the_command_line PASS 0.91 ms
tests/unit/test_profiles.py test_the_explanation_reaches_the_plain_ini_key_last PASS 0.84 ms
tests/unit/test_profiles.py test_a_setting_nobody_named_is_left_out_until_all_is_asked_for PASS 0.92 ms
tests/unit/test_profiles.py test_the_explanation_prints_the_files_it_read_and_the_profiles_in_them PASS 0.73 ms
tests/unit/test_profiles.py test_the_explanation_shortens_the_paths_it_prints PASS 0.85 ms
tests/unit/test_profiles.py test_no_profile_is_said_out_loud PASS 0.88 ms
tests/unit/test_profiles.py test_the_config_command_reads_a_project_without_running_anything PASS 1.46 ms
tests/unit/test_profiles.py test_the_config_command_takes_a_pyproject_only_project PASS 1.04 ms
tests/unit/test_profiles.py test_the_config_command_ignores_a_pyproject_that_does_not_configure_pytest PASS 0.85 ms
tests/unit/test_profiles.py test_the_config_command_prints_the_table_and_leaves PASS 2.04 ms
tests/unit/test_profiles.py test_the_config_command_says_so_when_the_profile_is_not_there PASS 1.99 ms
tests/unit/test_profiles.py test_the_config_command_can_answer_as_json PASS 2.15 ms
tests/unit/test_profiles.py test_show_config_prints_the_table_in_a_real_runs_header PASS 376 ms
tests/unit/test_public_api.py test_attach_is_importable_from_package PASS 0.30 ms
tests/unit/test_public_api.py test_attach_is_the_screenshot_helper PASS 0.16 ms
tests/unit/test_public_api.py test_attach_is_advertised_as_public PASS 0.15 ms
tests/unit/test_public_api.py test_package_is_a_regular_package PASS 0.15 ms
tests/unit/test_public_api.py test_the_attachment_helpers_are_importable_from_the_package[attach_text] PASS 0.28 ms
tests/unit/test_public_api.py test_the_attachment_helpers_are_importable_from_the_package[attach_json] PASS 0.18 ms
tests/unit/test_public_api.py test_the_attachment_helpers_are_importable_from_the_package[attach_api] PASS 0.17 ms
tests/unit/test_public_api.py test_the_attachment_helpers_are_importable_from_the_package[attach_file] PASS 0.24 ms
tests/unit/test_public_api.py test_the_attachment_helpers_are_the_module_ones[attach_text] PASS 0.24 ms
tests/unit/test_public_api.py test_the_attachment_helpers_are_the_module_ones[attach_json] PASS 0.19 ms
tests/unit/test_public_api.py test_the_attachment_helpers_are_the_module_ones[attach_api] PASS 0.18 ms
tests/unit/test_public_api.py test_the_attachment_helpers_are_the_module_ones[attach_file] PASS 0.17 ms
tests/unit/test_public_api.py test_attach_names_the_right_helper_for_a_string PASS 0.28 ms
tests/unit/test_report_open.py test_open_mode_defaults_to_auto PASS 0.17 ms
tests/unit/test_report_open.py test_open_mode_from_ini PASS 0.15 ms
tests/unit/test_report_open.py test_open_mode_cli_beats_ini PASS 0.15 ms
tests/unit/test_report_open.py test_open_mode_ignores_blank_option PASS 0.17 ms
tests/unit/test_report_open.py test_open_mode_tolerates_case_and_spacing PASS 0.16 ms
tests/unit/test_report_open.py test_open_mode_rejects_anything_else PASS 0.19 ms
tests/unit/test_report_open.py test_in_ci_reads_the_generic_variable PASS 0.19 ms
tests/unit/test_report_open.py test_in_ci_reads_a_system_specific_variable PASS 0.18 ms
tests/unit/test_report_open.py test_not_in_ci_on_a_bare_environment PASS 0.39 ms
tests/unit/test_report_open.py test_not_in_ci_when_the_variable_says_so PASS 0.16 ms
tests/unit/test_report_open.py test_every_known_ci_variable_is_recognised PASS 0.18 ms
tests/unit/test_report_open.py test_display_is_assumed_on_macos_and_windows PASS 0.17 ms
tests/unit/test_report_open.py test_display_is_read_from_the_environment_elsewhere PASS 0.16 ms
tests/unit/test_report_open.py test_no_display_on_a_headless_box PASS 0.14 ms
tests/unit/test_report_open.py test_interactive_follows_the_stream PASS 0.15 ms
tests/unit/test_report_open.py test_not_interactive_without_a_stream_at_all PASS 0.19 ms
tests/unit/test_report_open.py test_not_interactive_on_a_closed_stream PASS 0.15 ms
tests/unit/test_report_open.py test_in_ci_reads_the_real_environment PASS 0.16 ms
tests/unit/test_report_open.py test_has_display_reads_the_real_environment PASS 0.19 ms
tests/unit/test_report_open.py test_is_interactive_reads_the_original_stdout PASS 0.18 ms
tests/unit/test_report_open.py test_auto_opens_on_a_desktop_run PASS 0.14 ms
tests/unit/test_report_open.py test_auto_stays_quiet_in_ci PASS 0.25 ms
tests/unit/test_report_open.py test_auto_stays_quiet_on_a_macos_build_agent PASS 0.19 ms
tests/unit/test_report_open.py test_auto_stays_quiet_when_output_is_redirected PASS 0.16 ms
tests/unit/test_report_open.py test_auto_stays_quiet_on_a_headless_box PASS 0.14 ms
tests/unit/test_report_open.py test_always_opens_where_auto_would_not PASS 0.13 ms
tests/unit/test_report_open.py test_none_never_opens PASS 0.13 ms
tests/unit/test_report_open.py test_open_report_hands_the_file_to_the_browser PASS 7.01 ms
tests/unit/test_report_open.py test_open_report_percent_encodes_the_path PASS 0.83 ms
tests/unit/test_report_open.py test_open_report_asks_for_a_tab PASS 0.54 ms
tests/unit/test_report_open.py test_open_report_absolutises_a_relative_path PASS 0.56 ms
tests/unit/test_report_open.py test_open_report_does_nothing_when_switched_off PASS 0.53 ms
tests/unit/test_report_open.py test_open_report_does_nothing_in_ci PASS 0.59 ms
tests/unit/test_report_open.py test_open_report_survives_a_browser_that_blows_up PASS 0.61 ms
tests/unit/test_report_open.py test_open_report_reports_a_browser_that_declined PASS 0.62 ms
tests/unit/test_report_open.py test_report_url_gives_up_on_a_path_it_cannot_resolve PASS 0.22 ms
tests/unit/test_report_open.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.15 ms
tests/unit/test_report_open.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.71 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.70 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.59 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.80 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.78 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 1.04 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.92 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.56 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.75 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.78 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.95 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 1.32 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 1.10 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 1.08 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 1.57 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 1.89 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 1.33 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 1.14 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.80 ms
tests/unit/test_reporter_assets.py test_open_report_gives_up_on_a_path_it_cannot_resolve PASS 0.82 ms
tests/unit/test_reporter_hooks.py test_a_scenario_starting_is_remembered_for_the_record PASS 0.95 ms
tests/unit/test_reporter_hooks.py test_a_step_starting_and_finishing_reaches_the_steps_tab PASS 0.66 ms
tests/unit/test_reporter_hooks.py test_a_step_that_raised_is_closed_with_why PASS 0.63 ms
tests/unit/test_reporter_hooks.py test_a_step_the_suite_never_implemented_is_named_rather_than_skipped PASS 0.77 ms
tests/unit/test_reporter_hooks.py test_the_attachments_a_test_handed_over_are_collected PASS 0.80 ms
tests/unit/test_reporter_hooks.py test_none_mode_keeps_nothing_but_still_drains_the_buffer PASS 0.70 ms
tests/unit/test_reporter_hooks.py test_failed_mode_keeps_nothing_from_a_test_that_passed PASS 0.62 ms
tests/unit/test_reporter_hooks.py test_failed_mode_keeps_what_a_failure_attached[FAIL] PASS 0.69 ms
tests/unit/test_reporter_hooks.py test_failed_mode_keeps_what_a_failure_attached[ERROR] PASS 0.85 ms
tests/unit/test_reporter_hooks.py test_a_payload_is_trimmed_to_the_limit PASS 0.53 ms
tests/unit/test_reporter_hooks.py test_a_test_that_attached_nothing_collects_nothing PASS 0.88 ms
tests/unit/test_reporter_hooks.py test_the_junit_document_is_written_where_it_was_asked_for PASS 1.02 ms
tests/unit/test_reporter_hooks.py test_a_path_that_cannot_be_written_costs_the_xml_and_nothing_else PASS 0.87 ms
tests/unit/test_reporter_hooks.py test_a_run_that_asked_for_no_xml_writes_none PASS 0.86 ms
tests/unit/test_rerun_trail.py test_a_retry_keeps_what_the_attempt_before_it_failed_with PASS 0.32 ms
tests/unit/test_rerun_trail.py test_every_attempt_is_kept_in_the_order_it_ran PASS 0.40 ms
tests/unit/test_rerun_trail.py test_the_trail_is_as_long_as_the_rerun_count_says PASS 0.39 ms
tests/unit/test_rerun_trail.py test_a_trail_that_arrives_already_folded_is_not_flattened PASS 0.21 ms
tests/unit/test_rerun_trail.py test_an_attempt_carries_four_fields_and_not_a_whole_record PASS 0.16 ms
tests/unit/test_rerun_trail.py test_a_test_that_ran_once_has_no_trail PASS 0.23 ms
tests/unit/test_rerun_trail.py test_without_rerunfailures_nothing_is_folded_and_nothing_is_trailed PASS 0.21 ms
tests/unit/test_rerun_trail.py test_a_duration_that_cannot_be_read_becomes_zero PASS 0.16 ms
tests/unit/test_rerun_trail.py test_a_status_is_toned_the_way_the_rows_own_pills_are PASS 0.16 ms
tests/unit/test_rerun_trail.py test_a_bundle_written_before_the_trail_existed_reads_as_no_trail PASS 0.18 ms
tests/unit/test_rerun_trail.py test_the_panel_ends_on_the_attempt_the_row_is_showing PASS 1.36 ms
tests/unit/test_rerun_trail.py test_the_row_says_how_many_attempts_there_are_to_open PASS 9.77 ms
tests/unit/test_rerun_trail.py test_a_row_with_no_trail_parks_nothing_and_offers_nothing PASS 0.81 ms
tests/unit/test_rerun_trail.py test_the_count_is_in_the_cell_once PASS 0.83 ms
tests/unit/test_rerun_trail.py test_a_message_full_of_markup_stays_text_in_the_panel PASS 0.74 ms
tests/unit/test_rerun_trail.py test_the_panel_carries_the_whole_message_not_the_cell_s_fifty_characters PASS 1.08 ms
tests/unit/test_rerun_trail.py test_a_real_retry_reaches_the_page_with_both_failures_on_it PASS 426 ms
tests/unit/test_rerun_trail.py test_a_test_that_ran_once_gets_no_payload_in_a_real_run PASS 410 ms
tests/unit/test_reruns.py test_a_test_that_never_ran_twice_is_stored_as_is PASS 0.40 ms
tests/unit/test_reruns.py test_every_attempt_of_a_failing_test_collapses_into_one_record PASS 0.22 ms
tests/unit/test_reruns.py test_the_attempt_that_stuck_is_the_one_reported PASS 0.21 ms
tests/unit/test_reruns.py test_a_retry_keeps_the_screenshots_of_the_attempt_it_replaces PASS 0.19 ms
tests/unit/test_reruns.py test_a_retry_that_took_its_own_screenshot_keeps_that_one PASS 0.27 ms
tests/unit/test_reruns.py test_a_retried_test_keeps_its_place_in_collection_order PASS 0.19 ms
tests/unit/test_reruns.py test_without_rerunfailures_a_repeated_nodeid_is_never_swallowed PASS 0.30 ms
tests/unit/test_reruns.py test_records_merged_from_a_worker_keep_the_reruns_they_arrived_with PASS 0.29 ms
tests/unit/test_reruns.py test_the_flaky_marker_is_counted_as_reruns_not_failures PASS 461 ms
tests/unit/test_reruns.py test_the_reruns_option_is_counted_as_reruns PASS 475 ms
tests/unit/test_reruns.py test_a_marker_that_disagrees_with_the_option_still_adds_up PASS 408 ms
tests/unit/test_reruns.py test_a_test_that_passes_on_a_retry_is_reported_as_passed PASS 391 ms
tests/unit/test_run_delta.py test_delta_against_the_previous_build PASS 0.35 ms
tests/unit/test_run_delta.py test_delta_reads_the_counts_archived_builds_store_as_strings PASS 0.19 ms
tests/unit/test_run_delta.py test_delta_is_none_on_a_first_build PASS 0.17 ms
tests/unit/test_run_delta.py test_delta_is_none_when_a_build_did_not_record_the_count PASS 0.17 ms
tests/unit/test_run_delta.py test_wording_carries_the_sign PASS 0.17 ms
tests/unit/test_run_delta.py test_wording_is_singular_for_one PASS 0.16 ms
tests/unit/test_run_delta.py test_wording_says_no_change_rather_than_plus_zero PASS 0.16 ms
tests/unit/test_run_delta.py test_no_wording_without_a_delta PASS 0.16 ms
tests/unit/test_run_delta.py test_more_failures_than_last_time_is_the_bad_direction PASS 0.16 ms
tests/unit/test_run_delta.py test_no_delta_hides_the_whole_tile PASS 0.61 ms
tests/unit/test_run_delta.py test_figure_carries_its_sign PASS 0.18 ms
tests/unit/test_run_delta.py test_no_change_is_words_not_a_figure PASS 0.17 ms
tests/unit/test_run_delta.py test_unit_agrees_with_the_figure PASS 0.17 ms
tests/unit/test_run_delta.py test_no_change_carries_no_unit PASS 0.16 ms
tests/unit/test_run_delta.py test_no_figure_or_unit_without_a_delta PASS 0.17 ms
tests/unit/test_run_delta.py test_tooltip_gives_the_two_counts_behind_the_delta PASS 0.17 ms
tests/unit/test_run_delta.py test_generate_fills_in_the_placeholders PASS 0.21 ms
tests/unit/test_run_delta.py test_generate_leaves_a_first_build_blank PASS 0.33 ms
tests/unit/test_run_delta.py test_a_second_render_in_one_process_starts_the_trend_over PASS 1.43 ms
tests/unit/test_run_delta.py test_a_first_build_is_still_a_first_build_after_an_earlier_render PASS 1.01 ms
tests/unit/test_screenshot_capture.py test_the_buffer_starts_empty_even_if_something_left_a_non_list_behind PASS 0.19 ms
tests/unit/test_screenshot_capture.py test_add_files_the_image_against_the_step_that_was_open PASS 0.21 ms
tests/unit/test_screenshot_capture.py test_add_outside_any_step_is_filed_against_no_step PASS 0.17 ms
tests/unit/test_screenshot_capture.py test_add_stringifies_whatever_label_it_was_given PASS 0.16 ms
tests/unit/test_screenshot_capture.py test_taking_the_screenshots_empties_the_buffer PASS 0.16 ms
tests/unit/test_screenshot_capture.py test_pending_count_is_what_the_running_test_has_produced PASS 0.17 ms
tests/unit/test_screenshot_capture.py test_save_writes_the_bytes_a_browser_handed_over PASS 0.77 ms
tests/unit/test_screenshot_capture.py test_save_encodes_an_image_that_arrived_decoded PASS 1.40 ms
tests/unit/test_screenshot_capture.py test_attach_decodes_the_bytes_it_was_given PASS 0.36 ms
tests/unit/test_screenshot_capture.py test_attach_says_which_helper_text_belongs_in PASS 0.24 ms
tests/unit/test_screenshot_capture.py test_reading_an_attribute_that_raises_is_not_a_failure PASS 0.18 ms
tests/unit/test_screenshot_capture.py test_a_screenshot_call_that_raises_produces_no_picture PASS 0.17 ms
tests/unit/test_screenshot_capture.py test_a_coroutine_is_closed_rather_than_left_to_warn PASS 0.17 ms
tests/unit/test_screenshot_capture.py test_a_coroutine_that_will_not_close_is_still_not_a_picture PASS 0.20 ms
tests/unit/test_screenshot_capture.py test_a_screenshot_call_returning_a_path_is_not_a_picture PASS 0.18 ms
tests/unit/test_screenshot_capture.py test_empty_bytes_are_not_a_picture PASS 0.19 ms
tests/unit/test_screenshot_capture.py test_a_missing_screenshot_method_produces_no_picture PASS 0.35 ms
tests/unit/test_screenshot_capture.py test_selenium_is_asked_first PASS 0.20 ms
tests/unit/test_screenshot_capture.py test_the_driver_under_a_wrapper_is_preferred_to_the_wrappers_own_call PASS 0.19 ms
tests/unit/test_screenshot_capture.py test_playwright_style_screenshot_is_the_last_resort PASS 0.16 ms
tests/unit/test_screenshot_capture.py test_a_wrapper_whose_driver_is_itself_is_not_asked_twice PASS 0.35 ms
tests/unit/test_screenshot_capture.py test_a_mock_is_never_photographed PASS 0.34 ms
tests/unit/test_screenshot_capture.py test_something_with_a_screenshot_call_can_be_shot PASS 0.19 ms
tests/unit/test_screenshot_capture.py test_a_wrapper_around_a_driver_can_be_shot PASS 0.19 ms
tests/unit/test_screenshot_capture.py test_an_ordinary_value_cannot_be_shot PASS 0.20 ms
tests/unit/test_screenshot_capture.py test_a_page_is_its_own_target PASS 0.24 ms
tests/unit/test_screenshot_capture.py test_the_pages_inside_a_context_are_found PASS 0.20 ms
tests/unit/test_screenshot_capture.py test_the_pages_inside_a_browsers_contexts_are_found PASS 0.17 ms
tests/unit/test_screenshot_capture.py test_nothing_photographable_yields_nothing PASS 0.29 ms
tests/unit/test_screenshot_capture.py test_a_context_holding_something_unphotographable_yields_nothing PASS 0.21 ms
tests/unit/test_screenshot_capture.py test_the_search_stops_rather_than_descending_for_ever PASS 0.18 ms
tests/unit/test_screenshot_capture.py test_a_fixture_that_already_ran_is_read_out_of_the_request_cache PASS 0.20 ms
tests/unit/test_screenshot_capture.py test_a_fixture_that_raised_has_no_value_to_photograph PASS 0.18 ms
tests/unit/test_screenshot_capture.py test_a_fixture_that_never_ran_is_not_built_to_be_photographed PASS 0.18 ms
tests/unit/test_screenshot_capture.py test_a_cached_result_of_the_wrong_shape_is_ignored PASS 0.18 ms
tests/unit/test_screenshot_capture.py test_an_item_with_no_request_resolves_nothing PASS 0.20 ms
tests/unit/test_screenshot_capture.py test_the_known_fixture_names_come_first PASS 0.30 ms
tests/unit/test_screenshot_capture.py test_everything_else_the_test_was_handed_is_offered_too PASS 0.27 ms
tests/unit/test_screenshot_capture.py test_the_same_page_named_and_cached_is_offered_once PASS 0.18 ms
tests/unit/test_screenshot_capture.py test_a_unittest_driver_on_self_is_found PASS 0.28 ms
tests/unit/test_screenshot_capture.py test_an_item_holding_nothing_offers_nothing PASS 0.19 ms
tests/unit/test_screenshot_capture.py test_funcargs_of_the_wrong_type_are_ignored PASS 0.18 ms
tests/unit/test_screenshot_capture.py test_capture_photographs_the_browser_the_test_was_holding PASS 0.18 ms
tests/unit/test_screenshot_capture.py test_a_page_reached_through_three_fixtures_is_photographed_once PASS 0.17 ms
tests/unit/test_screenshot_capture.py test_capture_stops_at_the_limit PASS 0.28 ms
tests/unit/test_screenshot_capture.py test_capture_honours_a_lower_limit PASS 0.19 ms
tests/unit/test_screenshot_capture.py test_a_browser_that_cannot_be_photographed_produces_nothing PASS 0.17 ms
tests/unit/test_screenshot_capture.py test_a_test_holding_no_browser_produces_nothing PASS 0.17 ms
tests/unit/test_screenshots.py test_a_screenshot_attached_from_a_fixture_teardown_reaches_the_report PASS 411 ms
tests/unit/test_screenshots.py test_a_screenshot_attached_from_the_makereport_hook_still_reaches_the_report PASS 411 ms
tests/unit/test_screenshots.py test_a_passing_test_keeps_its_screenshot PASS 413 ms
tests/unit/test_screenshots.py test_a_card_says_how_the_test_ended PASS 392 ms
tests/unit/test_screenshots.py test_a_failing_card_prints_the_error_it_belongs_to PASS 456 ms
tests/unit/test_screenshots.py test_a_screenshot_is_not_lent_to_the_next_test PASS 470 ms
tests/unit/test_screenshots.py test_each_failure_keeps_its_own_screenshot PASS 409 ms
tests/unit/test_screenshots.py test_a_test_that_attached_nothing_gets_no_screenshot PASS 403 ms
tests/unit/test_screenshots.py test_a_long_test_name_reaches_the_card_whole PASS 406 ms
tests/unit/test_screenshots.py test_the_row_carries_the_picture_the_test_took PASS 482 ms
tests/unit/test_screenshots.py test_a_row_with_no_picture_says_so_rather_than_offering_one PASS 418 ms
tests/unit/test_screenshots.py test_the_row_thumbnails_open_a_strip_of_their_own PASS 435 ms
tests/unit/test_screenshots.py test_every_picture_a_test_took_reaches_its_row PASS 422 ms
tests/unit/test_shard_payload.py test_the_leg_records_the_machine_that_actually_ran_the_tests PASS 32 ms
tests/unit/test_shard_payload.py test_the_leg_records_its_own_honest_start PASS 30 ms
tests/unit/test_shard_payload.py test_the_exit_status_is_kept_as_a_number PASS 60 ms
tests/unit/test_shard_payload.py test_a_leg_that_collected_nothing_explicitly_counts_its_records PASS 30 ms
tests/unit/test_shard_payload.py test_a_collection_error_is_not_counted_as_a_collected_test PASS 30 ms
tests/unit/test_shard_payload.py test_the_xdist_workers_this_leg_used_are_named PASS 31 ms
tests/unit/test_shard_payload.py test_the_leg_records_the_ci_run_it_belonged_to PASS 30 ms
tests/unit/test_shard_payload.py test_the_leg_records_the_revision_it_ran PASS 1.13 ms
tests/unit/test_shard_payload.py test_the_leg_keeps_the_kernel_string_beside_the_os_one PASS 31 ms
tests/unit/test_shard_payload.py test_a_leg_lists_no_packages_unless_it_was_asked_to PASS 33 ms
tests/unit/test_shard_payload.py test_a_leg_asked_for_packages_carries_them_into_the_merge PASS 63 ms
tests/unit/test_shard_payload.py test_build_info_is_written_as_lists_because_json_has_no_tuples PASS 33 ms
tests/unit/test_shard_payload.py test_the_capture_row_is_read_off_this_legs_own_config PASS 31 ms
tests/unit/test_shard_payload.py test_a_leg_that_captured_normally_carries_no_notice PASS 29 ms
tests/unit/test_shard_payload.py test_the_payload_carries_the_schema_the_reader_checks PASS 30 ms
tests/unit/test_shard_payload.py test_the_payload_names_this_leg PASS 29 ms
tests/unit/test_shard_payload.py test_a_leg_given_a_label_keeps_the_one_it_was_given PASS 28 ms
tests/unit/test_shard_payload.py test_the_counts_tell_records_and_collection_errors_apart PASS 31 ms
tests/unit/test_shard_payload.py test_the_records_are_handed_over_verbatim PASS 31 ms
tests/unit/test_shard_payload.py test_a_leg_that_measured_coverage_carries_it PASS 28 ms
tests/unit/test_shard_payload.py test_a_leg_whose_coverage_read_raised_still_writes_its_records PASS 30 ms
tests/unit/test_shard_payload.py test_a_leg_that_measured_no_coverage_carries_none PASS 29 ms
tests/unit/test_shard_payload.py test_a_bundle_is_written_where_the_leg_was_told PASS 31 ms
tests/unit/test_shard_payload.py test_a_written_bundle_reads_back_as_the_same_bundle PASS 29 ms
tests/unit/test_shard_payload.py test_rewriting_the_same_leg_is_the_everyday_case PASS 29 ms
tests/unit/test_shard_payload.py test_a_second_different_leg_landing_on_one_directory_is_named PASS 57 ms
tests/unit/test_shard_payload.py test_a_directory_holding_something_that_is_not_a_bundle_is_not_this_writes_problem PASS 30 ms
tests/unit/test_shard_payload.py test_a_field_block_hands_back_everything_it_holds PASS 0.28 ms
tests/unit/test_shard_payload.py test_a_null_in_the_json_falls_through_to_the_default PASS 0.15 ms
tests/unit/test_shard_payload.py test_setting_a_field_is_visible_to_everything_reading_it PASS 0.15 ms
tests/unit/test_shards.py test_a_shard_writes_its_records_and_no_report PASS 279 ms
tests/unit/test_shards.py test_a_shard_file_carries_every_record_key PASS 278 ms
tests/unit/test_shards.py test_a_parallel_shard_writes_one_bundle_not_one_per_worker PASS 647 ms
tests/unit/test_shards.py test_a_parallel_shard_counts_the_tests_it_collected PASS 724 ms
tests/unit/test_shards.py test_a_shard_names_its_screenshots_under_its_own_directory PASS 304 ms
tests/unit/test_shards.py test_a_second_shard_keeps_the_first_shards_screenshots PASS 578 ms
tests/unit/test_shards.py test_a_shard_refuses_an_empty_id PASS 229 ms
tests/unit/test_shards.py test_a_shard_id_containing_html_still_cleans_and_writes_its_own_directory PASS 281 ms
tests/unit/test_shards.py test_two_legs_whose_ids_sanitise_alike_are_warned_about PASS 1.98 ms
tests/unit/test_shards.py test_a_truncated_bundle_is_reported_rather_than_raising PASS 1.18 ms
tests/unit/test_shards.py test_a_newer_bundle_format_is_refused_by_name PASS 1.00 ms
tests/unit/test_shards.py test_a_newer_bundle_beside_a_merging_leg_does_not_end_the_run_in_a_traceback PASS 286 ms
tests/unit/test_shards.py test_a_record_missing_keys_is_repaired_not_crashed PASS 134 ms
tests/unit/test_shards.py test_a_record_with_no_nodeid_is_quarantined PASS 106 ms
tests/unit/test_shards.py test_an_unknown_key_survives_a_round_trip PASS 1.30 ms
tests/unit/test_shards.py test_shards_are_ordered_by_natural_id_not_by_load_order PASS 331 ms
tests/unit/test_shards.py test_a_suite_split_across_shards_is_one_suite PASS 109 ms
tests/unit/test_shards.py test_collection_errors_sort_ahead_of_every_shards_tests PASS 109 ms
tests/unit/test_shards.py test_one_broken_module_seen_by_four_shards_is_reported_once PASS 112 ms
tests/unit/test_shards.py test_an_error_beats_a_skip_for_the_same_collector PASS 118 ms
tests/unit/test_shards.py test_shards_that_ran_under_different_roots_group_into_one_suite PASS 1.50 ms
tests/unit/test_shards.py test_a_duplicate_nodeid_folds_as_a_rerun_by_default PASS 105 ms
tests/unit/test_shards.py test_a_duplicate_nodeid_keeps_what_each_shard_saw PASS 1.34 ms
tests/unit/test_shards.py test_a_shard_that_already_folded_a_retry_keeps_both_its_attempts PASS 1.16 ms
tests/unit/test_shards.py test_the_policies_that_keep_one_attempt_leave_the_trail_alone PASS 1.95 ms
tests/unit/test_shards.py test_a_duplicate_nodeid_does_not_depend_on_rerunfailures PASS 217 ms
tests/unit/test_shards.py test_first_last_and_worst_each_keep_what_they_say PASS 1.92 ms
tests/unit/test_shards.py test_on_duplicate_error_names_the_nodeid_and_the_shards PASS 1.32 ms
tests/unit/test_shards.py test_steps_are_never_concatenated_across_records PASS 1.47 ms
tests/unit/test_shards.py test_screenshots_from_two_machines_do_not_collide PASS 109 ms
tests/unit/test_shards.py test_a_screenshot_inherited_from_the_shard_next_door_still_resolves PASS 121 ms
tests/unit/test_shards.py test_a_missing_screenshot_is_dropped_rather_than_left_broken PASS 107 ms
tests/unit/test_shards.py test_the_merged_name_reaches_all_three_render_sites PASS 106 ms
tests/unit/test_shards.py test_merged_totals_equal_the_row_count PASS 115 ms
tests/unit/test_shards.py test_merging_twice_in_one_process_does_not_double_the_dashboard PASS 223 ms
tests/unit/test_shards.py test_a_merge_writes_one_build_not_one_per_shard PASS 214 ms
tests/unit/test_shards.py test_the_merged_build_is_stamped_with_the_earliest_shard_start PASS 108 ms
tests/unit/test_shards.py test_the_environment_panel_names_every_shards_host PASS 108 ms
tests/unit/test_shards.py test_the_capture_notice_survives_a_shard_that_ran_with_dash_s PASS 106 ms
tests/unit/test_shards.py test_a_merge_without_coverage_records_none_and_says_why PASS 108 ms
tests/unit/test_shards.py test_a_named_coverage_file_is_used PASS 106 ms
tests/unit/test_shards.py test_coverage_data_files_are_combined_when_coverage_is_importable PASS 115 ms
tests/unit/test_shards.py test_a_run_token_from_the_flag_beats_the_ini_and_the_ci_system PASS 0.80 ms
tests/unit/test_shards.py test_a_leg_on_a_ci_system_takes_its_token_from_the_ci_variables PASS 0.21 ms
tests/unit/test_shards.py test_a_leg_off_a_ci_system_carries_no_run_token PASS 0.20 ms
tests/unit/test_shards.py test_a_rerun_of_a_matrix_does_not_share_the_first_attempts_token PASS 0.71 ms
tests/unit/test_shards.py test_two_ci_systems_numbering_their_builds_alike_get_different_tokens PASS 0.63 ms
tests/unit/test_shards.py test_a_stale_bundle_does_not_join_a_token_carrying_build PASS 396 ms
tests/unit/test_shards.py test_report_shard_reset_clears_the_shard_directory PASS 398 ms
tests/unit/test_shards.py test_the_provenance_lines_name_every_merged_bundle PASS 397 ms
tests/unit/test_shards.py test_two_shard_processes_then_the_merge_command PASS 699 ms
tests/unit/test_shards.py test_a_merged_report_matches_a_single_run PASS 1.07 s
tests/unit/test_shards.py test_sequential_legs_with_shard_merge_render_once PASS 1.08 s
tests/unit/test_shards_helpers.py test_not_a_bundle_is_falsey_and_says_what_it_is PASS 0.29 ms
tests/unit/test_shards_helpers.py test_a_github_actions_run_is_named_by_its_run_and_attempt PASS 0.16 ms
tests/unit/test_shards_helpers.py test_a_runner_too_old_for_the_second_variable_still_gets_a_token PASS 0.16 ms
tests/unit/test_shards_helpers.py test_the_identifying_variable_is_the_one_that_has_to_be_there PASS 0.16 ms
tests/unit/test_shards_helpers.py test_a_blank_variable_does_not_count_as_being_on_that_system PASS 0.17 ms
tests/unit/test_shards_helpers.py test_a_machine_that_is_not_a_ci_runner_has_no_token PASS 0.16 ms
tests/unit/test_shards_helpers.py test_the_flag_beats_the_ini_key_and_the_ci_variables PASS 0.17 ms
tests/unit/test_shards_helpers.py test_the_ini_key_is_used_when_the_flag_was_not_typed PASS 0.16 ms
tests/unit/test_shards_helpers.py test_a_blank_flag_falls_through_rather_than_winning PASS 0.22 ms
tests/unit/test_shards_helpers.py test_what_was_typed_is_stripped_before_it_is_compared PASS 0.16 ms
tests/unit/test_shards_helpers.py test_the_reset_flag_is_honoured_when_it_was_typed PASS 0.16 ms
tests/unit/test_shards_helpers.py test_the_ini_key_accepts_the_usual_spellings_of_yes[true] PASS 0.22 ms
tests/unit/test_shards_helpers.py test_the_ini_key_accepts_the_usual_spellings_of_yes[True] PASS 0.19 ms
tests/unit/test_shards_helpers.py test_the_ini_key_accepts_the_usual_spellings_of_yes[1] PASS 0.17 ms
tests/unit/test_shards_helpers.py test_the_ini_key_accepts_the_usual_spellings_of_yes[yes] PASS 0.16 ms
tests/unit/test_shards_helpers.py test_the_ini_key_accepts_the_usual_spellings_of_yes[on] PASS 0.17 ms
tests/unit/test_shards_helpers.py test_anything_else_leaves_the_other_legs_work_alone[false] PASS 0.20 ms
tests/unit/test_shards_helpers.py test_anything_else_leaves_the_other_legs_work_alone[0] PASS 0.27 ms
tests/unit/test_shards_helpers.py test_anything_else_leaves_the_other_legs_work_alone[no] PASS 0.21 ms
tests/unit/test_shards_helpers.py test_anything_else_leaves_the_other_legs_work_alone[] PASS 0.17 ms
tests/unit/test_shards_helpers.py test_anything_else_leaves_the_other_legs_work_alone[maybe] PASS 0.29 ms
tests/unit/test_shards_helpers.py test_a_reset_is_never_implied_by_anything_else PASS 0.28 ms
tests/unit/test_shards_helpers.py test_an_ordinary_shard_id_is_left_alone PASS 0.20 ms
tests/unit/test_shards_helpers.py test_a_separator_is_folded_so_the_id_cannot_become_a_directory PASS 0.29 ms
tests/unit/test_shards_helpers.py test_a_walk_out_of_the_tree_does_not_survive PASS 0.21 ms
tests/unit/test_shards_helpers.py test_asking_for_nothing_gives_nothing PASS 0.16 ms
tests/unit/test_shards_helpers.py test_the_shards_live_in_a_subtree_of_the_report_folder PASS 0.17 ms
tests/unit/test_shards_helpers.py test_one_shards_folder_sits_under_that_root PASS 0.43 ms
tests/unit/test_shards_helpers.py test_resetting_a_folder_that_was_never_written_is_not_an_error PASS 0.64 ms
tests/unit/test_shards_helpers.py test_resetting_removes_what_the_last_run_left PASS 0.99 ms
tests/unit/test_shards_helpers.py test_the_tenth_shard_does_not_sort_second PASS 0.21 ms
tests/unit/test_shards_helpers.py test_a_number_is_never_compared_against_a_word PASS 0.20 ms
tests/unit/test_shards_helpers.py test_an_id_that_is_only_digits_still_sorts_as_a_number PASS 0.15 ms
tests/unit/test_shards_helpers.py test_an_empty_id_has_a_key_of_its_own PASS 0.15 ms
tests/unit/test_shards_helpers.py test_an_ordinary_screenshot_name_survives PASS 0.15 ms
tests/unit/test_shards_helpers.py test_an_absolute_name_cannot_take_over_the_join PASS 0.15 ms
tests/unit/test_shards_helpers.py test_a_walk_out_of_the_folder_is_flattened PASS 0.15 ms
tests/unit/test_shards_helpers.py test_a_windows_separator_is_flattened_too PASS 0.14 ms
tests/unit/test_shards_helpers.py test_a_name_that_is_only_a_walk_is_refused_outright[..] PASS 0.19 ms
tests/unit/test_shards_helpers.py test_a_name_that_is_only_a_walk_is_refused_outright[.] PASS 0.30 ms
tests/unit/test_shards_helpers.py test_a_name_that_is_only_a_walk_is_refused_outright[] PASS 0.20 ms
tests/unit/test_shards_helpers.py test_a_name_that_is_only_a_walk_is_refused_outright[None] PASS 0.17 ms
tests/unit/test_shards_helpers.py test_a_name_that_is_only_a_walk_is_refused_outright[/] PASS 0.21 ms
tests/unit/test_shards_helpers.py test_a_name_that_is_only_a_walk_is_refused_outright[../] PASS 0.18 ms
tests/unit/test_shards_helpers.py test_a_duration_that_arrived_as_text_is_read_rather_than_dropped PASS 0.18 ms
tests/unit/test_shards_helpers.py test_a_duration_that_cannot_be_read_becomes_zero[None] PASS 0.19 ms
tests/unit/test_shards_helpers.py test_a_duration_that_cannot_be_read_becomes_zero[] PASS 0.21 ms
tests/unit/test_shards_helpers.py test_a_duration_that_cannot_be_read_becomes_zero[soon] PASS 0.19 ms
tests/unit/test_shards_helpers.py test_a_duration_that_cannot_be_read_becomes_zero[value3] PASS 0.23 ms
tests/unit/test_shards_helpers.py test_a_rerun_count_that_cannot_be_read_becomes_zero PASS 0.20 ms
tests/unit/test_shards_helpers.py test_a_list_field_that_arrived_as_something_else_becomes_empty PASS 0.15 ms
tests/unit/test_shards_helpers.py test_a_tuple_is_accepted_where_a_list_was_expected PASS 0.16 ms
tests/unit/test_shim.py test_an_option_the_merge_set_is_handed_back PASS 0.36 ms
tests/unit/test_shim.py test_an_option_nobody_set_falls_back_to_the_default PASS 0.21 ms
tests/unit/test_shim.py test_an_option_explicitly_none_falls_back_to_the_default PASS 0.16 ms
tests/unit/test_shim.py test_an_option_with_no_default_and_no_value_is_none PASS 0.24 ms
tests/unit/test_shim.py test_a_falsey_value_that_was_actually_set_survives PASS 0.22 ms
tests/unit/test_shim.py test_every_ini_question_raises_so_the_helpers_fall_through PASS 0.30 ms
tests/unit/test_shim.py test_the_namespace_reads_the_very_dict_getoption_reads PASS 0.22 ms
tests/unit/test_shim.py test_writing_through_the_namespace_is_seen_by_getoption PASS 0.19 ms
tests/unit/test_shim.py test_a_name_nobody_set_is_an_attribute_error_not_a_key_error PASS 0.17 ms
tests/unit/test_shim.py test_a_name_written_that_was_never_there_becomes_readable PASS 0.18 ms
tests/unit/test_shim.py test_no_plugin_is_ever_installed PASS 0.18 ms
tests/unit/test_shim.py test_the_plugin_list_is_empty_rather_than_missing PASS 0.18 ms
tests/unit/test_shim.py test_the_root_defaults_to_where_the_merge_was_run PASS 0.18 ms
tests/unit/test_shim.py test_the_root_is_a_string_because_every_reader_treats_it_as_one PASS 0.62 ms
tests/unit/test_shim.py test_the_arguments_row_shows_what_the_merge_was_asked_to_do PASS 0.19 ms
tests/unit/test_shim.py test_the_arguments_default_to_this_processs_own PASS 0.18 ms
tests/unit/test_shim.py test_an_empty_argument_list_is_kept_rather_than_replaced PASS 0.17 ms
tests/unit/test_shim.py test_the_render_pipeline_resolves_a_path_through_it PASS 0.61 ms
tests/unit/test_shim.py test_the_render_pipeline_falls_back_to_its_default_through_it PASS 0.17 ms
tests/unit/test_small_helpers.py test_midnight_is_shown_as_twelve_rather_than_zero PASS 0.22 ms
tests/unit/test_small_helpers.py test_the_top_of_midnight_hour_keeps_its_two_digit_minutes PASS 0.16 ms
tests/unit/test_small_helpers.py test_an_ordinary_morning_time_loses_its_leading_zero PASS 0.28 ms
tests/unit/test_small_helpers.py test_an_afternoon_time_is_shown_on_the_twelve_hour_clock PASS 0.20 ms
tests/unit/test_small_helpers.py test_midday_stays_twelve PASS 0.16 ms
tests/unit/test_small_helpers.py test_a_value_that_will_not_stringify_does_not_take_the_step_down PASS 0.18 ms
tests/unit/test_small_helpers.py test_a_long_value_is_cut_to_fit_the_line PASS 0.15 ms
tests/unit/test_small_helpers.py test_a_string_is_passed_through_without_being_re_stringified PASS 0.14 ms
tests/unit/test_small_helpers.py test_the_buffer_recovers_if_something_left_a_non_list_behind PASS 0.15 ms
tests/unit/test_small_helpers.py test_a_decorated_step_whose_signature_cannot_be_bound_still_records PASS 0.28 ms
tests/unit/test_small_helpers.py test_a_dotted_exception_is_cut_to_its_class PASS 0.19 ms
tests/unit/test_small_helpers.py test_a_bare_assert_is_classified_rather_than_left_unsorted PASS 0.21 ms
tests/unit/test_small_helpers.py test_a_real_exception_beats_an_assert_seen_first PASS 0.17 ms
tests/unit/test_small_helpers.py test_a_name_that_does_not_look_like_an_exception_is_still_offered PASS 0.16 ms
tests/unit/test_small_helpers.py test_an_exception_wins_over_a_plain_name_whatever_the_order PASS 0.15 ms
tests/unit/test_small_helpers.py test_colour_codes_do_not_hide_the_exception PASS 0.15 ms
tests/unit/test_small_helpers.py test_a_message_that_names_nothing_is_left_unclassified PASS 0.15 ms
tests/unit/test_small_helpers.py test_a_number_that_can_be_read_as_an_int_is[12-12] PASS 0.21 ms
tests/unit/test_small_helpers.py test_a_number_that_can_be_read_as_an_int_is[12.7-12_0] PASS 0.19 ms
tests/unit/test_small_helpers.py test_a_number_that_can_be_read_as_an_int_is[12.7-12_1] PASS 0.22 ms
tests/unit/test_small_helpers.py test_a_number_that_can_be_read_as_an_int_is[0-0] PASS 0.19 ms
tests/unit/test_small_helpers.py test_a_value_that_is_not_a_number_falls_back[None] PASS 0.19 ms
tests/unit/test_small_helpers.py test_a_value_that_is_not_a_number_falls_back[] PASS 0.16 ms
tests/unit/test_small_helpers.py test_a_value_that_is_not_a_number_falls_back[later] PASS 0.28 ms
tests/unit/test_small_helpers.py test_a_value_that_is_not_a_number_falls_back[value3] PASS 0.19 ms
tests/unit/test_small_helpers.py test_a_value_that_is_not_a_number_falls_back[value4] PASS 0.17 ms
tests/unit/test_small_helpers.py test_a_number_that_can_be_read_as_a_float_is[1.5-1.5] PASS 0.20 ms
tests/unit/test_small_helpers.py test_a_number_that_can_be_read_as_a_float_is[2-2.0] PASS 0.19 ms
tests/unit/test_small_helpers.py test_a_float_that_cannot_be_read_is_none[None] PASS 0.17 ms
tests/unit/test_small_helpers.py test_a_float_that_cannot_be_read_is_none[] PASS 0.17 ms
tests/unit/test_small_helpers.py test_a_float_that_cannot_be_read_is_none[later] PASS 0.19 ms
tests/unit/test_small_helpers.py test_a_float_that_cannot_be_read_is_none[value3] PASS 0.17 ms
tests/unit/test_small_helpers.py test_a_build_is_labelled_by_the_clock_it_started_on PASS 0.20 ms
tests/unit/test_small_helpers.py test_a_build_written_before_start_time_existed_still_has_its_date PASS 0.16 ms
tests/unit/test_small_helpers.py test_a_build_with_neither_is_left_unlabelled PASS 0.13 ms
tests/unit/test_small_helpers.py test_the_step_limit_defaults_when_nobody_set_one PASS 0.17 ms
tests/unit/test_small_helpers.py test_the_step_limit_defaults_when_what_was_set_is_not_a_number PASS 0.17 ms
tests/unit/test_small_helpers.py test_a_negative_step_limit_is_read_as_no_limit PASS 0.20 ms
tests/unit/test_small_helpers.py test_the_flag_wins_over_the_ini_key PASS 0.17 ms
tests/unit/test_small_helpers.py test_the_ini_key_is_used_when_the_flag_was_not_given PASS 0.18 ms
tests/unit/test_small_helpers.py test_a_serial_run_has_no_worker_id PASS 0.16 ms
tests/unit/test_small_helpers.py test_an_xdist_worker_says_which_one_it_is PASS 0.16 ms
tests/unit/test_small_helpers.py test_the_screenshot_folder_is_removed_when_it_is_there PASS 0.87 ms
tests/unit/test_small_helpers.py test_cleaning_a_folder_that_was_never_written_is_not_an_error PASS 0.48 ms
tests/unit/test_small_helpers.py test_the_notice_is_raised_when_output_is_not_being_captured PASS 0.26 ms
tests/unit/test_small_helpers.py test_no_notice_is_raised_on_an_ordinary_run PASS 0.23 ms
tests/unit/test_small_helpers.py test_an_archives_time_is_read_from_its_name PASS 0.73 ms
tests/unit/test_small_helpers.py test_an_archive_named_by_an_older_version_falls_back_to_its_mtime PASS 0.63 ms
tests/unit/test_small_helpers.py test_a_name_whose_stamp_is_not_a_bare_number_falls_back_to_the_mtime PASS 0.72 ms
tests/unit/test_step_report.py test_every_step_reaches_the_tab PASS 439 ms
tests/unit/test_step_report.py test_a_step_is_filed_under_the_phase_that_ran_it PASS 438 ms
tests/unit/test_step_report.py test_every_test_gets_all_three_phases_even_with_no_steps PASS 424 ms
tests/unit/test_step_report.py test_a_failing_step_carries_the_message PASS 423 ms
tests/unit/test_step_report.py test_the_message_is_not_repeated_up_the_tree PASS 412 ms
tests/unit/test_step_report.py test_a_step_keeps_what_it_was_called_with PASS 410 ms
tests/unit/test_step_report.py test_an_attachment_is_filed_under_the_step_that_made_it PASS 434 ms
tests/unit/test_step_report.py test_the_markers_reach_the_tab PASS 469 ms
tests/unit/test_step_report.py test_the_row_counts_what_it_can_open PASS 492 ms
tests/unit/test_step_report.py test_a_payload_is_escaped_rather_than_rendered PASS 402 ms
tests/unit/test_step_report.py test_a_step_title_cannot_become_a_template_placeholder PASS 397 ms
tests/unit/test_step_report.py test_a_non_ascii_step_survives_the_write PASS 397 ms
tests/unit/test_step_report.py test_none_mode_keeps_nothing PASS 425 ms
tests/unit/test_step_report.py test_failed_mode_keeps_only_the_failures PASS 410 ms
tests/unit/test_step_report.py test_the_limit_caps_what_one_test_records PASS 384 ms
tests/unit/test_step_report.py test_the_tab_guides_you_when_nothing_named_a_step PASS 375 ms
tests/unit/test_step_report.py test_the_guide_goes_away_once_a_step_is_named PASS 411 ms
tests/unit/test_step_report.py test_steps_survive_an_xdist_run PASS 716 ms
tests/unit/test_step_report.py test_a_retry_reports_the_attempt_that_stuck PASS 389 ms
tests/unit/test_step_report.py test_a_suite_is_named_by_its_file_in_the_rail PASS 400 ms
tests/unit/test_step_report.py test_the_cheatsheet_can_be_opened_from_the_button PASS 402 ms
tests/unit/test_step_report.py test_the_tab_opens_on_a_failure_that_has_steps PASS 400 ms
tests/unit/test_step_report.py test_the_search_matches_a_test_name_typed_with_spaces PASS 404 ms
tests/unit/test_step_report.py test_the_summary_counts_the_suites_the_rail_is_showing PASS 406 ms
tests/unit/test_step_report.py test_the_rail_opens_collapsed_with_controls_to_open_it PASS 399 ms
tests/unit/test_step_report.py test_the_selected_test_is_never_hidden_behind_a_shut_suite PASS 401 ms
tests/unit/test_step_report.py test_a_test_name_in_the_table_crosses_to_its_own_entry PASS 411 ms
tests/unit/test_step_report.py test_a_suite_name_in_the_table_crosses_to_its_own_group PASS 406 ms
tests/unit/test_step_report.py test_crossing_to_a_suite_opens_that_group_and_shuts_the_rest PASS 408 ms
tests/unit/test_step_report_helpers.py test_a_sub_millisecond_step_is_not_shown_as_nothing PASS 0.36 ms
tests/unit/test_step_report_helpers.py test_no_measured_time_at_all_is_still_a_flat_zero PASS 0.18 ms
tests/unit/test_step_report_helpers.py test_milliseconds_stay_milliseconds_while_they_are_short PASS 0.29 ms
tests/unit/test_step_report_helpers.py test_a_second_or_more_is_said_in_seconds PASS 0.16 ms
tests/unit/test_step_report_helpers.py test_a_duration_that_is_not_a_number_says_nothing PASS 0.15 ms
tests/unit/test_step_report_helpers.py test_a_numeric_string_is_still_a_duration PASS 0.23 ms
tests/unit/test_step_report_helpers.py test_a_test_faster_than_the_time_column_can_show_is_not_flat_zero PASS 0.17 ms
tests/unit/test_step_report_helpers.py test_sub_millisecond_phases_survive_into_the_rail PASS 0.15 ms
tests/unit/test_step_report_helpers.py test_the_record_duration_wins_when_it_is_the_larger_of_the_two PASS 0.15 ms
tests/unit/test_step_report_helpers.py test_a_record_with_neither_takes_no_time PASS 0.15 ms
tests/unit/test_step_report_helpers.py test_a_suite_is_named_by_its_file PASS 0.16 ms
tests/unit/test_step_report_helpers.py test_a_windows_path_is_split_the_same_way PASS 0.19 ms
tests/unit/test_step_report_helpers.py test_a_bare_name_is_left_alone PASS 0.15 ms
tests/unit/test_step_report_helpers.py test_a_path_that_ends_in_a_separator_falls_back_to_the_whole_thing PASS 0.14 ms
tests/unit/test_step_report_helpers.py test_one_of_something_is_singular PASS 0.15 ms
tests/unit/test_step_report_helpers.py test_anything_else_is_plural PASS 0.14 ms
tests/unit/test_step_report_helpers.py test_the_bars_are_measured_against_this_tests_slowest_step PASS 0.17 ms
tests/unit/test_step_report_helpers.py test_a_test_where_nothing_took_any_time_draws_no_bars PASS 0.13 ms
tests/unit/test_step_report_helpers.py test_a_test_with_no_steps_draws_nothing PASS 0.14 ms
tests/unit/test_step_report_helpers.py test_a_step_with_no_time_recorded_counts_as_none PASS 0.27 ms
tests/unit/test_step_report_helpers.py test_a_gherkin_step_carries_its_word_as_a_badge[given] PASS 0.33 ms
tests/unit/test_step_report_helpers.py test_a_gherkin_step_carries_its_word_as_a_badge[when] PASS 0.22 ms
tests/unit/test_step_report_helpers.py test_a_gherkin_step_carries_its_word_as_a_badge[then] PASS 0.19 ms
tests/unit/test_step_report_helpers.py test_a_gherkin_step_carries_its_word_as_a_badge[and] PASS 0.21 ms
tests/unit/test_step_report_helpers.py test_a_gherkin_step_carries_its_word_as_a_badge[but] PASS 0.24 ms
tests/unit/test_step_report_helpers.py test_a_plain_step_carries_no_gherkin_badge PASS 0.14 ms
tests/unit/test_step_report_helpers.py test_a_step_with_no_kind_at_all_carries_no_badge PASS 0.13 ms
tests/unit/test_step_report_helpers.py test_the_parameters_read_as_the_call_that_was_made PASS 0.16 ms
tests/unit/test_step_report_helpers.py test_a_step_called_with_nothing_says_nothing PASS 0.13 ms
tests/unit/test_step_report_helpers.py test_the_chip_counts_only_what_was_attached_inside_this_step PASS 0.15 ms
tests/unit/test_step_report_helpers.py test_one_attachment_is_counted_in_the_singular PASS 0.16 ms
tests/unit/test_step_report_helpers.py test_a_step_nothing_was_attached_in_carries_no_chip PASS 0.15 ms
tests/unit/test_step_report_helpers.py test_the_step_carrying_the_message_is_the_one_that_threw PASS 0.15 ms
tests/unit/test_step_report_helpers.py test_failing_deeper_beats_failing_later PASS 0.14 ms
tests/unit/test_step_report_helpers.py test_a_test_that_managed_to_fail_twice_is_blamed_on_the_last PASS 0.13 ms
tests/unit/test_step_report_helpers.py test_a_failure_with_no_message_anywhere_falls_back_to_the_status PASS 0.15 ms
tests/unit/test_step_report_helpers.py test_an_errored_step_counts_as_having_thrown PASS 0.13 ms
tests/unit/test_step_report_helpers.py test_a_test_where_nothing_failed_blames_no_step PASS 0.16 ms
tests/unit/test_step_report_helpers.py test_a_picture_taken_inside_a_step_is_filed_under_it PASS 0.20 ms
tests/unit/test_step_report_helpers.py test_an_automatic_capture_is_filed_against_the_step_that_threw PASS 0.17 ms
tests/unit/test_step_report_helpers.py test_a_picture_from_a_test_that_passed_is_filed_under_the_phase PASS 0.14 ms
tests/unit/test_step_report_helpers.py test_a_failure_that_named_no_step_files_its_picture_under_the_phase PASS 0.14 ms
tests/unit/test_step_report_helpers.py test_a_step_index_pointing_past_the_end_is_not_trusted PASS 0.13 ms
tests/unit/test_step_report_helpers.py test_a_step_index_that_is_not_a_number_is_not_trusted PASS 0.14 ms
tests/unit/test_step_report_helpers.py test_a_test_with_no_pictures_files_nothing PASS 0.14 ms
tests/unit/test_step_report_helpers.py test_a_gherkin_test_names_the_feature_it_came_from PASS 0.23 ms
tests/unit/test_step_report_helpers.py test_a_plain_pytest_test_names_no_scenario PASS 0.14 ms
tests/unit/test_step_report_helpers.py test_a_sequential_test_is_left_in_the_order_it_ran PASS 0.21 ms
tests/unit/test_step_report_helpers.py test_concurrent_children_go_under_the_sibling_that_opened_them PASS 0.17 ms
tests/unit/test_step_report_helpers.py test_the_indexes_travel_with_the_steps PASS 0.20 ms
tests/unit/test_step_report_helpers.py test_a_step_whose_parent_is_in_another_phase_is_a_root_here PASS 0.16 ms
tests/unit/test_step_report_helpers.py test_a_record_written_before_steps_had_parents_still_renders PASS 0.16 ms
tests/unit/test_step_report_helpers.py test_a_parent_that_names_it_back_does_not_hang_or_lose_it PASS 0.16 ms
tests/unit/test_step_report_helpers.py test_a_thousand_deep_does_not_take_the_run_down_with_it PASS 2.95 ms
tests/unit/test_step_screenshots.py test_the_picture_lands_on_the_step_that_threw PASS 392 ms
tests/unit/test_step_screenshots.py test_the_message_and_the_picture_end_up_on_the_same_step PASS 388 ms
tests/unit/test_step_screenshots.py test_a_test_that_named_no_steps_shows_it_under_the_body PASS 400 ms
tests/unit/test_step_screenshots.py test_a_picture_taken_inside_a_step_says_so_itself PASS 393 ms
tests/unit/test_step_screenshots.py test_the_tree_and_the_table_are_different_galleries PASS 401 ms
tests/unit/test_step_screenshots.py test_a_browser_the_test_never_named_is_still_photographed PASS 407 ms
tests/unit/test_step_screenshots.py test_the_same_browser_is_not_photographed_twice PASS 413 ms
tests/unit/test_steps.py test_a_with_block_records_one_step PASS 0.37 ms
tests/unit/test_steps.py test_steps_nest_by_being_called_from_inside_one_another PASS 0.28 ms
tests/unit/test_steps.py test_a_step_is_recorded_where_it_started_not_where_it_finished PASS 0.19 ms
tests/unit/test_steps.py test_a_step_is_timed PASS 33 ms
tests/unit/test_steps.py test_the_decorator_fills_its_title_from_the_call PASS 0.29 ms
tests/unit/test_steps.py test_a_title_naming_something_the_call_did_not_pass_keeps_its_braces PASS 0.19 ms
tests/unit/test_steps.py test_the_decorator_returns_what_the_function_returned PASS 0.19 ms
tests/unit/test_steps.py test_a_step_that_raises_is_recorded_and_the_exception_carries_on PASS 0.28 ms
tests/unit/test_steps.py test_the_message_goes_on_the_step_that_raised_not_on_its_ancestors PASS 0.20 ms
tests/unit/test_steps.py test_two_steps_that_each_raised_both_keep_their_message PASS 0.19 ms
tests/unit/test_steps.py test_a_caught_failure_leaves_the_step_that_caught_it_passing PASS 0.18 ms
tests/unit/test_steps.py test_a_skip_inside_a_step_is_not_a_failure_of_that_step PASS 0.21 ms
tests/unit/test_steps.py test_a_step_that_was_never_closed_is_closed_at_the_drain PASS 0.17 ms
tests/unit/test_steps.py test_the_buffer_is_not_handed_to_the_next_test PASS 0.17 ms
tests/unit/test_steps.py test_steps_are_filed_under_the_phase_that_was_running PASS 0.20 ms
tests/unit/test_steps.py test_a_fixture_holding_a_step_open_does_not_swallow_the_test PASS 0.18 ms
tests/unit/test_steps.py test_nesting_stops_being_drawn_past_the_depth_limit PASS 0.28 ms
tests/unit/test_steps.py test_the_limit_caps_what_one_test_can_record PASS 0.30 ms
tests/unit/test_steps.py test_the_limit_can_be_lifted PASS 0.37 ms
tests/unit/test_steps.py test_a_capped_step_still_nests_the_ones_that_follow_it PASS 0.23 ms
tests/unit/test_steps.py test_the_open_step_is_the_innermost_one PASS 0.25 ms
tests/unit/test_steps.py test_every_step_gets_an_id_of_its_own PASS 0.19 ms
tests/unit/test_steps.py test_a_background_thread_nests_within_itself PASS 13 ms
tests/unit/test_steps.py test_a_value_that_cannot_be_repred_does_not_take_the_run_down PASS 0.25 ms
tests/unit/test_steps.py test_start_and_stop_can_be_driven_directly PASS 0.18 ms
tests/unit/test_steps.py test_stopping_when_nothing_is_open_is_not_an_error PASS 0.16 ms
tests/unit/test_teardown_failures.py test_a_teardown_that_raised_turns_a_pass_into_an_error PASS 0.33 ms
tests/unit/test_teardown_failures.py test_a_test_that_already_failed_keeps_its_own_failure PASS 0.22 ms
tests/unit/test_teardown_failures.py test_a_test_that_errored_in_setup_is_left_alone PASS 0.20 ms
tests/unit/test_teardown_failures.py test_a_clean_teardown_changes_nothing PASS 0.21 ms
tests/unit/test_teardown_failures.py test_a_skipped_test_is_not_promoted_by_a_clean_teardown PASS 0.29 ms
tests/unit/test_teardown_failures.py test_an_unknown_nodeid_is_a_no_op PASS 0.23 ms
tests/unit/test_teardown_failures.py test_the_attempt_that_stuck_is_the_one_refreshed PASS 0.22 ms
tests/unit/test_teardown_failures.py test_a_failing_teardown_is_not_reported_as_a_pass PASS 405 ms
tests/unit/test_teardown_failures.py test_a_test_that_failed_before_its_teardown_keeps_that_failure PASS 389 ms
tests/unit/test_teardown_failures.py test_a_clean_test_is_untouched PASS 403 ms
tests/unit/test_teardown_failures.py test_the_totals_no_longer_hide_the_error PASS 408 ms
tests/unit/test_teardown_failures.py test_teardown_output_is_kept_for_a_teardown_only_failure PASS 424 ms
tests/unit/test_theme.py test_the_theme_is_settled_before_the_page_paints PASS 28 ms
tests/unit/test_theme.py test_a_stored_choice_outranks_the_system_preference PASS 30 ms
tests/unit/test_theme.py test_both_themes_declare_exactly_the_same_tokens PASS 28 ms
tests/unit/test_theme.py test_every_token_the_page_uses_is_declared_in_both_themes PASS 29 ms
tests/unit/test_theme.py test_no_token_is_declared_without_being_used PASS 29 ms
tests/unit/test_theme.py test_the_status_colours_survive_both_themes PASS 28 ms
tests/unit/test_theme.py test_no_colour_is_left_hard_coded_in_the_app_stylesheets PASS 31 ms
tests/unit/test_theme.py test_charts_name_their_tokens_so_a_theme_change_can_re_read_them PASS 28 ms
tests/unit/test_theme.py test_no_chart_colour_is_written_as_a_literal PASS 30 ms
tests/unit/test_theme.py test_icons_carried_as_tokens_are_base64_not_percent_encoded PASS 28 ms
tests/unit/test_theme.py test_the_switch_is_a_labelled_control_wired_to_the_toggle PASS 28 ms
tests/unit/test_theme.py test_the_rail_keeps_its_own_colours_in_both_themes PASS 28 ms
tests/unit/test_time_converter.py test_time_converter PASS 0.29 ms
tests/unit/test_time_converter.py test_clamp_to_twelve PASS 0.16 ms
tests/unit/test_time_converter.py test_is_midnight PASS 0.17 ms
tests/unit/test_traceability.py test_a_pattern_is_read_from_the_command_line_and_the_ini_together PASS 0.20 ms
tests/unit/test_traceability.py test_whitespace_around_the_marker_and_the_url_is_not_part_of_either PASS 0.17 ms
tests/unit/test_traceability.py test_a_scheme_the_report_will_not_render_is_dropped_rather_than_linked PASS 0.21 ms
tests/unit/test_traceability.py test_an_entry_with_no_url_names_no_link PASS 0.17 ms
tests/unit/test_traceability.py test_the_first_argument_is_what_goes_in_the_url PASS 0.17 ms
tests/unit/test_traceability.py test_an_id_is_percent_encoded_on_the_way_into_the_url PASS 0.18 ms
tests/unit/test_traceability.py test_a_url_keeps_the_braces_that_are_not_the_placeholder PASS 0.25 ms
tests/unit/test_traceability.py test_a_pattern_with_no_placeholder_is_a_fixed_destination PASS 0.18 ms
tests/unit/test_traceability.py test_a_marker_nobody_configured_points_nowhere PASS 0.16 ms
tests/unit/test_traceability.py test_the_arguments_are_kept_beside_the_signature PASS 0.22 ms
tests/unit/test_traceability.py test_an_owner_is_its_own_kind_of_marker PASS 0.20 ms
tests/unit/test_traceability.py test_linked_markers_are_grouped_by_the_marker_they_were_written_as PASS 0.27 ms
tests/unit/test_traceability.py test_a_marker_name_becomes_the_label_of_the_row_its_ids_sit_in PASS 0.17 ms
tests/unit/test_traceability.py test_an_owner_is_pulled_out_of_the_row_of_tags PASS 0.29 ms
tests/unit/test_traceability.py test_a_marker_with_no_pattern_is_the_badge_it_has_always_been PASS 0.23 ms
tests/unit/test_traceability.py test_a_suite_that_configured_nothing_gets_the_report_it_had_before PASS 0.26 ms
tests/unit/test_traceability.py test_an_id_reaches_the_xml_as_a_property_on_the_testcase PASS 0.25 ms
tests/unit/test_traceability.py test_the_properties_come_before_the_outcome PASS 0.19 ms
tests/unit/test_traceability.py test_a_marker_that_was_not_named_as_traceability_stays_out_of_the_xml PASS 0.18 ms
tests/unit/test_traceability.py test_a_marker_with_empty_brackets_writes_no_property PASS 0.18 ms
tests/unit/test_traceability.py test_a_run_that_named_no_trace_markers_writes_the_document_it_always_did PASS 0.16 ms
tests/unit/test_traceability.py test_the_marker_names_are_the_built_in_ones_plus_whatever_was_configured PASS 0.16 ms
tests/unit/test_traceability.py test_a_tests_owners_reach_the_rail_as_one_attribute PASS 0.15 ms
tests/unit/test_traceability.py test_an_owner_written_twice_is_one_owner PASS 0.14 ms
tests/unit/test_traceability.py test_an_owner_marker_with_empty_brackets_owns_nothing PASS 0.13 ms
tests/unit/test_traceability.py test_a_test_with_no_owner_marker_has_no_owners PASS 0.19 ms
tests/unit/test_traceability.py test_a_severity_is_its_own_kind_of_marker PASS 0.21 ms
tests/unit/test_traceability.py test_a_severity_with_empty_brackets_is_an_ordinary_marker PASS 0.18 ms
tests/unit/test_traceability.py test_the_ladder_is_ranked_worst_first PASS 0.15 ms
tests/unit/test_traceability.py test_a_word_nobody_recognises_ranks_after_every_level PASS 0.13 ms
tests/unit/test_traceability.py test_a_level_is_the_same_level_however_it_was_capitalised PASS 0.14 ms
tests/unit/test_traceability.py test_the_nearest_severity_is_the_one_that_applies PASS 0.17 ms
tests/unit/test_traceability.py test_two_at_one_scope_are_read_as_the_worse_of_them PASS 0.14 ms
tests/unit/test_traceability.py test_a_test_nobody_rated_is_unrated_rather_than_normal PASS 0.17 ms
tests/unit/test_traceability.py test_the_severity_reaches_the_rail_as_its_own_attribute PASS 1.01 ms
tests/unit/test_traceability.py test_the_overridden_severity_is_shown_and_struck_through PASS 0.25 ms
tests/unit/test_traceability.py test_the_severity_row_stays_out_of_the_row_of_tags PASS 0.31 ms
tests/unit/test_traceability.py test_the_severity_reaches_the_xml_once_and_already_resolved PASS 0.21 ms
tests/unit/test_traceability.py test_a_run_that_rated_nothing_writes_no_severity_property PASS 0.19 ms
tests/unit/test_util.py test_environment_name_from_ini PASS 0.17 ms
tests/unit/test_util.py test_environment_name_cli_beats_ini PASS 0.14 ms
tests/unit/test_util.py test_environment_name_defaults_to_empty PASS 0.14 ms
tests/unit/test_util.py test_build_info_merges_cli_and_ini PASS 0.16 ms
tests/unit/test_util.py test_build_info_skips_blanks_and_keeps_bare_keys PASS 0.21 ms
tests/unit/test_util.py test_build_info_keeps_equals_in_the_value PASS 0.17 ms
tests/unit/test_util.py test_environment_label_keeps_short_names PASS 0.15 ms
tests/unit/test_util.py test_environment_label_keeps_names_of_exactly_ten PASS 0.14 ms
tests/unit/test_util.py test_environment_label_cuts_longer_names_at_ten PASS 0.16 ms
tests/unit/test_util.py test_custom_title_keeps_names_up_to_twenty PASS 0.14 ms
tests/unit/test_util.py test_custom_title_cuts_longer_names_at_twenty PASS 0.13 ms
tests/unit/test_util.py test_report_logs_mode_defaults_to_all PASS 0.14 ms
tests/unit/test_util.py test_report_logs_mode_from_ini PASS 0.13 ms
tests/unit/test_util.py test_report_logs_mode_cli_beats_ini PASS 0.13 ms
tests/unit/test_util.py test_report_logs_mode_falls_back_on_nonsense PASS 0.14 ms
tests/unit/test_util.py test_report_log_limit_defaults PASS 0.14 ms
tests/unit/test_util.py test_report_log_limit_zero_means_no_limit PASS 0.17 ms
tests/unit/test_util.py test_report_log_limit_from_ini PASS 0.15 ms
tests/unit/test_util.py test_report_log_limit_ignores_a_negative_value PASS 0.15 ms
tests/unit/test_util.py test_report_attachments_mode_defaults_to_all PASS 0.14 ms
tests/unit/test_util.py test_report_attachments_mode_from_ini PASS 0.15 ms
tests/unit/test_util.py test_report_attachments_mode_cli_beats_ini PASS 0.14 ms
tests/unit/test_util.py test_report_attachments_mode_falls_back_on_nonsense PASS 0.14 ms
tests/unit/test_util.py test_report_attachment_limit_defaults PASS 0.13 ms
tests/unit/test_util.py test_report_attachment_limit_zero_means_no_limit PASS 0.15 ms
tests/unit/test_util.py test_report_attachment_limit_from_ini PASS 0.18 ms
tests/unit/test_util.py test_report_attachment_limit_ignores_a_negative_value PASS 0.16 ms
tests/unit/test_util.py test_merge_log_sections_skips_empty_captures PASS 0.15 ms
tests/unit/test_util.py test_merge_log_sections_keeps_the_latest_attempt PASS 0.15 ms
tests/unit/test_util.py test_format_log_sections_replays_the_phases_in_order PASS 0.14 ms
tests/unit/test_util.py test_trim_log_sections_leaves_output_under_the_limit_alone PASS 0.14 ms
tests/unit/test_util.py test_trim_log_sections_is_a_no_op_without_a_limit PASS 0.14 ms
tests/unit/test_util.py test_trim_log_sections_keeps_the_tail_and_says_what_went PASS 0.27 ms
tests/unit/test_util.py test_trim_log_sections_spends_the_budget_on_the_last_sections PASS 0.21 ms
tests/unit/test_util.py test_trim_log_sections_drops_a_section_the_budget_cannot_reach PASS 0.18 ms
tests/unit/test_util.py test_count_log_lines_covers_every_section PASS 0.19 ms
tests/unit/test_util.py test_escape_report_text_defuses_the_template_placeholder_syntax PASS 0.20 ms
tests/unit/test_util.py test_capture_notice_warns_when_stdout_is_not_captured PASS 0.15 ms
tests/unit/test_util.py test_capture_notice_is_silent_when_capture_is_on PASS 0.14 ms
tests/unit/test_util.py test_capture_notice_is_silent_when_logs_are_switched_off PASS 0.16 ms
tests/unit/test_util.py test_capture_summary_names_the_streams_that_survive PASS 0.15 ms
tests/unit/test_util.py test_capture_summary_covers_the_failed_only_mode PASS 0.15 ms
tests/unit/test_util.py test_capture_summary_says_when_nothing_is_kept PASS 0.15 ms
tests/unit/test_util.py test_capture_summary_falls_back_to_the_root_logger_level PASS 0.15 ms
tests/unit/test_util.py test_report_path_defaults_to_cwd PASS 0.15 ms
tests/unit/test_util.py test_report_path_from_ini PASS 0.17 ms
tests/unit/test_util.py test_report_path_cli_beats_ini PASS 0.16 ms
tests/unit/test_util.py test_report_path_expands_time_placeholders PASS 0.21 ms
tests/unit/test_util.py test_report_path_leaves_a_plain_path_alone PASS 0.17 ms
tests/unit/test_util.py test_report_path_keeps_an_escaped_percent PASS 0.16 ms
tests/unit/test_util.py test_report_links_ignores_an_entry_missing_half_of_itself PASS 0.15 ms
tests/unit/test_util.py test_safe_link_reads_a_windows_drive_letter_as_a_path PASS 0.27 ms
tests/unit/test_util.py test_safe_link_reads_a_windows_drive_letter_as_a_path PASS 0.22 ms
tests/unit/test_util.py test_build_info_shows_a_label_once_however_many_layers_named_it PASS 0.16 ms
tests/unit/test_util.py test_build_info_reads_two_spellings_of_one_label_as_one_row PASS 0.14 ms
tests/unit/test_xdist.py test_a_plain_run_is_not_a_worker PASS 0.22 ms
tests/unit/test_xdist.py test_a_worker_is_detected_and_named PASS 0.17 ms
tests/unit/test_xdist.py test_records_from_several_workers_land_in_collection_order PASS 1.62 ms
tests/unit/test_xdist.py test_a_suite_split_across_workers_is_reported_once PASS 1.05 ms
tests/unit/test_xdist.py test_every_status_is_counted_once PASS 1.62 ms
tests/unit/test_xdist.py test_reruns_are_summed_per_suite PASS 0.77 ms
tests/unit/test_xdist.py test_each_test_metrics_row_carries_its_own_rerun_count PASS 2.34 ms
tests/unit/test_xdist.py test_each_row_carries_its_own_full_error PASS 1.86 ms
tests/unit/test_xdist.py test_a_worker_hands_its_records_to_the_controller PASS 0.29 ms
tests/unit/test_xdist.py test_a_crashed_worker_is_skipped_rather_than_raising PASS 0.22 ms
tests/unit/test_xdist.py test_a_parallel_run_reports_every_test PASS 752 ms
tests/unit/test_xdist.py test_a_parallel_run_matches_a_serial_one PASS 1.22 s
tests/unit/test_xdist.py test_a_parallel_run_archives_one_build_not_one_per_worker PASS 1.75 s
tests/unit/test_xdist.py test_workers_do_not_each_write_a_report PASS 862 ms
Test Steps
What each test did, step by step, and where its time went
No test named a step in this run
The tree above still works — every test has a set up, a body and a tear down, and each is timed. Naming the pieces inside them is what turns “this test failed after 4 seconds” into “it failed charging the card, 3.2 seconds in”.
1Name a step
step is a with block or a decorator, and steps nest by being called from inside one another — nothing is passed between them.
from pytest_html_reporter import step

def test_checkout():
    with step("Add to cart", sku="A-12"):
        cart.add("A-12")

    with step("Charge the card"):
        assert gateway.charge(cart).ok
2Or decorate the helperrecommended
A page object’s methods are already the steps of the test. Decorating them once names every test that calls them, and the arguments of the call fill in the {placeholders} of the title.
@step("Log in as {user}")
def login(user, password):
    page.fill("#user", user)
    page.click("#submit")
3Already writing Gherkin?
Nothing to do. A pytest-bdd scenario is already a list of steps, so its Given / When / Then land here on their own — each timed, each carrying what it was called with.
Scenario: Add items to the cart
    Given a logged in user
    When I add 2 items to the cart
    Then the cart shows 2 items
Anything attached while a step is open is filed under that step — attach_json, attach_api and the rest need no extra argument to say which one they belong to.

Build #10

    SEPTEMBER 06, 2026
1784
TEST CASES

1744

PASSED

37

FAILED

1

SKIPPED

1

XPASSED

1

XFAILED

0

ERROR

111

RERUN

Build #9

    SEPTEMBER 06, 2026
1727
TEST CASES

1727

PASSED

0

FAILED

0

SKIPPED

0

XPASSED

0

XFAILED

0

ERROR

0

RERUN

Build #8

    SEPTEMBER 06, 2026
5
TEST CASES

5

PASSED

0

FAILED

0

SKIPPED

0

XPASSED

0

XFAILED

0

ERROR

0

RERUN

Build #7

    SEPTEMBER 06, 2026
145
TEST CASES

145

PASSED

0

FAILED

0

SKIPPED

0

XPASSED

0

XFAILED

0

ERROR

0

RERUN

Build #6

    SEPTEMBER 06, 2026
1724
TEST CASES

1724

PASSED

0

FAILED

0

SKIPPED

0

XPASSED

0

XFAILED

0

ERROR

0

RERUN

Build #5

    SEPTEMBER 06, 2026
57
TEST CASES

35

PASSED

19

FAILED

1

SKIPPED

1

XPASSED

1

XFAILED

0

ERROR

0

RERUN

Build #4

    SEPTEMBER 06, 2026
1724
TEST CASES

1724

PASSED

0

FAILED

0

SKIPPED

0

XPASSED

0

XFAILED

0

ERROR

0

RERUN

Build #3

    SEPTEMBER 06, 2026
53
TEST CASES

49

PASSED

4

FAILED

0

SKIPPED

0

XPASSED

0

XFAILED

0

ERROR

0

RERUN

Build #2

    SEPTEMBER 06, 2026
1
TEST CASES

0

PASSED

1

FAILED

0

SKIPPED

0

XPASSED

0

XFAILED

0

ERROR

0

RERUN

Build #1

    SEPTEMBER 06, 2026
29
TEST CASES

29

PASSED

0

FAILED

0

SKIPPED

0

XPASSED

0

XFAILED

0

ERROR

0

RERUN

Screenshots
The page each test was looking at, beside the suite and the error it belongs to
Screenshot attached by test_a_wrong_heading_is_photographed_on_the_step_that_failed FAIL
test_a_wrong_heading_is_photographed_on_the_step_that_failed
test_gherkin_screenshot

AssertionError: assert 'Example Domain' == 'Not the heading' - Not the heading + Example Domain

Screenshot attached by test_heading_mismatch[chromium] FAIL
test_heading_mismatch[chromium]
test_playwright

AssertionError: assert 'Example Domain' == 'Not the heading' - Not the heading + Example Domain

Screenshot attached by test_heading_mismatch FAIL
test_heading_mismatch
test_screenshot

AssertionError: 'Example Domain' != 'Not the heading' - Example Domain + Not the heading

Screenshot attached by test_heading_mismatch FAIL
test_heading_mismatch
test_selenium

AssertionError: assert 'Example Domain' == 'Not the heading' - Not the heading + Example Domain

No screenshots in this run
A test that fails holding a Selenium driver or a Playwright page is photographed for you - no hook, no fixture, nothing to import. This run was holding neither, and attached nothing of its own.
1Nothing to writeautomatic
The browser is already in the test’s own fixtures and the reporter is already standing in its teardown, so the picture is taken there - the last moment before the driver is quit. What makes something a browser is that it can hand over a PNG, so Selenium, Playwright, appium, splinter and a wrapper of your own all work, whatever the fixture is called.
def test_checkout(page):                # or driver, or whatever you called it
    page.goto("/cart")
    assert page.locator("h1").inner_text() == "Cart"   # fails, and is photographed
Failures only, by default. --report-screenshots=all photographs every test, none turns the automatic capture off - and attach below keeps working either way.
2Or take the picture yourself
attach takes the image rather than the browser, so anything that can produce a PNG reaches the report - a page mid-test, a chart, a rendered PDF, an image diff. A test that attaches its own picture is not photographed again on the way out.
from pytest_html_reporter import attach

attach(data=driver.get_screenshot_as_png())   # Selenium
attach(data=page.screenshot())                # Playwright
attach(data=await page.screenshot())          # Playwright, async API
3Async tests, and unittest
The automatic capture is synchronous, so an async Playwright page has nowhere to await - attach from the body instead. A unittest suite that quits its driver in tearDown has already closed the browser by the time the capture would run, so it attaches from there, before the quit.
async def test_home(page):                # Playwright, async API
    try:
        assert await page.title() == "Example Domain"
    except AssertionError:
        attach(data=await page.screenshot())
        raise

def tearDown(self):                          # unittest
    attach(data=self.driver.get_screenshot_as_png())
    self.driver.quit()                        # after, never before
Every image is kept whatever the test did - a screenshot of a pass is a baseline worth having. Each one also lands on the Screens column of the Test Metrics row it belongs to, next to the error it explains.
API Logs
The request and response behind each test, with the curl line that repeats the call
No API logs in this run
Hand this tab the request and the response, and they are kept against the test that produced them - both bodies, both sets of headers, and the curl line that repeats the call.
1Attach a call
attach_api reads the response object, so requests and httpx both work as they are - nothing else to install.
from pytest_html_reporter import attach_api

def test_creates_an_order():
    response = requests.post(url, json=payload)
    attach_api(response)

    assert response.status_code == 201
2Better: only when the response failsrecommended
Attaching every call buries the one that matters and grows the report for no reason. The payload worth keeping is the one behind a failure, so attach from a fixture's teardown and let the outcome decide. The reporter builds a test's record after the finalizers have run, which is what makes this work.
# conftest.py
import pytest
from pytest_html_reporter import attach_api

@pytest.fixture
def api(request):
    client = ApiClient()
    yield client

    if request.node.rep_call.failed:
        attach_api(client.last_response)

# lets the fixture above see how the test ended
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    outcome = yield
    setattr(item, "rep_" + outcome.get_result().when, outcome.get_result())
Put the hook in conftest.py. pytest picks one up from a test module too, but only for that module's own tests - a conftest covers every test under it.
3Not only API calls
Anything you would otherwise dig out of a terminal can go here beside the call it belongs to.
attach_json({"expected": order, "got": body}, name="Diff")
attach_text(query, name="Query", format="sql")
attach_file("payloads/order.json")
Credentials are blanked out before anything is written - in headers, in a ?api_key= query string, in the curl line and in the fields of a JSON body. A report is a build artifact, and it gets published.
Test Coverage
How much of the code under test this run actually ran
75.7% covered
5385
Statements
4076
Covered
1309
Missing
23
Files
2
Excluded
Measured by pytest-cov during this run Annotated source
Coverage across the last builds
File Statements Missing Branches Coverage Missing lines
pytest_html_reporter/__init__.py 5 5 0% 1, 3-5, 7
pytest_html_reporter/__main__.py 2 2 0% 15, 17
pytest_html_reporter/const_vars.py 150 148 1.3% 1, 4-148, 153, 158
pytest_html_reporter/environment.py 202 101 50% 25-28, 35, 40, 45, 48, 52, 60, 67-75, 77, 80, 98-102, 106, 109, 112-113, 116, 123-124, ...
pytest_html_reporter/shim.py 37 17 54% 60-61, 64, 67, 70, 73, 76, 80, 90, 93, 99, 103, 106, 110, 119, 133, 138
pytest_html_reporter/bdd.py 40 13 67.5% 18-19, 22, 39, 45, 60, 73, 94, 99, 104, 114, 125, 145
pytest_html_reporter/report_opener.py 57 18 68.4% 18-21, 23, 25, 27, 31, 53, 57, 64, 89, 93, 100, 116, 133, 150, 162
pytest_html_reporter/shards.py 245 74 69.8% 42-49, 51, 53-54, 62, 78, 83, 89, 93, 97, 102-103, 107, 112, 143, 165, 176-179, 182, 191, ...
pytest_html_reporter/markers.py 99 27 72.7% 20, 26, 35, 42, 47, 54-55, 60, 65, 68, 76, 93, 107, 111, 119-120, 123, 146, 165, 176, 180, ...
pytest_html_reporter/steps.py 178 48 73% 39-43, 45, 51, 54, 56-58, 62, 67, 70, 79, 90, 110, 113, 116, 123, 138, 142, 147, 165, 169, ...
pytest_html_reporter/profiles.py 554 143 74.2% 70-72, 74, 82, 86-87, 91, 95, 99, 101-102, 109, 111-112, 114, 121, 135-142, 144-146, ...
pytest_html_reporter/util.py 505 125 75.2% 1-13, 15, 17-22, 32, 40, 46, 49, 66, 84, 92, 101, 106, 112-113, 116, 127, 133, 149, 157, ...
pytest_html_reporter/html_reporter.py 652 157 75.9% 1-9, 11, 13-33, 68-70, 75, 84, 88, 92, 99, 107-108, 114, 118-119, 123-124, 127, 140-141, ...
pytest_html_reporter/step_report.py 208 47 77.4% 20, 22-34, 45, 53, 58, 64, 67, 70, 97, 111, 123, 127, 141, 155, 162, 172, 190, 221, 241, ...
pytest_html_reporter/attachments.py 211 46 78.2% 16-19, 21-22, 26, 29, 31-32, 34, 40, 46, 51, 57, 65, 81, 102, 109, 114, 133, 162, 173, ...
pytest_html_reporter/screenshots.py 128 26 79.7% 19-20, 22, 24-25, 29, 34, 41, 53, 59, 64, 72, 80, 85, 106, 118, 144, 157, 189, 207, 213, ...
pytest_html_reporter/junit.py 301 55 81.7% 32-39, 41, 43-45, 54, 59, 63, 65, 69, 79, 83, 90, 105, 126, 139, 190, 196, 199, 202, 212, ...
pytest_html_reporter/plugin.py 106 19 82.1% 1-2, 4, 6-8, 18-20, 29, 50, 515, 526, 530, 553, 617, 631, 638-639
pytest_html_reporter/time_converter.py 23 4 82.6% 1, 4, 23, 30
pytest_html_reporter/coverage_report.py 345 59 82.9% 18-22, 24-28, 30, 34, 37, 42, 46, 53, 61, 70, 84, 111, 119, 136, 157, 171, 190, 192, 197, ...
pytest_html_reporter/merge.py 572 95 83.4% 41-46, 48-51, 60-61, 68-70, 85, 87, 89, 95-96, 98, 101, 112, 120, 173, 180, 204, 249, 286, ...
pytest_html_reporter/analytics.py 465 75 83.9% 16-21, 23-30, 34-35, 41, 44, 47-48, 52, 55-56, 62, 65, 83, 89, 95, 102, 105, 145, 152, ...
pytest_html_reporter/cli.py 300 5 98.3% 100, 103, 256, 556, 559
No test coverage in this run
Measure it and this tab fills itself in - the percentage, the split by file, and the lines nothing touched - beside the tests that did the measuring.
1Run with coverage
Nothing else to configure. Whatever pytest-cov measured is read straight out of the finished run, so the number here is the number your terminal just printed.
pip install pytest-cov

pytest --cov=my_package --cov-branch
my_package is yours to fill in. --cov takes the import name or the path of the code under test - not the tests, and not a folder that is not there: point it at one and the run measures nothing at all.
2Or read a report you already havefor CI
When coverage was produced by an earlier step rather than by this run. A coverage.json, a Cobertura coverage.xml or a .coverage data file all work - and the first two are found without being named if they sit beside the report.
pytest --report-coverage-file=coverage.xml
3Keep the annotated source a click away
Line-by-line source is the one thing a summary cannot replace. Generate it and it is linked from the card above; --report-link does the same for any page of your own.
pytest --cov=my_package --cov-report=html

# anything else worth reaching from the side nav
pytest --report-link "Coverage=htmlcov/index.html"
Read, never re-run, and never framed in. Embedding htmlcov would empty this tab the moment the report was mailed on its own - so the figures are rendered here and the annotated source is linked.