• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

gocept / gocept.pytestlayer / 4922803443

pending completion
4922803443

push

github

Michael Howitz
Make tests compatible with pytest >= 7.3.

112 of 121 branches covered (92.56%)

Branch coverage included in aggregate %.

1079 of 1087 relevant lines covered (99.26%)

0.99 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.41
/src/gocept/pytestlayer/tests/test_integration.py
1
import os.path
1✔
2
import pytest
1✔
3
import re
1✔
4
import subprocess
1✔
5
import sys
1✔
6

7

8
normalizers = [
1✔
9
    (r'\d+\.\d+ seconds', 'N.NNN seconds'),
10
    (r'\.py:\d+: ', '.py:NN: '),
11
    (r'\.txt::runTest <- test_suite ', '.txt '),
12
    (r'\.txt::runTest ', '.txt '),
13
    (r'\.py::(test_suite)::/', r'.py <- \1: /'),
14
    (r'\.py::(test)', r'.py:NN: \1'),
15
    (r'\.py::(.*Test)::', r'.py:NN: \1.'),
16
    # Compatibility with pytest >= 7.3 which adds this line:
17
    (r'configfile: pytest.ini', ''),
18
    # With pytest >= 3.3.0 progress is reported after a test result.
19
    # matches [NNN%], [ NN%] and [  N%]
20
    (r'PASSED \[\s*\d{1,3}%\]', 'PASSED'),
21
    # needed to omit all other loaded plugins.
22
    (r'plugins:.*(gocept.pytestlayer).*\n', 'plugins: gocept.pytestlayer\n'),
23
]
24

25

26
@pytest.fixture(scope='module')
1✔
27
def where(request):
1✔
28
    '''
29
    Add a normalizer that depends on the session.
30
    to make tests results independent from the place where pytest is started
31
    '''
32
    relative = request.fspath.relto(request.session.fspath)
1✔
33
    from_src = os.path.join(
1✔
34
        'src', 'gocept', 'pytestlayer', 'tests', 'test_integration.py'
35
    )
36
    root = re.escape(relative.replace(from_src, ''))
1✔
37
    root_2 = str(request.session.fspath)
1✔
38
    normalizers.extend([
1✔
39
        (root, ''),
40
        (root_2, '')
41
    ])
42

43

44
def run_pytest(name, *args):
1✔
45
    cmd = [
1✔
46
        sys.argv[0], '-vs', '-p', 'no:removestalebytecode',
47
        '--disable-pytest-warnings',
48
        os.path.join(os.path.dirname(__file__), 'fixture', name),
49
    ]
50
    cmd.extend(args)
1✔
51
    process = subprocess.Popen(
1✔
52
        cmd,
53
        stdout=subprocess.PIPE,
54
        stderr=subprocess.STDOUT)
55
    output = process.stdout.read().decode('latin-1')
1✔
56
    for pattern, replacement in normalizers:
1✔
57
        output = re.sub(pattern, replacement, output)
1✔
58
    lines = output.splitlines(True)
1✔
59
    # Sometimes the output ends with an escape sequence so omitting them to
60
    # make tests happy:
61
    if lines[-1] == '\x1b[?1034h':
1!
62
        lines.pop(-1)
×
63
    return lines
1✔
64

65

66
def join(lines, start=4, end=1):
1✔
67
    return '\n'.join(
1✔
68
        line.rstrip() for line in lines[start:-end] if line.strip()) + '\n'
69

70

71
def test_single_layer(where):
1✔
72
    lines = run_pytest('single_layer')
1✔
73
    assert """\
1✔
74
plugins: gocept.pytestlayer
75
collecting ... collected 1 item
76
src/gocept/pytestlayer/tests/fixture/single_layer/test_core.py:NN: FooTest.test_dummy single_layer.test_core.FooLayer
77
Set up single_layer.test_core.FooLayer in N.NNN seconds.
78
testSetUp foo
79
src/gocept/pytestlayer/tests/fixture/single_layer/test_core.py:NN: FooTest.test_dummy PASSED
80
testTearDown foo
81
Tear down single_layer.test_core.FooLayer in N.NNN seconds.
82
""" == join(lines)
83
    assert '=== 1 passed' in lines[-1]
