Temporary Paths
In this tutorial we will show you how to use the functions {% tmp_path %}
and {% tmp_dir %}
to create and then reference a temporary file path or directory, respectively.
If you want to see how to generate tests you might see the basic tutorial instead.
If you haven’t installed gridtest, you should do this first.
Generate Testing Template
Let’s say that we have this script, called “temp.py”
# Basic functions for testing custom functions in format {% tmp_path %}
import os
def write_file(filename):
"""write a file with some random nonsense"""
with open(filename, "w") as filey:
filey.write("I heard there was an octupus living in that Christmas tree.")
def create_directory(dirname):
"""create a directory named according to input variable dirname"""
if not os.path.exists(dirname):
os.mkdir(dirname)
return dirname
Notice that the first function writes a temporary file that comes from an input, and the second creates a directory and returns it. For this gridtest, we will want to test these functions. We thus generated the initial template for the script temp.py shown above like this:
$ gridtest generate temp.py gridtest.yml
Extracting write_file from temp
Extracting create_directory from temp
The first argument is the input for the generate command, and this can be a filename, a folder name (that might contain multiple scripts) or a python module string (.e.g, requests.get). The second argument is the gridtest output file that will be produced with your tests. After you finish, the “gridtest.yml” file will have a list of tests that you can add values for. You can delete sections that aren’t relevant, or copy paste new entries to each list for another testing case.
Customize
You can then open the file in a text editor, and add arguments to each. If your library uses typing, the typing will be checked at testing time, and it’s not specified here. You’ll generally want to fill in args for each testing condition (or leave null for None). For more detail about templating, see the templating documentation. We ultimately updated the template to include the following:
temp:
filename: temp.py
tests:
temp.create_directory:
- args:
dirname: "{% tmp_dir %}"
returns: "{{ args.dirname }}"
temp.write_file:
- args:
filename: "{% tmp_path %}"
exists: "{{ args.filename }}"
The above recipe says that we want to test the function create_directory
temp.py, and we want gridtest to generate a temporary directory
(the variable {% tmp_dir %}
and then test that whatever name is generated
({{ args.dirname }}
) is returned by the function. For the function write_file,
the input “filename” will have a randomly generated temporary file created
for it with {% tmp_path %}
, and we will test that it exists by referencing it
with {{ args.filename }}
. Both will also be cleaned up at the completion of the test.
Temp Variables
For each of tmp_path
and tmp_dir
, you can optionally define a boolean to cleanup,
or a prefix. That might look like this:
"{% tmp_dir cleanup=False %}"
"{% tmp_path prefix=mytest %}"
See the function helpers module for more details.
Test
Once we have our testing file and the original script, we can run the tests as follows:
$ gridtest test gridtest.yml
Name Status Summary
________________________________________________________________________________________________________________________
temp.create_directory.0 success returns /tmp/gridtest-dir._cfykliv
temp.write_file.0 success exists /tmp/gridtest-file-ns9yrb5g
2/2 tests passed
Or since gridtest.yml is the default, just leave it out to find the file in the present working directory:
$ gridtest test
And the directory mentioned, /tmp/gridtest-dir.j0aio0l6
will be cleaned up
upon completion. If we don’t want to clean it up, we can add --no-cleanup
:
$ gridtest test gridtest.yml --no-cleanup
[2/2] |===================================| 100.0%
Name Status Summary
________________________________________________________________________________________________________________________
temp.create_directory.0 success returns /tmp/gridtest-dir.ntgs4pp3
temp.write_file.0 success exists /tmp/gridtest-file-x9hw6l12
2/2 tests passed
And then the directory generated would still exist after the run:
$ ls -l /tmp/gridtest-dir.ntgs4pp3
total 0
The same would be true for the testing file.
You might next want to browse tutorials available.