A simple tool for testing
Project description
A simple tool for testing
litio
how to use
example 1: The basics
install
pip install litio
run
litio run
litio.yml
name: My Awesome Title
tests:
firsth-test: # test name
path: ./tests/test1.py # path to python file
functions: # functions list
- pow: # function name
inputs: # inputs
# arguments with name of parameters
base: 2
exponent: 2
expected:
value: 4 # expected value
comparator: Equals
test1.py:
def pow(base, exponent):
return base**exponent
example 2: If something fails?
test2.py:
def pow(base, exponent):
return base / exponent # it's obviously not working.
litio.yml:
name: My Awesome Title
api-key: YOUR_OPENAI_API_KEY_ENVIRONMENT_VARIABLE # the name of the environment variable, NOT THE API KEY!
tests:
failed-test:
path: ./tests/test2.py
functions:
- pow:
inputs:
base: 2
exponent: 2
expected:
value: 4
comparator: Equals
verbose: true
auto-fix: true # auto fix function using AI if call fails
how auto-fix works?
The "auto-fix" parameter instructs litio to use artificial intelligence to automatically repair and replace the function in the source code. If you prefer to confirm before consulting AI, you can use the "use-ai" parameter instead of "auto-fix."
example 3: if a tests is not ready yet?
test3.py:
def coming_soon():
pass # it's not ready yet
litio.yml:
name: My Awesome Title
tests:
not-ready-test:
path: ./tests/test3.py
functions:
- coming_soon:
expected:
value: i am not ready yet
comparator: Equals
ignore: true # ignore this test and continue
Litio commands
-
run
- Action: Runs the tests.
- parameters:
--verbose
(aliases:-V
): Prints the full function call.--output
(aliases:-o
): The style of the output. It can becapybara
orclassic
or you can install a custom style.--ai
/--no-ai
: enable/disable auto-fix using AI.
-
install
- Action: Installs a Litio package.
- parameters:
module
: The name of the module to install, must be in formatauthor/module
orauthor/module@version
.--upgrade
(aliases:-u
): install the latest version of the module.
-
uninstall
- Action: Uninstalls a Litio package.
- parameters:
module
: The name of the module to uninstall, must be in formatauthor/module
.
Litio config file reference
The config file must be in YAML format and named litio.yml
name
paramater
- The
name
parameter is the title of the config file.
api-key
parameter
- The
api-key
parameter is the name of the environment variable that contains the OpenAI API key, NOT THE API KEY!
output-style
parameter
- The
output-style
parameter is the style of the output. It can becapybara
orclassic
for now.
tests
parameter
- The
tests
parameter is a dictionary of tests.
Tests structure
- The test name is the name of the test.
- The
path
parameter is the path to the Python file that contains the functions, methods or classmethods to test. - The
functions
parameter is a list of functions to test.
Looks like this:
...
tests:
first-test:
path: ./src/utils.py
functions:
- add: # function name
...
Function structure
- The function name is the name of the function.
- The
inputs
parameter is a dictionary of inputs. - The
expected
parameter is a dictionary with expected value and comparator. - The
verbose
parameter is a boolean that indicates whether to print the full function call. - The
auto-fix
parameter is a boolean that indicates whether to use AI to automatically fix the function. Only can be used with theEquals
comparator. - The
use-ai
parameter is a boolean that indicates whether to use AI to fix the function. Only can be used with theEquals
comparator. - The
ignore
parameter is a boolean that indicates whether to ignore the function.
Looks like this:
...
tests:
first-test:
path: ./src/utils.py
functions:
- FUNCTION_NAME: # (e.g. subtract)
inputs:
a: 1 # arguments with name of parameters
b: 2 # must be the same as the name of the parameter
expected:
value: -1 # expected value
comparator: Equals
Using methods
The syntax for a method is the same as that of a function, except that you need to add the "instance" parameter with the values to instantiate an object of that class.
Looks like this:
...
tests:
first-test:
path: ./src/utils.py
functions:
- Person.get_age:
instance:
name: John
age: 30
expected:
value: 30
comparator: Equals
The expected parameter
- The
comparator
parameter is the way to compare the expected value. - The
value
parameter is the expected value.
- you can access the attributes of the returned object using the dot notation. Look like this:
...
- add_lists:
inputs:
a: [1, 2]
b: [3, 4]
expected:
# the value returned is [1, 2, 3, 4]
value.0: 1 # access to value[0]
comparator: Equals
you also can use ranges:
...
- add_lists:
inputs:
a: [1, 2]
b: [3, 4]
expected:
# the value returned is [1, 2, 3, 4]
value.1;3: 1 # access to the range value[1:3]
# NOTE: use semicolon(;) to indicate the range(e.g. value.1;3), not the colon(:) because conflict with the yaml syntax
comparator: Equals
you can also use spacing in the range:
...
- add_lists:
inputs:
a: [1, 2]
b: [3, 4]
expected:
value.;;2: [1, 3] # access to value[::2]
comparator: Equals
you also can access to a key in the dictionary:
...
- add_dicts:
inputs:
a: {"a": 1, "b": 2}
b: {"c": 3, "d": 4}
expected:
value.a: 1
comparator: Equals
you also can use dot notation multiple times:
...
- add_dicts:
inputs:
a: {"a": {"b": 1}}
b: {"c": {"d": 2}}
expected:
value.a.b: 1 # access to value["a"]["b"]
comparator: Equals
if function returns an object, you can access to the attributes of that object using the dot notation:
...
- create_person_object:
inputs:
name: John
age: 30
expected:
value.name: John # access to value.name
comparator: Equals
What comparators are there?
Equals
Greater
Less
GreaterOrEqual
LessOrEqual
NotEquals
Is
IsNot
IsNone
IsNotNone
IsInstance
IsNotInstance
How can i create a module?
Every module must have a litio.py
file in root directory.
Example module for output styles:
litio.py
import ... # your dependecies here
def my_own_output_style(args):
... # your code here
litio = {
'output': {
'my-own-output-style-name': my_own_output_style
}
}
When your module is ready to use, you can publish it to github and install it using litio install you/your-module-name
example: litio install lizardwine/litio-package
litio dictionary reference
you can repleace any litio function
-
output: you can add and replace any output style
classic
: classic outputcapybara
: capybara output
-
options: you can add and replace any option for litio command
--version
: shows the litio version and exit
-
sub_commands: you can add and replace any sub command
run
: run the tests in litio.ymlinstall
: install a moduleuninstall
: uninstall a module
-
utils: you can add and replace any utility
extract_function_code
: extract the code of a function from a fileArgs
: set self attributes from a dictionaryOutputArgs
: an organizer for the output argumentsparams_to_dict
: convert a list of parameters to a dictionaryeval_param_values
: evaluate the values of a list of parametersKwargs
: set self attributes from a keyword arguments
-
tester: you can replace the tester function
test
: test a function with the given inputs and expected values
-
ai: you can add or replace any AI powered function
BugFixer
: class for bug fixingfix_bug
: fix a bug in a function with BugFixer
If you module has dependencies, you must add them in requirements.txt
file in root directory.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file litio-1.6.1.tar.gz
.
File metadata
- Download URL: litio-1.6.1.tar.gz
- Upload date:
- Size: 28.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 31cd0dbbd4b299b6d9e01c8501e7feedb0da94ee7159f4b30dde4b5b94296df9 |
|
MD5 | 310b4c4c313e087319c926af60c90762 |
|
BLAKE2b-256 | aeae000ac19ba371f485fd8a65226c858b381329d14fb7284bf0774bc8aa7cab |
File details
Details for the file litio-1.6.1-py3-none-any.whl
.
File metadata
- Download URL: litio-1.6.1-py3-none-any.whl
- Upload date:
- Size: 26.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0ab3fdd469dcfa3b41b4a4698a441527a1544d73cde9e9773223a6fd8cf8559e |
|
MD5 | 1c45845e1e76fc5c8f0dceb174c00760 |
|
BLAKE2b-256 | f95af0bc39f9c3b5b8bf9a660d0d668203da95a30337e9b82688b2d60ab9e4d6 |