1✔
84

85

86
def test_single_layer_with_unattached_base_layer(where):
1✔
87
    lines = run_pytest('single_layer_with_unattached_base_layer')
1✔
88
    assert """\
1✔
89
plugins: gocept.pytestlayer
90
collecting ... collected 1 item
91
src/gocept/pytestlayer/tests/fixture/single_layer_with_unattached_base_layer/test_core.py:NN: FooTest.test_dummy single_layer_with_unattached_base_layer.test_core.BarLayer
92
Set up single_layer_with_unattached_base_layer.test_core.BarLayer in N.NNN seconds.
93
single_layer_with_unattached_base_layer.test_core.FooLayer
94
Set up single_layer_with_unattached_base_layer.test_core.FooLayer in N.NNN seconds.
95
testSetUp bar
96
testSetUp foo
97
src/gocept/pytestlayer/tests/fixture/single_layer_with_unattached_base_layer/test_core.py:NN: FooTest.test_dummy PASSED
98
testTearDown foo
99
testTearDown bar
100
Tear down single_layer_with_unattached_base_layer.test_core.FooLayer in N.NNN seconds.
101
Tear down single_layer_with_unattached_base_layer.test_core.BarLayer in N.NNN seconds.
102
""" == join(lines)
103
    assert '=== 1 passed' in lines[-1]
1✔
104

105

106
def test_single_layer_with_unattached_base_layer_select_layer(where):
1✔
107
    lines = run_pytest(
1✔
108
        'single_layer_with_unattached_base_layer', '-k', 'BarLayer'
109
    )
110
    assert """\
1✔
111
plugins: gocept.pytestlayer
112
collecting ... collected 1 item
113
src/gocept/pytestlayer/tests/fixture/single_layer_with_unattached_base_layer/test_core.py:NN: FooTest.test_dummy single_layer_with_unattached_base_layer.test_core.BarLayer
114
Set up single_layer_with_unattached_base_layer.test_core.BarLayer in N.NNN seconds.
115
single_layer_with_unattached_base_layer.test_core.FooLayer
116
Set up single_layer_with_unattached_base_layer.test_core.FooLayer in N.NNN seconds.
117
testSetUp bar
118
testSetUp foo
119
src/gocept/pytestlayer/tests/fixture/single_layer_with_unattached_base_layer/test_core.py:NN: FooTest.test_dummy PASSED
120
testTearDown foo
121
testTearDown bar
122
Tear down single_layer_with_unattached_base_layer.test_core.FooLayer in N.NNN seconds.
123
Tear down single_layer_with_unattached_base_layer.test_core.BarLayer in N.NNN seconds.
124
""" == join(lines)
125
    assert '=== 1 passed' in lines[-1]
1✔
126

127

128
def test_single_layer_in_two_modules(where):
1✔
129
    lines = run_pytest('single_layer_in_two_modules')
1✔
130
    assert """\
1✔
131
plugins: gocept.pytestlayer
132
collecting ... collected 2 items
133
src/gocept/pytestlayer/tests/fixture/single_layer_in_two_modules/test_core.py:NN: FooTest.test_dummy single_layer_in_two_modules.test_core.FooLayer
134
Set up single_layer_in_two_modules.test_core.FooLayer in N.NNN seconds.
135
testSetUp foo
136
src/gocept/pytestlayer/tests/fixture/single_layer_in_two_modules/test_core.py:NN: FooTest.test_dummy PASSED
137
testTearDown foo
138
src/gocept/pytestlayer/tests/fixture/single_layer_in_two_modules/test_second_module.py:NN: FooTest.test_dummy
139
testSetUp foo
140
src/gocept/pytestlayer/tests/fixture/single_layer_in_two_modules/test_second_module.py:NN: FooTest.test_dummy PASSED
141
testTearDown foo
142
Tear down single_layer_in_two_modules.test_core.FooLayer in N.NNN seconds.
143
""" == join(lines)
144
    assert '=== 2 passed' in lines[-1]
