Before the Lab
Read
Practical Python on Testing (mainly the part on
pytest, at the end).
Make a directory ~/cs2613/labs/L14
Download Work.zip and unzip in your newly created directory.
Do exercises 1.7 and 1.8 from Python Numbers
Do exercises 1.13, 1.14, 1.15 from Python Strings
In a terminal run
pipx install --include-deps unb-cs2613
rehash
Save the following sample code (based on Exercise 1.19) to a file listex.py in the directory
you created above.
symbols = 'HPQ,AAPL,IBM,MSFT,YHOO,DOA,GOOG'
symlist = symbols.split(',')
def test_lookup0():
assert symlist[0] == 'HPQ'
def test_lookup1():
assert symlist[1] == 'AAPL'
In ~/cs2613/labs/L14, run
pytest listex.py
You should see
[student@id414m22 L14]$ pytest listex.py
=================== test session starts ===================
platform linux -- Python 3.9.18, pytest-7.4.3, pluggy-1.3.0
rootdir: /home1/ugrad/student/cs2613/labs/L14
plugins: pylama-8.4.1, cov-4.1.0
collected 2 items
listex.py .. [100%]
==================== 2 passed in 0.02s ====================
Modify one of the tests so it fails. Run pytest again.
Question for your journal: what are three ways failing tests are indicated?
For each of the remaining interactive evaluations in Exercise
1.19,
add a corresponding test to listex.py.
make sure each test_* function (def) has a unique name.
if you want, you can have multiple asserts in a single test.
Questions for your journal:
== in JavaScript and Python?node test framework and pytestWe have already been using python functions for pytest, without
really thinking about how they work. In Part 1.7 of Practical
Python,
functions are explained.
def sumcount(n):
'''
Returns the sum of the first n integers
'''
total = 0
while n > 0:
total += n
n -= 1
return total
Make a recursive version of this function.
Add sufficient pytest tests for both versions of the function.
Check your test(s) for coverage with
pytest --cov=sum --cov-report=term-missing sum.py
(assuming your file is called sum.py)