DiscoverTest & Code : Python Testing147: Testing Single File Python Applications/Scripts with pytest and coverage
147: Testing Single File Python Applications/Scripts with pytest and coverage

147: Testing Single File Python Applications/Scripts with pytest and coverage

Update: 2021-03-06
Share

Description

Have you ever written a single file Python application or script?

Have you written tests for it?

Do you check code coverage?



This is the topic of this weeks episode, spurred on by a listener question.



The questions:




  • For single file scripts, I'd like to have the test code included right there in the file. Can I do that with pytest?

  • If I can, can I use code coverage on it?



The example code discussed in the episode: script.py



def foo():
return 5


def main():
x = foo()
print(x)


if __name__ == '__main__': # pragma: no cover
main()

## test code

# To test:
# pip install pytest
# pytest script.py

# To test with coverage:
# put this file (script.py) in a directory by itself, say foo
# then from the parent directory of foo:
# pip install pytest-cov
# pytest --cov=foo foo/script.py

# To show missing lines
# pytest --cov=foo --cov-report=term-missing foo/script.py


def test_foo():
assert foo() == 5


def test_main(capsys):
main()
captured = capsys.readouterr()
assert captured.out == "5\n"


Suggestion by @cfbolz if you need to import pytest:



if __name__ == '__main__': # pragma: no cover
main()
else:
import pytest

Sponsored By:

Support Test & Code : Python Testing

Comments 
00:00
00:00
x

0.5x

0.8x

1.0x

1.25x

1.5x

2.0x

3.0x

Sleep Timer

Off

End of Episode

5 Minutes

10 Minutes

15 Minutes

30 Minutes

45 Minutes

60 Minutes

120 Minutes

147: Testing Single File Python Applications/Scripts with pytest and coverage

147: Testing Single File Python Applications/Scripts with pytest and coverage

Brian Okken