1✔
145

146

147
def test_single_layered_suite(where):
1✔
148
    lines = run_pytest('single_layered_suite')
1✔
149
    assert """\
1✔
150
plugins: gocept.pytestlayer
151
collecting ... collected 1 item
152
src/gocept/pytestlayer/tests/fixture/single_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/single_layered_suite/doctest.txt single_layered_suite.test_core.FooLayer
153
Set up single_layered_suite.test_core.FooLayer in N.NNN seconds.
154
testSetUp foo
155
src/gocept/pytestlayer/tests/fixture/single_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/single_layered_suite/doctest.txt PASSED
156
testTearDown foo
157
Tear down single_layered_suite.test_core.FooLayer in N.NNN seconds.
158
""" == join(lines)
159
    assert '=== 1 passed' in lines[-1]
1✔
160

161

162
def test_shared_with_layered_suite(where):
1✔
163
    lines = run_pytest('shared_with_layered_suite')
1✔
164
    assert """\
1✔
165
plugins: gocept.pytestlayer
166
collecting ... collected 2 items
167
src/gocept/pytestlayer/tests/fixture/shared_with_layered_suite/test_core.py:NN: FooTest.test_dummy shared_with_layered_suite.test_core.FooLayer
168
Set up shared_with_layered_suite.test_core.FooLayer in N.NNN seconds.
169
testSetUp foo
170
src/gocept/pytestlayer/tests/fixture/shared_with_layered_suite/test_core.py:NN: FooTest.test_dummy PASSED
171
testTearDown foo
172
src/gocept/pytestlayer/tests/fixture/shared_with_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/shared_with_layered_suite/mydoctest.txt
173
testSetUp foo
174
src/gocept/pytestlayer/tests/fixture/shared_with_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/shared_with_layered_suite/mydoctest.txt PASSED
175
testTearDown foo
176
Tear down shared_with_layered_suite.test_core.FooLayer in N.NNN seconds.
177
""" == join(lines)
178
    assert '=== 2 passed' in lines[-1]
1✔
179

180

181
def test_with_and_without_layer(where):
1✔
182
    lines = run_pytest('with_and_without_layer')
1✔
183
    assert """\
1✔
184
plugins: gocept.pytestlayer
185
collecting ... collected 2 items
186
src/gocept/pytestlayer/tests/fixture/with_and_without_layer/test_core.py:NN: UnitTest.test_dummy PASSED
187
src/gocept/pytestlayer/tests/fixture/with_and_without_layer/test_core.py:NN: FooTest.test_dummy with_and_without_layer.test_core.FooLayer
188
Set up with_and_without_layer.test_core.FooLayer in N.NNN seconds.
189
testSetUp foo
190
src/gocept/pytestlayer/tests/fixture/with_and_without_layer/test_core.py:NN: FooTest.test_dummy PASSED
191
testTearDown foo
192
Tear down with_and_without_layer.test_core.FooLayer in N.NNN seconds.
193
""" == join(lines)
194
    assert '=== 2 passed' in lines[-1]
1✔
195

196

197
def test_two_dependent_layers(where):
1✔
198
    lines = run_pytest('two_dependent_layers')
