Skip to content

Commit 5438769

Browse files
authored
[INF] Test-driving split slow and fast tests. (#1091)
* Test-driving split slow and fast tests. * Ensure tests do not fail fast. * FIx reference to matrix. * Fix bug w.r.t. test subset * add gh into utilities. * Split tests into turtle vs non-turtle. * Mark turtle tests. * Marked more tests as turtle.
1 parent 7e35281 commit 5438769

File tree

5 files changed

+47
-3
lines changed

5 files changed

+47
-3
lines changed

.devcontainer/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ RUN apt-get update \
2929
#
3030
# Install pylint
3131
&& /opt/conda/bin/pip install pylint \
32-
&& /opt/conda/bin/conda install mamba -c conda-forge \
32+
&& /opt/conda/bin/conda install mamba gh -c conda-forge \
3333
#
3434
# Update Python environment based on environment-dev.yml (if present)
3535
&& if [ -f "/tmp/conda-tmp/environment-dev.yml" ]; then /opt/conda/bin/mamba env update -n base -f /tmp/conda-tmp/environment-dev.yml; fi \

.github/workflows/tests.yml

+5-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ on: [pull_request]
44

55
jobs:
66
run-tests:
7+
strategy:
8+
fail-fast: false
9+
matrix:
10+
test-subset: ["turtle", "not turtle"]
711
runs-on: ubuntu-latest
812
name: Run pyjanitor test suite
913

@@ -31,7 +35,7 @@ jobs:
3135
run: |
3236
conda activate pyjanitor-dev
3337
python -m pip install -e .
34-
make test
38+
pytest -m "${{ matrix.test-subset }}"
3539
3640
# https://github.com/codecov/codecov-action
3741
- name: Upload code coverage

pytest.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[pytest]
22
# always check coverage of janitor.
3-
addopts = --cov=janitor --cov-report term-missing --cov-report xml --durations=0 --doctest-modules --doctest-glob="janitor/*.py" --ignore-glob="nbconvert_config.py"
3+
addopts = --cov=janitor --cov-report term-missing --cov-report xml --durations=0 --doctest-modules --doctest-glob="janitor/*.py" --ignore-glob="nbconvert_config.py" -v -n auto --color=yes
44
markers =
55
functions: test for general functions
66
biology: tests for biology

tests/functions/test_conditional_join.py

+38
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,7 @@ def test_how_left(df, right):
591591

592592
@pytest.mark.turtle
593593
@given(df=conditional_df(), right=conditional_right())
594+
@pytest.mark.turtle
594595
def test_how_right(df, right):
595596
"""Test output when `how==right`. ">"."""
596597

@@ -614,6 +615,7 @@ def test_how_right(df, right):
614615
assert_frame_equal(expected, actual)
615616

616617

618+
@pytest.mark.turtle
617619
@settings(deadline=None)
618620
@given(df=conditional_df(), right=conditional_right())
619621
def test_dual_conditions_gt_and_lt_dates(df, right):
@@ -648,6 +650,7 @@ def test_dual_conditions_gt_and_lt_dates(df, right):
648650

649651
@settings(deadline=None)
650652
@given(df=conditional_df(), right=conditional_right())
653+
@pytest.mark.turtle
651654
def test_dual_conditions_ge_and_le_dates(df, right):
652655
"""Test output for interval conditions."""
653656

@@ -677,6 +680,7 @@ def test_dual_conditions_ge_and_le_dates(df, right):
677680

678681
@settings(deadline=None)
679682
@given(df=conditional_df(), right=conditional_right())
683+
@pytest.mark.turtle
680684
def test_dual_conditions_le_and_ge_dates(df, right):
681685
"""Test output for interval conditions, if "<" comes before ">"."""
682686

@@ -703,6 +707,7 @@ def test_dual_conditions_le_and_ge_dates(df, right):
703707
assert_frame_equal(expected, actual)
704708

705709

710+
@pytest.mark.turtle
706711
@settings(deadline=None)
707712
@given(df=conditional_df(), right=conditional_right())
708713
def test_dual_conditions_ge_and_le_dates_right_open(df, right):
@@ -734,6 +739,7 @@ def test_dual_conditions_ge_and_le_dates_right_open(df, right):
734739
assert_frame_equal(expected, actual)
735740

736741

742+
@pytest.mark.turtle
737743
@settings(deadline=None)
738744
@given(df=conditional_df(), right=conditional_right())
739745
def test_dual_conditions_ge_and_le_numbers(df, right):
@@ -763,6 +769,7 @@ def test_dual_conditions_ge_and_le_numbers(df, right):
763769

764770
@settings(deadline=None)
765771
@given(df=conditional_df(), right=conditional_right())
772+
@pytest.mark.turtle
766773
def test_dual_conditions_le_and_ge_numbers(df, right):
767774
"""
768775
Test output for interval conditions,
@@ -792,6 +799,7 @@ def test_dual_conditions_le_and_ge_numbers(df, right):
792799
assert_frame_equal(expected, actual)
793800

794801

802+
@pytest.mark.turtle
795803
@settings(deadline=None)
796804
@given(df=conditional_df(), right=conditional_right())
797805
def test_dual_conditions_gt_and_lt_numbers(df, right):
@@ -823,6 +831,7 @@ def test_dual_conditions_gt_and_lt_numbers(df, right):
823831

824832
@settings(deadline=None)
825833
@given(df=conditional_df(), right=conditional_right())
834+
@pytest.mark.turtle
826835
def test_dual_conditions_gt_and_lt_numbers_left_open(df, right):
827836
"""Test output for interval conditions."""
828837

@@ -848,6 +857,7 @@ def test_dual_conditions_gt_and_lt_numbers_left_open(df, right):
848857
assert_frame_equal(expected, actual)
849858

850859

860+
@pytest.mark.turtle
851861
@settings(deadline=None)
852862
@given(df=conditional_df(), right=conditional_right())
853863
def test_dual_conditions_gt_and_lt_numbers_(df, right):
@@ -881,6 +891,7 @@ def test_dual_conditions_gt_and_lt_numbers_(df, right):
881891

882892
@settings(deadline=None)
883893
@given(df=conditional_df(), right=conditional_right())
894+
@pytest.mark.turtle
884895
def test_dual_conditions_gt_and_lt_numbers_left_join(df, right):
885896
"""
886897
Test output for multiple conditions, and how is `left`.
@@ -912,6 +923,7 @@ def test_dual_conditions_gt_and_lt_numbers_left_join(df, right):
912923
assert_frame_equal(expected, actual)
913924

914925

926+
@pytest.mark.turtle
915927
@settings(deadline=None)
916928
@given(df=conditional_df(), right=conditional_right())
917929
def test_dual_conditions_gt_and_lt_numbers_right_join(df, right):
@@ -947,6 +959,7 @@ def test_dual_conditions_gt_and_lt_numbers_right_join(df, right):
947959
assert_frame_equal(expected, actual)
948960

949961

962+
@pytest.mark.turtle
950963
@settings(deadline=None)
951964
@given(df=conditional_df(), right=conditional_right())
952965
def test_dual_ne_extension(df, right):
@@ -973,6 +986,7 @@ def test_dual_ne_extension(df, right):
973986
assert_frame_equal(expected, actual)
974987

975988

989+
@pytest.mark.turtle
976990
@settings(deadline=None)
977991
@given(df=conditional_df(), right=conditional_right())
978992
def test_dual_ne(df, right):
@@ -1004,6 +1018,7 @@ def test_dual_ne(df, right):
10041018
assert_frame_equal(expected, actual)
10051019

10061020

1021+
@pytest.mark.turtle
10071022
@settings(deadline=None)
10081023
@given(df=conditional_df(), right=conditional_right())
10091024
def test_dual_ne_dates(df, right):
@@ -1036,6 +1051,7 @@ def test_dual_ne_dates(df, right):
10361051

10371052
@settings(deadline=None)
10381053
@given(df=conditional_df(), right=conditional_right())
1054+
@pytest.mark.turtle
10391055
def test_multiple_ne_dates(df, right):
10401056
"""
10411057
Test output for multiple conditions. `!=`
@@ -1069,6 +1085,7 @@ def test_multiple_ne_dates(df, right):
10691085
assert_frame_equal(expected, actual)
10701086

10711087

1088+
@pytest.mark.turtle
10721089
@settings(deadline=None)
10731090
@given(df=conditional_df(), right=conditional_right())
10741091
def test_dual_conditions_eq_and_ne(df, right):
@@ -1100,6 +1117,7 @@ def test_dual_conditions_eq_and_ne(df, right):
11001117
assert_frame_equal(expected, actual)
11011118

11021119

1120+
@pytest.mark.turtle
11031121
@settings(deadline=None)
11041122
@given(df=conditional_df(), right=conditional_right())
11051123
def test_dual_conditions_ne_and_eq(df, right):
@@ -1130,6 +1148,7 @@ def test_dual_conditions_ne_and_eq(df, right):
11301148

11311149
@settings(deadline=None)
11321150
@given(df=conditional_df(), right=conditional_right())
1151+
@pytest.mark.turtle
11331152
def test_gt_lt_ne_conditions(df, right):
11341153
"""
11351154
Test output for multiple conditions.
@@ -1163,6 +1182,7 @@ def test_gt_lt_ne_conditions(df, right):
11631182
assert_frame_equal(expected, actual)
11641183

11651184

1185+
@pytest.mark.turtle
11661186
@settings(deadline=None)
11671187
@given(df=conditional_df(), right=conditional_right())
11681188
def test_gt_ne_conditions(df, right):
@@ -1193,6 +1213,7 @@ def test_gt_ne_conditions(df, right):
11931213
assert_frame_equal(expected, actual)
11941214

11951215

1216+
@pytest.mark.turtle
11961217
@settings(deadline=None)
11971218
@given(df=conditional_df(), right=conditional_right())
11981219
def test_le_ne_conditions(df, right):
@@ -1225,6 +1246,7 @@ def test_le_ne_conditions(df, right):
12251246

12261247
@settings(deadline=None)
12271248
@given(df=conditional_df(), right=conditional_right())
1249+
@pytest.mark.turtle
12281250
def test_gt_lt_ne_start(df, right):
12291251
"""
12301252
Test output for multiple conditions.
@@ -1260,6 +1282,7 @@ def test_gt_lt_ne_start(df, right):
12601282

12611283
@settings(deadline=None)
12621284
@given(df=conditional_df(), right=conditional_right())
1285+
@pytest.mark.turtle
12631286
def test_ge_le_ne_extension_array(df, right):
12641287
"""
12651288
Test output for multiple conditions.
@@ -1294,6 +1317,7 @@ def test_ge_le_ne_extension_array(df, right):
12941317
assert_frame_equal(expected, actual)
12951318

12961319

1320+
@pytest.mark.turtle
12971321
@settings(deadline=None)
12981322
@given(df=conditional_df(), right=conditional_right())
12991323
def test_ge_lt_ne_extension(df, right):
@@ -1332,6 +1356,7 @@ def test_ge_lt_ne_extension(df, right):
13321356
assert_frame_equal(expected, actual)
13331357

13341358

1359+
@pytest.mark.turtle
13351360
@settings(deadline=None)
13361361
@given(df=conditional_df(), right=conditional_right())
13371362
def test_eq_ge_and_le_numbers(df, right):
@@ -1362,6 +1387,7 @@ def test_eq_ge_and_le_numbers(df, right):
13621387
assert_frame_equal(expected, actual)
13631388

13641389

1390+
@pytest.mark.turtle
13651391
@settings(deadline=None)
13661392
@given(df=conditional_df(), right=conditional_right())
13671393
def test_dual_ge_and_le_diff_numbers(df, right):
@@ -1392,6 +1418,7 @@ def test_dual_ge_and_le_diff_numbers(df, right):
13921418
assert_frame_equal(expected, actual)
13931419

13941420

1421+
@pytest.mark.turtle
13951422
@settings(deadline=None)
13961423
@given(df=conditional_df(), right=conditional_right())
13971424
def test_ge_lt_ne_extension_variant(df, right):
@@ -1428,6 +1455,7 @@ def test_ge_lt_ne_extension_variant(df, right):
14281455
assert_frame_equal(expected, actual)
14291456

14301457

1458+
@pytest.mark.turtle
14311459
@settings(deadline=None)
14321460
@given(df=conditional_df(), right=conditional_right())
14331461
def test_ge_eq_and_le_numbers_variant(df, right):
@@ -1460,6 +1488,7 @@ def test_ge_eq_and_le_numbers_variant(df, right):
14601488

14611489
@settings(deadline=None)
14621490
@given(df=conditional_df(), right=conditional_right())
1491+
@pytest.mark.turtle
14631492
def test_multiple_eqs_variant(df, right):
14641493
"""Test output for multiple conditions."""
14651494

@@ -1492,6 +1521,7 @@ def test_multiple_eqs_variant(df, right):
14921521
assert_frame_equal(expected, actual)
14931522

14941523

1524+
@pytest.mark.turtle
14951525
@settings(deadline=None)
14961526
@given(df=conditional_df(), right=conditional_right())
14971527
def test_dual_ge_and_le_range_numbers(df, right):
@@ -1524,6 +1554,7 @@ def test_dual_ge_and_le_range_numbers(df, right):
15241554

15251555
@settings(deadline=None)
15261556
@given(df=conditional_df(), right=conditional_right())
1557+
@pytest.mark.turtle
15271558
def test_ge_eq_and_le_numbers(df, right):
15281559
"""Test output for multiple conditions."""
15291560

@@ -1552,6 +1583,7 @@ def test_ge_eq_and_le_numbers(df, right):
15521583
assert_frame_equal(expected, actual)
15531584

15541585

1586+
@pytest.mark.turtle
15551587
@settings(deadline=None)
15561588
@given(df=conditional_df(), right=conditional_right())
15571589
def test_multiple_non_equi(df, right):
@@ -1590,6 +1622,7 @@ def test_multiple_non_equi(df, right):
15901622

15911623
@settings(deadline=None)
15921624
@given(df=conditional_df(), right=conditional_right())
1625+
@pytest.mark.turtle
15931626
def test_multiple_non_equii(df, right):
15941627
"""Test output for multiple conditions."""
15951628

@@ -1625,6 +1658,7 @@ def test_multiple_non_equii(df, right):
16251658
assert_frame_equal(expected, actual)
16261659

16271660

1661+
@pytest.mark.turtle
16281662
@settings(deadline=None)
16291663
@given(df=conditional_df(), right=conditional_right())
16301664
def test_multiple_non_eqi(df, right):
@@ -1660,6 +1694,7 @@ def test_multiple_non_eqi(df, right):
16601694
assert_frame_equal(expected, actual)
16611695

16621696

1697+
@pytest.mark.turtle
16631698
@settings(deadline=None)
16641699
@given(df=conditional_df(), right=conditional_right())
16651700
def test_multiple_non_eq(df, right):
@@ -1696,6 +1731,7 @@ def test_multiple_non_eq(df, right):
16961731
assert_frame_equal(expected, actual)
16971732

16981733

1734+
@pytest.mark.turtle
16991735
@settings(deadline=None)
17001736
@given(df=conditional_df(), right=conditional_right())
17011737
def test_multiple_eqs(df, right):
@@ -1730,6 +1766,7 @@ def test_multiple_eqs(df, right):
17301766
assert_frame_equal(expected, actual)
17311767

17321768

1769+
@pytest.mark.turtle
17331770
@settings(deadline=None)
17341771
@given(df=conditional_df(), right=conditional_right())
17351772
def test_multiple_eqs_extension_array(df, right):
@@ -1765,6 +1802,7 @@ def test_multiple_eqs_extension_array(df, right):
17651802
assert_frame_equal(expected, actual)
17661803

17671804

1805+
@pytest.mark.turtle
17681806
@settings(deadline=None)
17691807
@given(df=conditional_df(), right=conditional_right())
17701808
def test_eq_strings(df, right):

tests/spark/functions/test_clean_names_spark.py

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
@pytest.mark.xfail(reason="causing issues in CI, to be fixed later")
1414
@pytest.mark.spark_functions
15+
@pytest.mark.turtle
1516
def test_clean_names_method_chain(spark_df):
1617
"""Tests clean names function in a method chain call."""
1718
spark_df = spark_df.clean_names()
@@ -25,6 +26,7 @@ def test_clean_names_method_chain(spark_df):
2526
assert set(spark_df.columns) == set(expected_columns)
2627

2728

29+
@pytest.mark.turtle
2830
@pytest.mark.xfail(reason="causing issues in CI, to be fixed later")
2931
@pytest.mark.spark_functions
3032
def test_clean_names_special_characters(spark_df):

0 commit comments

Comments
 (0)