1✔
199
    assert """\
1✔
200
plugins: gocept.pytestlayer
201
collecting ... collected 2 items
202
src/gocept/pytestlayer/tests/fixture/two_dependent_layers/test_core.py:NN: FooTest.test_dummy two_dependent_layers.test_core.FooLayer
203
Set up two_dependent_layers.test_core.FooLayer in N.NNN seconds.
204
testSetUp foo
205
src/gocept/pytestlayer/tests/fixture/two_dependent_layers/test_core.py:NN: FooTest.test_dummy PASSED
206
testTearDown foo
207
src/gocept/pytestlayer/tests/fixture/two_dependent_layers/test_core.py:NN: BarTest.test_dummy two_dependent_layers.test_core.BarLayer
208
Set up two_dependent_layers.test_core.BarLayer in N.NNN seconds.
209
testSetUp foo
210
testSetUp bar
211
src/gocept/pytestlayer/tests/fixture/two_dependent_layers/test_core.py:NN: BarTest.test_dummy PASSED
212
testTearDown bar
213
testTearDown foo
214
Tear down two_dependent_layers.test_core.BarLayer in N.NNN seconds.
215
Tear down two_dependent_layers.test_core.FooLayer in N.NNN seconds.
216
""" == join(lines)
217
    assert '=== 2 passed' in lines[-1]
1✔
218

219

220
def test_two_dependent_layered_suites(where):
1✔
221
    lines = run_pytest('two_dependent_layered_suites')
1✔
222
    assert """\
1✔
223
plugins: gocept.pytestlayer
224
collecting ... collected 2 items
225
src/gocept/pytestlayer/tests/fixture/two_dependent_layered_suites/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/two_dependent_layered_suites/foo.txt two_dependent_layered_suites.test_core.FooLayer
226
Set up two_dependent_layered_suites.test_core.FooLayer in N.NNN seconds.
227
testSetUp foo
228
src/gocept/pytestlayer/tests/fixture/two_dependent_layered_suites/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/two_dependent_layered_suites/foo.txt PASSED
229
testTearDown foo
230
src/gocept/pytestlayer/tests/fixture/two_dependent_layered_suites/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/two_dependent_layered_suites/bar.txt two_dependent_layered_suites.test_core.BarLayer
231
Set up two_dependent_layered_suites.test_core.BarLayer in N.NNN seconds.
232
testSetUp foo
233
testSetUp bar
234
src/gocept/pytestlayer/tests/fixture/two_dependent_layered_suites/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/two_dependent_layered_suites/bar.txt PASSED
235
testTearDown bar
236
testTearDown foo
237
Tear down two_dependent_layered_suites.test_core.BarLayer in N.NNN seconds.
238
Tear down two_dependent_layered_suites.test_core.FooLayer in N.NNN seconds.
239
""" == join(lines)
240
    assert '=== 2 passed' in lines[-1]
1✔
241

242

243
def test_two_independent_layers(where):
1✔
244
    lines = run_pytest('two_independent_layers')
1✔
245
    assert """\
1✔
246
plugins: gocept.pytestlayer
247
collecting ... collected 2 items
248
src/gocept/pytestlayer/tests/fixture/two_independent_layers/test_core.py:NN: FooTest.test_dummy two_independent_layers.test_core.FooLayer
249
Set up two_independent_layers.test_core.FooLayer in N.NNN seconds.
250
testSetUp foo
251
src/gocept/pytestlayer/tests/fixture/two_independent_layers/test_core.py:NN: FooTest.test_dummy PASSED
252
testTearDown foo
253
Tear down two_independent_layers.test_core.FooLayer in N.NNN seconds.
254
src/gocept/pytestlayer/tests/fixture/two_independent_layers/test_core.py:NN: BarTest.test_dummy two_independent_layers.test_core.BarLayer
255
Set up two_independent_layers.test_core.BarLayer in N.NNN seconds.
256
testSetUp bar
257
src/gocept/pytestlayer/tests/fixture/two_independent_layers/test_core.py:NN: BarTest.test_dummy PASSED
258
testTearDown bar
259
Tear down two_independent_layers.test_core.BarLayer in N.NNN seconds.
260
""" == join(lines)
261
    assert '=== 2 passed' in lines[-1]
1✔
262

263

264
@pytest.mark.xfail(
1✔
265
    reason='ordering by layers does not optimize for fewer set-ups')
266
def test_keep_layer_across_test_classes(where):
1✔
267
    lines = run_pytest('keep_layer_across_test_classes')
1✔
268
    assert """\
1✔
269
plugins: gocept.pytestlayer
270
collecting ... collected 3 items
271
src/gocept/pytestlayer/tests/fixture/keep_layer_across_test_classes/test_core.py:NN: FooTest.test_dummy order_by_layer.test_core.FooLayer
272
Set up keep_layer_across_test_classes.test_core.FooLayer in N.NNN seconds.
273
testSetUp foo
274
src/gocept/pytestlayer/tests/fixture/keep_layer_across_test_classes/test_core.py:NN: FooTest.test_dummy PASSED
275
testTearDown foo
276
src/gocept/pytestlayer/tests/fixture/keep_layer_across_test_classes/test_core.py:NN: FooBarTest.test_dummy order_by_layer.test_core.BarLayer
277
Set up keep_layer_across_test_classes.test_core.FooBarLayer in N.NNN seconds.
278
testSetUp foo
279
testSetUp bar
280
testSetUp foobar
281
src/gocept/pytestlayer/tests/fixture/keep_layer_across_test_classes/test_core.py:NN: FooBarTest.test_dummy PASSED
282
testTearDown foobar
283
testTearDown bar
284
testTearDown foo
285
Tear down keep_layer_across_test_classes.test_core.FooBarLayer in N.NNN seconds.
286
Tear down keep_layer_across_test_classes.test_core.FooLayer in N.NNN seconds.
287
src/gocept/pytestlayer/tests/fixture/keep_layer_across_test_classes/test_core.py:NN: BarTest.test_dummy order_by_layer.test_core.FooLayer
288
Set up keep_layer_across_test_classes.test_core.BarLayer in N.NNN seconds.
289
testSetUp bar
290
src/gocept/pytestlayer/tests/fixture/keep_layer_across_test_classes/test_core.py:NN: BarTest.test_dummy PASSED
291
testTearDown bar
292
Tear down keep_layer_across_test_classes.test_core.BarLayer in N.NNN seconds.
293
""" == join(lines)
294
    assert '=== 3 passed' in lines[-1]
×
295

296

297
def test_order_by_layer(where):
1✔
298
    lines = run_pytest('order_by_layer')
1✔
299
    assert """\
1✔
300
plugins: gocept.pytestlayer
301
collecting ... collected 4 items
302
src/gocept/pytestlayer/tests/fixture/order_by_layer/test_core.py:NN: FooTest.test_dummy order_by_layer.test_core.FooLayer
303
Set up order_by_layer.test_core.FooLayer in N.NNN seconds.
304
testSetUp foo
305
src/gocept/pytestlayer/tests/fixture/order_by_layer/test_core.py:NN: FooTest.test_dummy PASSED
306
testTearDown foo
307
Tear down order_by_layer.test_core.FooLayer in N.NNN seconds.
308
src/gocept/pytestlayer/tests/fixture/order_by_layer/test_core.py:NN: BarTest.test_dummy order_by_layer.test_core.BarLayer
309
Set up order_by_layer.test_core.BarLayer in N.NNN seconds.
310
testSetUp bar
311
src/gocept/pytestlayer/tests/fixture/order_by_layer/test_core.py:NN: BarTest.test_dummy PASSED
312
testTearDown bar
313
src/gocept/pytestlayer/tests/fixture/order_by_layer/test_core.py:NN: Bar2Test.test_dummy
314
testSetUp bar
315
src/gocept/pytestlayer/tests/fixture/order_by_layer/test_core.py:NN: Bar2Test.test_dummy PASSED
316
testTearDown bar
317
src/gocept/pytestlayer/tests/fixture/order_by_layer/test_core.py:NN: FooBarTest.test_dummy order_by_layer.test_core.FooLayer
318
Set up order_by_layer.test_core.FooLayer in N.NNN seconds.
319
order_by_layer.test_core.FooBarLayer
320
Set up order_by_layer.test_core.FooBarLayer in N.NNN seconds.
321
testSetUp foo
322
testSetUp bar
323
testSetUp foobar
324
src/gocept/pytestlayer/tests/fixture/order_by_layer/test_core.py:NN: FooBarTest.test_dummy PASSED
325
testTearDown foobar
326
testTearDown bar
327
testTearDown foo
328
Tear down order_by_layer.test_core.FooBarLayer in N.NNN seconds.
329
Tear down order_by_layer.test_core.BarLayer in N.NNN seconds.
330
Tear down order_by_layer.test_core.FooLayer in N.NNN seconds.
331
""" == join(lines)
332
    assert '=== 4 passed' in lines[-1]
1✔
333

334

335
def test_order_with_layered_suite(where):
1✔
336
    lines = run_pytest('order_with_layered_suite')
1✔
337
    assert """\
1✔
338
plugins: gocept.pytestlayer
339
collecting ... collected 6 items
340
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py:NN: FooTest.test_dummy order_with_layered_suite.test_core.FooLayer
341
Set up order_with_layered_suite.test_core.FooLayer in N.NNN seconds.
342
testSetUp foo
343
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py:NN: FooTest.test_dummy PASSED
344
testTearDown foo
345
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/foo.txt
346
testSetUp foo
347
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/foo.txt PASSED
348
testTearDown foo
349
Tear down order_with_layered_suite.test_core.FooLayer in N.NNN seconds.
350
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py:NN: BarTest.test_dummy order_with_layered_suite.test_core.BarLayer
351
Set up order_with_layered_suite.test_core.BarLayer in N.NNN seconds.
352
testSetUp bar
353
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py:NN: BarTest.test_dummy PASSED
354
testTearDown bar
355
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py:NN: Bar2Test.test_dummy
356
testSetUp bar
357
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py:NN: Bar2Test.test_dummy PASSED
358
testTearDown bar
359
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py:NN: FooBarTest.test_dummy order_with_layered_suite.test_core.FooLayer
360
Set up order_with_layered_suite.test_core.FooLayer in N.NNN seconds.
361
order_with_layered_suite.test_core.FooBarLayer
362
Set up order_with_layered_suite.test_core.FooBarLayer in N.NNN seconds.
363
testSetUp foo
364
testSetUp bar
365
testSetUp foobar
366
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py:NN: FooBarTest.test_dummy PASSED
367
testTearDown foobar
368
testTearDown bar
369
testTearDown foo
370
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/foobar.txt
371
testSetUp foo
372
testSetUp bar
373
testSetUp foobar
374
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/foobar.txt PASSED
375
testTearDown foobar
376
testTearDown bar
377
testTearDown foo
378
Tear down order_with_layered_suite.test_core.FooBarLayer in N.NNN seconds.
379
Tear down order_with_layered_suite.test_core.BarLayer in N.NNN seconds.
380
Tear down order_with_layered_suite.test_core.FooLayer in N.NNN seconds.
381
""" == join(lines)
382
    assert '=== 6 passed' in lines[-1]
1✔
383

384

385
def test_order_with_layered_suite_select_layer(where):
1✔
386
    lines = run_pytest('order_with_layered_suite', '-k', 'FooLayer')
1✔
387
    assert """\
1✔
388
plugins: gocept.pytestlayer
389
collecting ... collected 6 items / 2 deselected / 4 selected
390
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py:NN: FooTest.test_dummy order_with_layered_suite.test_core.FooLayer
391
Set up order_with_layered_suite.test_core.FooLayer in N.NNN seconds.
392
testSetUp foo
393
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py:NN: FooTest.test_dummy PASSED
394
testTearDown foo
395
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/foo.txt
396
testSetUp foo
397
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/foo.txt PASSED
398
testTearDown foo
399
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py:NN: FooBarTest.test_dummy order_with_layered_suite.test_core.BarLayer
400
Set up order_with_layered_suite.test_core.BarLayer in N.NNN seconds.
401
order_with_layered_suite.test_core.FooBarLayer
402
Set up order_with_layered_suite.test_core.FooBarLayer in N.NNN seconds.
403
testSetUp foo
404
testSetUp bar
405
testSetUp foobar
406
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py:NN: FooBarTest.test_dummy PASSED
407
testTearDown foobar
408
testTearDown bar
409
testTearDown foo
410
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/foobar.txt
411
testSetUp foo
412
testSetUp bar
413
testSetUp foobar
414
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/foobar.txt PASSED
415
testTearDown foobar
416
testTearDown bar
417
testTearDown foo
418
Tear down order_with_layered_suite.test_core.FooBarLayer in N.NNN seconds.
419
Tear down order_with_layered_suite.test_core.BarLayer in N.NNN seconds.
420
Tear down order_with_layered_suite.test_core.FooLayer in N.NNN seconds.
421
""" == join(lines, end=2)
422
    assert '4 passed, 2 deselected' in lines[-1]
1✔
423

424

425
def test_order_with_layered_suite_select_doctest(where):
1✔
426
    lines = run_pytest('order_with_layered_suite', '-k', 'foobar and txt')
1✔
427
    assert """\
1✔
428
plugins: gocept.pytestlayer
429
collecting ... collected 6 items / 5 deselected / 1 selected
430
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/foobar.txt order_with_layered_suite.test_core.FooLayer
431
Set up order_with_layered_suite.test_core.FooLayer in N.NNN seconds.
432
order_with_layered_suite.test_core.BarLayer
433
Set up order_with_layered_suite.test_core.BarLayer in N.NNN seconds.
434
order_with_layered_suite.test_core.FooBarLayer
435
Set up order_with_layered_suite.test_core.FooBarLayer in N.NNN seconds.
436
testSetUp foo
437
testSetUp bar
438
testSetUp foobar
439
src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/test_core.py <- test_suite: /src/gocept/pytestlayer/tests/fixture/order_with_layered_suite/foobar.txt PASSED
440
testTearDown foobar
441
testTearDown bar
442
testTearDown foo
443
Tear down order_with_layered_suite.test_core.FooBarLayer in N.NNN seconds.
444
Tear down order_with_layered_suite.test_core.BarLayer in N.NNN seconds.
445
Tear down order_with_layered_suite.test_core.FooLayer in N.NNN seconds.
446
""" == join(lines, end=2)
447
    assert '1 passed, 5 deselected' in lines[-1]
1✔
448

449

450
def test_works_even_without_any_setup_or_teardown_methods(where):
1✔
451
    lines = run_pytest('no_setup_or_teardown')
1✔
452
    assert """\
1✔
453
plugins: gocept.pytestlayer
454
collecting ... collected 1 item
455
src/gocept/pytestlayer/tests/fixture/no_setup_or_teardown/test_core.py:NN: FooTest.test_dummy PASSED
456
""" == join(lines)
457
    assert '=== 1 passed' in lines[-1]
1✔
458

459

460
def test_nice_error_message_if_layer_has_no_bases(where):
1✔
461
    lines = run_pytest('bad_layer')
1✔
462
    assert """\
1✔
463
has no __bases__ attribute. Layers may be of two sorts: class or instance with __bases__ attribute.\
464
""" in join(lines)
465
    assert '1 error in ' in lines[-1]
1✔
466

467

468
def test_creating_different_fixtures_for_layers_with_the_same_name(where):
1✔
469
    lines = run_pytest('layers_with_same_name')
1✔
470
    assert """\
1✔
471
plugins: gocept.pytestlayer
472
collecting ... collected 2 items
473
src/gocept/pytestlayer/tests/fixture/layers_with_same_name/test_core.py:NN: FooTest.test_dummy layers_with_same_name.test_core.TestLayer
474
Set up layers_with_same_name.test_core.TestLayer in N.NNN seconds.
475
src/gocept/pytestlayer/tests/fixture/layers_with_same_name/test_core.py:NN: FooTest.test_dummy PASSED
476
Tear down layers_with_same_name.test_core.TestLayer in N.NNN seconds.
477
src/gocept/pytestlayer/tests/fixture/layers_with_same_name/test_core.py:NN: BarTest.test_dummy layers_with_same_name.test_core.TestLayer
478
Set up layers_with_same_name.test_core.TestLayer in N.NNN seconds.
479
src/gocept/pytestlayer/tests/fixture/layers_with_same_name/test_core.py:NN: BarTest.test_dummy PASSED
480
Tear down layers_with_same_name.test_core.TestLayer in N.NNN seconds.
481
""" == join(lines)
482
    assert '=== 2 passed' in lines[-1]
1✔
483

484

485
def test_selection_of_doctest_names(where):
1✔
486
    lines = run_pytest('single_layered_suite', '-k', 'mydoctest')
1✔
487
    assert "1 deselected" in join(lines)
1✔
488

489

490
def test_fixture_create_allows_overriding_names(where):
1✔
491
    lines = run_pytest('custom_fixture_name')
1✔
492
    assert """\
1✔
493
plugins: gocept.pytestlayer
494
collecting ... collected 2 items
495
src/gocept/pytestlayer/tests/fixture/custom_fixture_name/test_core.py:NN: test_can_access_layer_via_fixture custom_fixture_name.test_core.FooLayer
496
Set up custom_fixture_name.test_core.FooLayer in N.NNN seconds.
497
testSetUp foo
498
src/gocept/pytestlayer/tests/fixture/custom_fixture_name/test_core.py:NN: test_can_access_layer_via_fixture PASSED
499
testTearDown foo
500
src/gocept/pytestlayer/tests/fixture/custom_fixture_name/test_core.py:NN: FooTest.test_accesses_fixture_with_generated_name_for_layer
501
testSetUp foo
502
src/gocept/pytestlayer/tests/fixture/custom_fixture_name/test_core.py:NN: FooTest.test_accesses_fixture_with_generated_name_for_layer PASSED
503
testTearDown foo
504
Tear down custom_fixture_name.test_core.FooLayer in N.NNN seconds.
505
""" == join(lines)
506
    assert '=== 2 passed' in lines[-1]
1✔
507

508

509
def test_if_session_fixture_is_used_class_fixtures_are_ignored(where):
1✔
510
    lines = run_pytest('session_fixture')
1✔
511
    assert """\
1✔
512
plugins: gocept.pytestlayer
513
collecting ... collected 2 items
514
src/gocept/pytestlayer/tests/fixture/session_fixture/test_core.py:NN: test_can_access_layer_via_fixture session_fixture.test_core.FooLayer
515
Set up session_fixture.test_core.FooLayer in N.NNN seconds.
516
src/gocept/pytestlayer/tests/fixture/session_fixture/test_core.py:NN: test_can_access_layer_via_fixture PASSED
517
src/gocept/pytestlayer/tests/fixture/session_fixture/test_core.py:NN: FooTest.test_accesses_fixture_with_generated_name_for_layer
518
testSetUp foo
519
src/gocept/pytestlayer/tests/fixture/session_fixture/test_core.py:NN: FooTest.test_accesses_fixture_with_generated_name_for_layer PASSED
520
testTearDown foo
521
Tear down session_fixture.test_core.FooLayer in N.NNN seconds.
522
""" == join(lines)
523
    assert '=== 2 passed' in lines[-1]
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc