README.md > questionnaire_unit_test.md
Uses the 'unittest' automated framework but not only to test questionnaire.py
python3 -m unittest questionnaire_unit_test
pytest -v -k questionnaire_unit_test.py -s
Note : All tests are described following the format :
test number->returned values if receives argument(s) then prints message
The tests are orchestrated to be progressive :
- Level 1 : Basic Unit tests with argument parsing on a local file
- Level 2 : Same tests but with a different name of program
- Level 3 : Same tests but with a file into a folder
the argument are read and handled by the load_json_argv function which should return the json data <Json_Data>
and the file path <File_Path>
`
| Test | What it checks | Msg | json | file_path |
|---|---|---|---|---|
test_01 |
a good json file | None | Data | Path |
test_02 |
no file | Error in argument, should add a single .json questionnaire | None | None |
test_03 |
more than one file | Error in argument, should add a single .json questionnaire | None | None |
test_04 |
a file without json extension | Incorrect extension, add a .json questionnaire | None | Path |
test_05 |
a non-existent file | Invalid permissions or path to non-existent-file.json | None | Path |
test_06 |
an empty json file | Incompatible or no data in JSON file | None | Path |
If the name of the questionnaire.py change, the error messages should adapt.
Inherits Level 1 and simulates a program named test.py
The class derives from the level 1 and executes the same tests except that a json_test_files folder is added to the path of the file given in argument
| Test | What it checks | Msg | json | file_path |
|---|---|---|---|---|
test_02 |
a folder (no file) | Incorrect extension, add a .json questionnaire | None | Path |
Inherits Levels 2 and 3: same as Level 3, with the test.py script name in the messages
Sample file used: https://countwordsfree.com/example.json.
| Test | What it checks | Msg | json | file_path |
|---|---|---|---|---|
test_01 |
a valid json file on a valid url | None | Data | Path |
test_02 |
an invalid json file on a valid url | File not found at URL | None | Path |
test_03 |
a valid json file on an invalid url | Invalid URL at | None | Path |
test_04 |
a file without json extension on a valid url | Incorrect extension, add a .json questionnaire | None | Path |
A simple HTTP server is started through a thread with setUp and close with tearDown.
Those 2 unittest.TestCase methods are respectively called before and after each test of the class and can be overwritten.
The class inherits from Level 1, but served over http://127.0.0.1.
The argument is now a URL, so a few messages change.
| Test | What it checks | Msg | json | file_path |
|---|---|---|---|---|
test_01 |
a good json file | None | Data | Path |
test_02 |
no file (folder url) | Incorrect extension, add a .json questionnaire | None | Path |
test_03 |
more than one file | Error in argument, should add a single .json questionnaire | None | None |
test_04 |
a file without json extension | Incorrect extension, add a .json questionnaire | None | Path |
test_05 |
a non-existent file | File not found at URL | None | Path |
test_06 |
an empty json file | Incompatible or no data in JSON file at URL | None | Path |
Rather than opening and closing an HTTP server for each test, it would be better to open and close it once for all tests in the class.
This can be done by creating a fixture defined on the class scope and using the option autouse=True to automatically
applied it to all the tests of the parent class.
The fixture opens the server, before all the tests run, and closes the server when it will be called a second time after all tests ran.
HTTP Connection to http://127.0.0.1:8000/ in Thread-4 (serve_forever)
...
<tests>
...
HTTP Disconnection from http://127.0.0.1:8000/
Note : According to the fixture used in this test, this class will be executed only using pytest and will be skipped
using unittests
pytest -v -k questionnaire_unit_test.py -s
Identical cases to Level 6. The server is opened/closed once per class by a class-scoped
@pytest.fixture(autouse=True). Skipped under unittest (pytest only).
In the same idea as Level 7 with fixtures, it is possible to call the built-in methods setUpClass and tearDownClass at the beginning and at the end of the tests of the class.
To do this, the self argument must be modified to cls because these built-in functions are private to the unittest class, and the built-in @classmethod tag must be added over the class in order to force the access to them.
This class is identical cases to Level 6, using the unittest built-in class methods to start the server once for the whole class.
Finally, unit tests should be isolated and not depend on the system or the network in order to be able, for example, to measure exactly the time needed to proceed without a external dependency.
It should so better to simulate the answers of the network requests like Success (200)
or File Not Found (404) for example, to get the best knowledge of the program behavior.
This may require to rewrite the tests because the reading of the file from URL must also be simulated, like in this 2 tests trying to read files from a non-existent Web URL.
| Test | What it checks | Msg | json | file_path |
|---|---|---|---|---|
test_01 |
a json file on a non-existent url with a simulated 404 answer | File not found at URL | None | Path |
test_02 |
a json file on a non-existent url with a simulated 200 answer + fake data | None | Data | Path |
These tests are prepared to know if a Questionnaire instance is created or not according to the json file received in argument.
According to the expected json format, the properties categorie and difficulté are not required, so they will be saved as unknown (inconnue) if they are non-existent or empty and won't disturb the good behavior of the application.
| Test | What it checks | Msg | Result |
|---|---|---|---|
test_00 |
empty file | Incompatible or no data in JSON file — Wrong arguments, should be test on load_json_argv | None |
test_01 |
a good format file | None | Questionnaire |
test_02 |
a file without not-mandatory category | None | Questionnaire |
test_03 |
a file with empty not-mandatory category | None | Questionnaire |
test_04 |
a file without not-mandatory difficulty | None | Questionnaire |
test_05 |
a file with empty not-mandatory difficulty | None | Questionnaire |
test_06 |
a file without mandatory title | Incompatible Json schema in file | None |
test_07 |
a file with empty title | The title of the quizz is missing and mandatory in file | None |
test_08 |
a file without mandatory questions | Incompatible Json schema in file | None |
test_09 |
a file with empty questions | The questions of the quizz are missing and mandatory in file | None |
test_10 |
a file with more keys | None | Questionnaire |
test_11 |
a file without title in questions | Incompatible Json schema in file | None |
test_12 |
a file with an empty title in a question | ⚠ Skipped question : question is empty in question | Questionnaire |
test_13 |
a file without choice in questions | Incompatible Json schema in file | None |
test_14 |
a file with an empty choice array in questions | Incompatible Json schema in file | None |
test_15 |
a file with only one choice in questions | Incompatible Json schema in file | None |
test_16 |
a file without answer in choices in questions | Incompatible Json schema in file | None |
test_17 |
a file with an empty wrong answer in choices | ⚠ Skipped answer : answer is empty in question | Questionnaire |
test_18 |
a file with an empty good answer in choices | ⚠ Skipped answer : answer is empty… — ⚠ Skipped question : no one or more than one good answers… | Questionnaire |
test_19 |
a file without boolean in choices | Incompatible Json schema in file | None |
test_20 |
a file with an integer instead of the boolean | Incompatible Json schema in file | None |
test_21 |
a file without good answer in choices | ⚠ Skipped question : no one or more than one good answers in question | Questionnaire |
test_22 |
a file with more than one good answer in choices | ⚠ Skipped question : no one or more than one good answers in question | Questionnaire |
test_23 |
a file with an empty array in choices | Incompatible Json schema in file | None |
test_24 |
a file with questions without good answer only | every question is dropped, so at run time the quiz prints "Not compatible questions" and is skipped entirely | None |
More information and independent tests about marks, fixtures, patch, local server in thread, json schema, pytest.ini or conftest.py files, etc ... are available in more_unit_tests_methods folder.
Thank you for reading.
python3 -m unittest questionnaire_unit_test -v test_01_load_json_argv_with_one_good_json_file (questionnaire_unit_test._01_load_json_argv.test_01_load_json_argv_with_one_good_json_file) ...
questionnaire.py json_01_good_format.json -> Json_Data, File_Path
ok
test_02_load_json_argv_with_no_argv (questionnaire_unit_test._01_load_json_argv.test_02_load_json_argv_with_no_argv) ...
questionnaire.py -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
ok
test_03_load_json_argv_with_more_than_one_argv (questionnaire_unit_test._01_load_json_argv.test_03_load_json_argv_with_more_than_one_argv) ...
questionnaire.py json_01_good_format.json json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
ok
test_04_load_json_argv_with_argv_without_json_extension (questionnaire_unit_test._01_load_json_argv.test_04_load_json_argv_with_argv_without_json_extension) ...
questionnaire.py json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
ok
test_05_load_json_argv_with_non_existent_json_file (questionnaire_unit_test._01_load_json_argv.test_05_load_json_argv_with_non_existent_json_file) ...
questionnaire.py non-existent-file.json -> None, File_Path
Error : Invalid permissions or path to non-existent-file.json
ok
test_06_load_json_argv_with_empty_json_file (questionnaire_unit_test._01_load_json_argv.test_06_load_json_argv_with_empty_json_file) ...
questionnaire.py json_00_empty.json -> None, File_Path
Error : Incompatible or no data in JSON file json_00_empty.json
ok
test_01_load_json_argv_with_one_good_json_file (questionnaire_unit_test._02_load_json_argv_with_another_name.test_01_load_json_argv_with_one_good_json_file) ...
test.py json_01_good_format.json -> Json_Data, File_Path
ok
test_02_load_json_argv_with_no_argv (questionnaire_unit_test._02_load_json_argv_with_another_name.test_02_load_json_argv_with_no_argv) ...
test.py -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : test.py questionnaire_to_read.json
ok
test_03_load_json_argv_with_more_than_one_argv (questionnaire_unit_test._02_load_json_argv_with_another_name.test_03_load_json_argv_with_more_than_one_argv) ...
test.py json_01_good_format.json json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : test.py questionnaire_to_read.json
ok
test_04_load_json_argv_with_argv_without_json_extension (questionnaire_unit_test._02_load_json_argv_with_another_name.test_04_load_json_argv_with_argv_without_json_extension) ...
test.py json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : test.py questionnaire_to_read.json
ok
test_05_load_json_argv_with_non_existent_json_file (questionnaire_unit_test._02_load_json_argv_with_another_name.test_05_load_json_argv_with_non_existent_json_file) ...
test.py non-existent-file.json -> None, File_Path
Error : Invalid permissions or path to non-existent-file.json
ok
test_06_load_json_argv_with_empty_json_file (questionnaire_unit_test._02_load_json_argv_with_another_name.test_06_load_json_argv_with_empty_json_file) ...
test.py json_00_empty.json -> None, File_Path
Error : Incompatible or no data in JSON file json_00_empty.json
ok
test_01_load_json_argv_with_one_good_json_file (questionnaire_unit_test._03_load_json_argv_with_file_in_folder.test_01_load_json_argv_with_one_good_json_file) ...
questionnaire.py json_test_files/json_01_good_format.json -> Json_Data, File_Path
ok
test_02_load_json_argv_with_no_argv (questionnaire_unit_test._03_load_json_argv_with_file_in_folder.test_02_load_json_argv_with_no_argv) ...
questionnaire.py json_test_files/ -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
ok
test_03_load_json_argv_with_more_than_one_argv (questionnaire_unit_test._03_load_json_argv_with_file_in_folder.test_03_load_json_argv_with_more_than_one_argv) ...
questionnaire.py json_test_files/json_01_good_format.json json_test_files/json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
ok
test_04_load_json_argv_with_argv_without_json_extension (questionnaire_unit_test._03_load_json_argv_with_file_in_folder.test_04_load_json_argv_with_argv_without_json_extension) ...
questionnaire.py json_test_files/json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
ok
test_05_load_json_argv_with_non_existent_json_file (questionnaire_unit_test._03_load_json_argv_with_file_in_folder.test_05_load_json_argv_with_non_existent_json_file) ...
questionnaire.py json_test_files/non-existent-file.json -> None, File_Path
Error : Invalid permissions or path to json_test_files/non-existent-file.json
ok
test_06_load_json_argv_with_empty_json_file (questionnaire_unit_test._03_load_json_argv_with_file_in_folder.test_06_load_json_argv_with_empty_json_file) ...
questionnaire.py json_test_files/json_00_empty.json -> None, File_Path
Error : Incompatible or no data in JSON file json_test_files/json_00_empty.json
ok
test_01_load_json_argv_with_one_good_json_file (questionnaire_unit_test._04_load_json_argv_with_file_in_folder_and_another_name.test_01_load_json_argv_with_one_good_json_file) ...
test.py json_test_files/json_01_good_format.json -> Json_Data, File_Path
ok
test_02_load_json_argv_with_no_argv (questionnaire_unit_test._04_load_json_argv_with_file_in_folder_and_another_name.test_02_load_json_argv_with_no_argv) ...
test.py json_test_files/ -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : test.py questionnaire_to_read.json
ok
test_03_load_json_argv_with_more_than_one_argv (questionnaire_unit_test._04_load_json_argv_with_file_in_folder_and_another_name.test_03_load_json_argv_with_more_than_one_argv) ...
test.py json_test_files/json_01_good_format.json json_test_files/json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : test.py questionnaire_to_read.json
ok
test_04_load_json_argv_with_argv_without_json_extension (questionnaire_unit_test._04_load_json_argv_with_file_in_folder_and_another_name.test_04_load_json_argv_with_argv_without_json_extension) ...
test.py json_test_files/json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : test.py questionnaire_to_read.json
ok
test_05_load_json_argv_with_non_existent_json_file (questionnaire_unit_test._04_load_json_argv_with_file_in_folder_and_another_name.test_05_load_json_argv_with_non_existent_json_file) ...
test.py json_test_files/non-existent-file.json -> None, File_Path
Error : Invalid permissions or path to json_test_files/non-existent-file.json
ok
test_06_load_json_argv_with_empty_json_file (questionnaire_unit_test._04_load_json_argv_with_file_in_folder_and_another_name.test_06_load_json_argv_with_empty_json_file) ...
test.py json_test_files/json_00_empty.json -> None, File_Path
Error : Incompatible or no data in JSON file json_test_files/json_00_empty.json
ok
test_01_load_json_argv_with_json_file_sample_online (questionnaire_unit_test._05_load_json_argv_with_data_online.test_01_load_json_argv_with_json_file_sample_online) ...
questionnaire.py https://countwordsfree.com/example.json -> Json_Data, File_Path
ok
test_02_load_json_argv_with_invalid_json_file_sample_online (questionnaire_unit_test._05_load_json_argv_with_data_online.test_02_load_json_argv_with_invalid_json_file_sample_online) ...
questionnaire.py https://countwordsfree.com/non-existant.json -> None, File_Path
Error : File not found at URL https://countwordsfree.com/non-existant.json
ok
test_03_load_json_argv_with_invalid_url (questionnaire_unit_test._05_load_json_argv_with_data_online.test_03_load_json_argv_with_invalid_url) ...
questionnaire.py https://countwordsfre.com/example.json -> None, File_Path
Error : Invalid URL at https://countwordsfre.com/example.json
ok
test_04_load_json_argv_with_empty_or_uncompleted_file_online (questionnaire_unit_test._05_load_json_argv_with_data_online.test_04_load_json_argv_with_empty_or_uncompleted_file_online) ...
questionnaire.py https://countwordsfree.com/empty_or_uncompleted_file -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
ok
test_01_load_json_argv_with_one_good_json_file (questionnaire_unit_test._06_load_json_argv_with_data_via_localhost_8000_in_setup_teardown.test_01_load_json_argv_with_one_good_json_file) ...
Connection to http://127.0.0.1:50967/ in Thread-1 (serve_forever)
questionnaire.py http://127.0.0.1:50967/json_test_files/json_01_good_format.json -> Json_Data, File_Path
127.0.0.1 - - [30/Jun/2026 15:21:23] "GET /json_test_files/json_01_good_format.json HTTP/1.1" 200 -
Disconnection from http://127.0.0.1:50967/
ok
test_02_load_json_argv_with_no_argv (questionnaire_unit_test._06_load_json_argv_with_data_via_localhost_8000_in_setup_teardown.test_02_load_json_argv_with_no_argv) ...
Connection to http://127.0.0.1:55735/ in Thread-3 (serve_forever)
questionnaire.py http://127.0.0.1:55735/json_test_files/ -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
Disconnection from http://127.0.0.1:55735/
ok
test_03_load_json_argv_with_more_than_one_argv (questionnaire_unit_test._06_load_json_argv_with_data_via_localhost_8000_in_setup_teardown.test_03_load_json_argv_with_more_than_one_argv) ...
Connection to http://127.0.0.1:55233/ in Thread-4 (serve_forever)
questionnaire.py http://127.0.0.1:55233/json_test_files/json_01_good_format.json http://127.0.0.1:55233/json_test_files/json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
Disconnection from http://127.0.0.1:55233/
ok
test_04_load_json_argv_with_argv_without_json_extension (questionnaire_unit_test._06_load_json_argv_with_data_via_localhost_8000_in_setup_teardown.test_04_load_json_argv_with_argv_without_json_extension) ...
Connection to http://127.0.0.1:54449/ in Thread-5 (serve_forever)
questionnaire.py http://127.0.0.1:54449/json_test_files/json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
Disconnection from http://127.0.0.1:54449/
ok
test_05_load_json_argv_with_non_existent_json_file (questionnaire_unit_test._06_load_json_argv_with_data_via_localhost_8000_in_setup_teardown.test_05_load_json_argv_with_non_existent_json_file) ...
Connection to http://127.0.0.1:47915/ in Thread-6 (serve_forever)
questionnaire.py http://127.0.0.1:47915/json_test_files/non-existent-file.json -> None, File_Path
127.0.0.1 - - [30/Jun/2026 15:21:25] code 404, message File not found
127.0.0.1 - - [30/Jun/2026 15:21:25] "GET /json_test_files/non-existent-file.json HTTP/1.1" 404 -
Error : File not found at URL http://127.0.0.1:47915/json_test_files/non-existent-file.json
Disconnection from http://127.0.0.1:47915/
ok
test_06_load_json_argv_with_empty_json_file (questionnaire_unit_test._06_load_json_argv_with_data_via_localhost_8000_in_setup_teardown.test_06_load_json_argv_with_empty_json_file) ...
Connection to http://127.0.0.1:48385/ in Thread-8 (serve_forever)
questionnaire.py http://127.0.0.1:48385/json_test_files/json_00_empty.json -> None, File_Path
127.0.0.1 - - [30/Jun/2026 15:21:25] "GET /json_test_files/json_00_empty.json HTTP/1.1" 200 -
Error : Incompatible or no data in JSON file at URL http://127.0.0.1:48385/json_test_files/json_00_empty.json
Disconnection from http://127.0.0.1:48385/
ok
test_01_load_json_argv_with_one_good_json_file (questionnaire_unit_test._07_load_json_argv_with_data_via_localhost_8000_in_fixture.test_01_load_json_argv_with_one_good_json_file) ... skipped 'requires pytest'
test_02_load_json_argv_with_no_argv (questionnaire_unit_test._07_load_json_argv_with_data_via_localhost_8000_in_fixture.test_02_load_json_argv_with_no_argv) ... skipped 'requires pytest'
test_03_load_json_argv_with_more_than_one_argv (questionnaire_unit_test._07_load_json_argv_with_data_via_localhost_8000_in_fixture.test_03_load_json_argv_with_more_than_one_argv) ... skipped 'requires pytest'
test_04_load_json_argv_with_argv_without_json_extension (questionnaire_unit_test._07_load_json_argv_with_data_via_localhost_8000_in_fixture.test_04_load_json_argv_with_argv_without_json_extension) ... skipped 'requires pytest'
test_05_load_json_argv_with_non_existent_json_file (questionnaire_unit_test._07_load_json_argv_with_data_via_localhost_8000_in_fixture.test_05_load_json_argv_with_non_existent_json_file) ... skipped 'requires pytest'
test_06_load_json_argv_with_empty_json_file (questionnaire_unit_test._07_load_json_argv_with_data_via_localhost_8000_in_fixture.test_06_load_json_argv_with_empty_json_file) ... skipped 'requires pytest'
Connection to http://127.0.0.1:48907/ in Thread-10 (serve_forever)test_01_load_json_argv_with_one_good_json_file (questionnaire_unit_test._08_load_json_argv_with_data_via_localhost_8000_in_setupClass_teardownClass.test_01_load_json_argv_with_one_good_json_file) ...
questionnaire.py http://127.0.0.1:48907/json_test_files/json_01_good_format.json -> Json_Data, File_Path
127.0.0.1 - - [30/Jun/2026 15:21:26] "GET /json_test_files/json_01_good_format.json HTTP/1.1" 200 -
ok
test_02_load_json_argv_with_no_argv (questionnaire_unit_test._08_load_json_argv_with_data_via_localhost_8000_in_setupClass_teardownClass.test_02_load_json_argv_with_no_argv) ...
questionnaire.py http://127.0.0.1:48907/json_test_files/ -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
ok
test_03_load_json_argv_with_more_than_one_argv (questionnaire_unit_test._08_load_json_argv_with_data_via_localhost_8000_in_setupClass_teardownClass.test_03_load_json_argv_with_more_than_one_argv) ...
questionnaire.py http://127.0.0.1:48907/json_test_files/json_01_good_format.json http://127.0.0.1:48907/json_test_files/json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
ok
test_04_load_json_argv_with_argv_without_json_extension (questionnaire_unit_test._08_load_json_argv_with_data_via_localhost_8000_in_setupClass_teardownClass.test_04_load_json_argv_with_argv_without_json_extension) ...
questionnaire.py http://127.0.0.1:48907/json_test_files/json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
ok
test_05_load_json_argv_with_non_existent_json_file (questionnaire_unit_test._08_load_json_argv_with_data_via_localhost_8000_in_setupClass_teardownClass.test_05_load_json_argv_with_non_existent_json_file) ...
questionnaire.py http://127.0.0.1:48907/json_test_files/non-existent-file.json -> None, File_Path
127.0.0.1 - - [30/Jun/2026 15:21:26] code 404, message File not found
127.0.0.1 - - [30/Jun/2026 15:21:26] "GET /json_test_files/non-existent-file.json HTTP/1.1" 404 -
Error : File not found at URL http://127.0.0.1:48907/json_test_files/non-existent-file.json
ok
test_06_load_json_argv_with_empty_json_file (questionnaire_unit_test._08_load_json_argv_with_data_via_localhost_8000_in_setupClass_teardownClass.test_06_load_json_argv_with_empty_json_file) ...
questionnaire.py http://127.0.0.1:48907/json_test_files/json_00_empty.json -> None, File_Path
127.0.0.1 - - [30/Jun/2026 15:21:26] "GET /json_test_files/json_00_empty.json HTTP/1.1" 200 -
Error : Incompatible or no data in JSON file at URL http://127.0.0.1:48907/json_test_files/json_00_empty.json
ok
Disconnection from http://127.0.0.1:48907/
test_01_load_json_argv_with_simulated_FileNotFound_answer (questionnaire_unit_test._09_load_json_argv_with_simulated_server.test_01_load_json_argv_with_simulated_FileNotFound_answer) ...
questionnaire.py http://non-existent-url.com/json_01_good_format.json -> None, File_Path
Error : File not found at URL http://non-existent-url.com/json_01_good_format.json
ok
test_02_load_json_argv_with_simulated_success_request_and_fake_data (questionnaire_unit_test._09_load_json_argv_with_simulated_server.test_02_load_json_argv_with_simulated_success_request_and_fake_data) ...
questionnaire.py http://non-existent-url.com/json_01_good_format.json -> Json_Data, File_Path
ok
test_00_Questionnaire_empty_file (questionnaire_unit_test._10_Questionnaire_initialization.test_00_Questionnaire_empty_file) ...
Questionnaire( <json data>, json_test_files/json_00_empty.json ) --> None
Error : Incompatible or no data in JSON file json_test_files/json_00_empty.json
--> Wrong arguments, should be test on load_json_argv
ok
test_01_Questionnaire_good_format_file (questionnaire_unit_test._10_Questionnaire_initialization.test_01_Questionnaire_good_format_file) ...
Questionnaire( <json data>, json_test_files/json_01_good_format.json ) --> Questionnaire
ok
test_02_Questionnaire_without_not_mandatory_category (questionnaire_unit_test._10_Questionnaire_initialization.test_02_Questionnaire_without_not_mandatory_category) ...
Questionnaire( <json data>, json_test_files/json_02_without_category.json ) --> Questionnaire
ok
test_03_Questionnaire_with_empty_not_mandatory_category (questionnaire_unit_test._10_Questionnaire_initialization.test_03_Questionnaire_with_empty_not_mandatory_category) ...
Questionnaire( <json data>, json_test_files/json_03_with_empty_category.json ) --> Questionnaire
ok
test_04_Questionnaire_without_not_mandatory_difficulty (questionnaire_unit_test._10_Questionnaire_initialization.test_04_Questionnaire_without_not_mandatory_difficulty) ...
Questionnaire( <json data>, json_test_files/json_04_without_difficulty.json ) --> Questionnaire
ok
test_05_Questionnaire_with_empty_not_mandatory_difficulty (questionnaire_unit_test._10_Questionnaire_initialization.test_05_Questionnaire_with_empty_not_mandatory_difficulty) ...
Questionnaire( <json data>, json_test_files/json_05_with_empty_difficulty.json ) --> Questionnaire
ok
test_06_Questionnaire_without_mandatory_title (questionnaire_unit_test._10_Questionnaire_initialization.test_06_Questionnaire_without_mandatory_title) ...
Questionnaire( <json data>, json_test_files/json_06_without_title.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_06_without_title.json
ok
test_07_Questionnaire_with_empty_title (questionnaire_unit_test._10_Questionnaire_initialization.test_07_Questionnaire_with_empty_title) ...
Questionnaire( <json data>, json_test_files/json_07_with_empty_title.json ) --> None
Error : The title of the quizz is missing and mandatory in file json_test_files/json_07_with_empty_title.json
ok
test_08_Questionnaire_without_mandatory_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_08_Questionnaire_without_mandatory_questions) ...
Questionnaire( <json data>, json_test_files/json_08_without_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_08_without_questions.json
ok
test_09_Questionnaire_with_empty_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_09_Questionnaire_with_empty_questions) ...
Questionnaire( <json data>, json_test_files/json_09_with_empty_questions.json ) --> None
Error : The questions of the quizz are missing and mandatory in file json_test_files/json_09_with_empty_questions.json
ok
test_10_Questionnaire_with_more_keys (questionnaire_unit_test._10_Questionnaire_initialization.test_10_Questionnaire_with_more_keys) ...
Questionnaire( <json data>, json_test_files/json_10_with_more_keys.json ) --> Questionnaire
ok
test_11_Questionnaire_without_title_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_11_Questionnaire_without_title_in_questions) ...
Questionnaire( <json data>, json_test_files/json_11_without_title_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_11_without_title_in_questions.json
ok
test_12_Questionnaire_with_empty_title_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_12_Questionnaire_with_empty_title_in_questions) ...
Questionnaire( <json data>, json_test_files/json_12_with_empty_title_in_questions.json ) --> Questionnaire
Warning : Skipped question : question is empty in question 1 file json_test_files/json_12_with_empty_title_in_questions.json
ok
test_13_Questionnaire_without_choice_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_13_Questionnaire_without_choice_in_questions) ...
Questionnaire( <json data>, json_test_files/json_13_without_choice_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_13_without_choice_in_questions.json
ok
test_14_Questionnaire_with_empty_choice_array_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_14_Questionnaire_with_empty_choice_array_in_questions) ...
Questionnaire( <json data>, json_test_files/json_14_with_empty_choice_array_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_14_with_empty_choice_array_in_questions.json
ok
test_15_Questionnaire_with_only_one_choices_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_15_Questionnaire_with_only_one_choices_in_questions) ...
Questionnaire( <json data>, json_test_files/json_15_with_only_one_choice_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_15_with_only_one_choice_in_questions.json
ok
test_16_Questionnaire_without_answer_in_choices_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_16_Questionnaire_without_answer_in_choices_in_questions) ...
Questionnaire( <json data>, json_test_files/json_16_without_answer_in_choices_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_16_without_answer_in_choices_in_questions.json
ok
test_17_Questionnaire_with_empty_wrong_answer_in_choices_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_17_Questionnaire_with_empty_wrong_answer_in_choices_in_questions) ...
Questionnaire( <json data>, json_test_files/json_17_with_empty_wrong_answer_in_choices_in_questions.json ) --> Questionnaire
Warning : Skipped answer : answer is empty in question 1 file json_test_files/json_17_with_empty_wrong_answer_in_choices_in_questions.json
ok
test_18_Questionnaire_with_empty_good_answer_in_choices_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_18_Questionnaire_with_empty_good_answer_in_choices_in_questions) ...
Questionnaire( <json data>, json_test_files/json_18_with_empty_good_answer_in_choices_in_questions.json ) --> Questionnaire
Warning : Skipped answer : answer is empty in question 1 file json_test_files/json_18_with_empty_good_answer_in_choices_in_questions.json
Warning : Skipped question : no one or more than one good answers in question 1 file json_test_files/json_18_with_empty_good_answer_in_choices_in_questions.json
ok
test_19_Questionnaire_without_boolean_in_choices_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_19_Questionnaire_without_boolean_in_choices_in_questions) ...
Questionnaire( <json data>, json_test_files/json_19_without_boolean_in_choices_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_19_without_boolean_in_choices_in_questions.json
ok
test_20_Questionnaire_with_integer_in_choices_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_20_Questionnaire_with_integer_in_choices_in_questions) ...
Questionnaire( <json data>, json_test_files/json_20_with_integer_in_choices_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_20_with_integer_in_choices_in_questions.json
ok
test_21_Questionnaire_without_no_good_answer_in_choices_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_21_Questionnaire_without_no_good_answer_in_choices_in_questions) ...
Questionnaire( <json data>, json_test_files/json_21_without_no_good_answer_in_choices_in_questions.json ) --> Questionnaire
Warning : Skipped question : no one or more than one good answers in question 1 file json_test_files/json_21_without_no_good_answer_in_choices_in_questions.json
ok
test_22_Questionnaire_with_more_than_one_good_answer_in_choices_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_22_Questionnaire_with_more_than_one_good_answer_in_choices_in_questions) ...
Questionnaire( <json data>, json_test_files/json_22_with_more_than_one_good_answer_in_choices_in_questions.json ) --> Questionnaire
Warning : Skipped question : no one or more than one good answers in question 1 file json_test_files/json_22_with_more_than_one_good_answer_in_choices_in_questions.json
ok
test_23_Questionnaire_with_an_empty_array_in_choices_in_questions (questionnaire_unit_test._10_Questionnaire_initialization.test_23_Questionnaire_with_an_empty_array_in_choices_in_questions) ...
Questionnaire( <json data>, json_test_files/json_23_with_an_empty_array_in_choices_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_23_with_an_empty_array_in_choices_in_questions.json
ok
test_24_Questionnaire_with_questions_without_good_answer_only (questionnaire_unit_test._10_Questionnaire_initialization.test_24_Questionnaire_with_questions_without_good_answer_only) ...
Questionnaire( <json data>, json_test_files/json_24_with_questions_without_good_answer_only.json ) --> Questionnaire
Warning : Skipped question : no one or more than one good answers in question 1 file json_test_files/json_24_with_questions_without_good_answer_only.json
Warning : Skipped question : no one or more than one good answers in question 2 file json_test_files/json_24_with_questions_without_good_answer_only.json
ok
----------------------------------------------------------------------
Ran 73 tests in 4.908s
OK (skipped=6)
pytest -v -k questionnaire_unit_test.py -s============================================================================================================ test session starts =============================================================================================================
platform linux -- Python 3.12.3, pytest-8.0.0, pluggy-1.6.0 -- ~/unit_tests_practice/venv/bin/python3
cachedir: .pytest_cache
rootdir: ~/unit_tests_practice
configfile: pytest.ini
collecting ... ok
collected 126 items / 53 deselected / 73 selected
questionnaire_unit_test.py::_01_load_json_argv::test_01_load_json_argv_with_one_good_json_file
questionnaire.py json_01_good_format.json -> Json_Data, File_Path
PASSED
questionnaire_unit_test.py::_01_load_json_argv::test_02_load_json_argv_with_no_argv
questionnaire.py -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_01_load_json_argv::test_03_load_json_argv_with_more_than_one_argv
questionnaire.py json_01_good_format.json json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_01_load_json_argv::test_04_load_json_argv_with_argv_without_json_extension
questionnaire.py json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_01_load_json_argv::test_05_load_json_argv_with_non_existent_json_file
questionnaire.py non-existent-file.json -> None, File_Path
Error : Invalid permissions or path to non-existent-file.json
PASSED
questionnaire_unit_test.py::_01_load_json_argv::test_06_load_json_argv_with_empty_json_file
questionnaire.py json_00_empty.json -> None, File_Path
Error : Incompatible or no data in JSON file json_00_empty.json
PASSED
questionnaire_unit_test.py::_02_load_json_argv_with_another_name::test_01_load_json_argv_with_one_good_json_file
test.py json_01_good_format.json -> Json_Data, File_Path
PASSED
questionnaire_unit_test.py::_02_load_json_argv_with_another_name::test_02_load_json_argv_with_no_argv
test.py -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : test.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_02_load_json_argv_with_another_name::test_03_load_json_argv_with_more_than_one_argv
test.py json_01_good_format.json json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : test.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_02_load_json_argv_with_another_name::test_04_load_json_argv_with_argv_without_json_extension
test.py json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : test.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_02_load_json_argv_with_another_name::test_05_load_json_argv_with_non_existent_json_file
test.py non-existent-file.json -> None, File_Path
Error : Invalid permissions or path to non-existent-file.json
PASSED
questionnaire_unit_test.py::_02_load_json_argv_with_another_name::test_06_load_json_argv_with_empty_json_file
test.py json_00_empty.json -> None, File_Path
Error : Incompatible or no data in JSON file json_00_empty.json
PASSED
questionnaire_unit_test.py::_03_load_json_argv_with_file_in_folder::test_01_load_json_argv_with_one_good_json_file
questionnaire.py json_test_files/json_01_good_format.json -> Json_Data, File_Path
PASSED
questionnaire_unit_test.py::_03_load_json_argv_with_file_in_folder::test_02_load_json_argv_with_no_argv
questionnaire.py json_test_files/ -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_03_load_json_argv_with_file_in_folder::test_03_load_json_argv_with_more_than_one_argv
questionnaire.py json_test_files/json_01_good_format.json json_test_files/json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_03_load_json_argv_with_file_in_folder::test_04_load_json_argv_with_argv_without_json_extension
questionnaire.py json_test_files/json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_03_load_json_argv_with_file_in_folder::test_05_load_json_argv_with_non_existent_json_file
questionnaire.py json_test_files/non-existent-file.json -> None, File_Path
Error : Invalid permissions or path to json_test_files/non-existent-file.json
PASSED
questionnaire_unit_test.py::_03_load_json_argv_with_file_in_folder::test_06_load_json_argv_with_empty_json_file
questionnaire.py json_test_files/json_00_empty.json -> None, File_Path
Error : Incompatible or no data in JSON file json_test_files/json_00_empty.json
PASSED
questionnaire_unit_test.py::_04_load_json_argv_with_file_in_folder_and_another_name::test_01_load_json_argv_with_one_good_json_file
test.py json_test_files/json_01_good_format.json -> Json_Data, File_Path
PASSED
questionnaire_unit_test.py::_04_load_json_argv_with_file_in_folder_and_another_name::test_02_load_json_argv_with_no_argv
test.py json_test_files/ -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : test.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_04_load_json_argv_with_file_in_folder_and_another_name::test_03_load_json_argv_with_more_than_one_argv
test.py json_test_files/json_01_good_format.json json_test_files/json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : test.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_04_load_json_argv_with_file_in_folder_and_another_name::test_04_load_json_argv_with_argv_without_json_extension
test.py json_test_files/json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : test.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_04_load_json_argv_with_file_in_folder_and_another_name::test_05_load_json_argv_with_non_existent_json_file
test.py json_test_files/non-existent-file.json -> None, File_Path
Error : Invalid permissions or path to json_test_files/non-existent-file.json
PASSED
questionnaire_unit_test.py::_04_load_json_argv_with_file_in_folder_and_another_name::test_06_load_json_argv_with_empty_json_file
test.py json_test_files/json_00_empty.json -> None, File_Path
Error : Incompatible or no data in JSON file json_test_files/json_00_empty.json
PASSED
questionnaire_unit_test.py::_05_load_json_argv_with_data_online::test_01_load_json_argv_with_json_file_sample_online
questionnaire.py https://countwordsfree.com/example.json -> Json_Data, File_Path
PASSED
questionnaire_unit_test.py::_05_load_json_argv_with_data_online::test_02_load_json_argv_with_invalid_json_file_sample_online
questionnaire.py https://countwordsfree.com/non-existant.json -> None, File_Path
Error : File not found at URL https://countwordsfree.com/non-existant.json
PASSED
questionnaire_unit_test.py::_05_load_json_argv_with_data_online::test_03_load_json_argv_with_invalid_url
questionnaire.py https://countwordsfre.com/example.json -> None, File_Path
Error : Invalid URL at https://countwordsfre.com/example.json
PASSED
questionnaire_unit_test.py::_05_load_json_argv_with_data_online::test_04_load_json_argv_with_empty_or_uncompleted_file_online
questionnaire.py https://countwordsfree.com/empty_or_uncompleted_file -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_06_load_json_argv_with_data_via_localhost_8000_in_setup_teardown::test_01_load_json_argv_with_one_good_json_file
Connection to http://127.0.0.1:59521/ in Thread-1 (serve_forever)
questionnaire.py http://127.0.0.1:59521/json_test_files/json_01_good_format.json -> Json_Data, File_Path
127.0.0.1 - - [30/Jun/2026 15:32:21] "GET /json_test_files/json_01_good_format.json HTTP/1.1" 200 -
Disconnection from http://127.0.0.1:59521/
PASSED
questionnaire_unit_test.py::_06_load_json_argv_with_data_via_localhost_8000_in_setup_teardown::test_02_load_json_argv_with_no_argv
Connection to http://127.0.0.1:37907/ in Thread-3 (serve_forever)
questionnaire.py http://127.0.0.1:37907/json_test_files/ -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
Disconnection from http://127.0.0.1:37907/
PASSED
questionnaire_unit_test.py::_06_load_json_argv_with_data_via_localhost_8000_in_setup_teardown::test_03_load_json_argv_with_more_than_one_argv
Connection to http://127.0.0.1:38407/ in Thread-4 (serve_forever)
questionnaire.py http://127.0.0.1:38407/json_test_files/json_01_good_format.json http://127.0.0.1:38407/json_test_files/json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
Disconnection from http://127.0.0.1:38407/
PASSED
questionnaire_unit_test.py::_06_load_json_argv_with_data_via_localhost_8000_in_setup_teardown::test_04_load_json_argv_with_argv_without_json_extension
Connection to http://127.0.0.1:53347/ in Thread-5 (serve_forever)
questionnaire.py http://127.0.0.1:53347/json_test_files/json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
Disconnection from http://127.0.0.1:53347/
PASSED
questionnaire_unit_test.py::_06_load_json_argv_with_data_via_localhost_8000_in_setup_teardown::test_05_load_json_argv_with_non_existent_json_file
Connection to http://127.0.0.1:35085/ in Thread-6 (serve_forever)
questionnaire.py http://127.0.0.1:35085/json_test_files/non-existent-file.json -> None, File_Path
127.0.0.1 - - [30/Jun/2026 15:32:23] code 404, message File not found
127.0.0.1 - - [30/Jun/2026 15:32:23] "GET /json_test_files/non-existent-file.json HTTP/1.1" 404 -
Error : File not found at URL http://127.0.0.1:35085/json_test_files/non-existent-file.json
Disconnection from http://127.0.0.1:35085/
PASSED
questionnaire_unit_test.py::_06_load_json_argv_with_data_via_localhost_8000_in_setup_teardown::test_06_load_json_argv_with_empty_json_file
Connection to http://127.0.0.1:44455/ in Thread-8 (serve_forever)
questionnaire.py http://127.0.0.1:44455/json_test_files/json_00_empty.json -> None, File_Path
127.0.0.1 - - [30/Jun/2026 15:32:24] "GET /json_test_files/json_00_empty.json HTTP/1.1" 200 -
Error : Incompatible or no data in JSON file at URL http://127.0.0.1:44455/json_test_files/json_00_empty.json
Disconnection from http://127.0.0.1:44455/
PASSED
questionnaire_unit_test.py::_07_load_json_argv_with_data_via_localhost_8000_in_fixture::test_01_load_json_argv_with_one_good_json_file
HTTP Connection to http://127.0.0.1:8000/ in Thread-10 (serve_forever)
questionnaire.py http://127.0.0.1:8000/json_test_files/json_01_good_format.json -> Json_Data, File_Path
127.0.0.1 - - [30/Jun/2026 15:32:24] "GET /json_test_files/json_01_good_format.json HTTP/1.1" 200 -
PASSED
questionnaire_unit_test.py::_07_load_json_argv_with_data_via_localhost_8000_in_fixture::test_02_load_json_argv_with_no_argv
questionnaire.py http://127.0.0.1:8000/json_test_files/ -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_07_load_json_argv_with_data_via_localhost_8000_in_fixture::test_03_load_json_argv_with_more_than_one_argv
questionnaire.py http://127.0.0.1:8000/json_test_files/json_01_good_format.json http://127.0.0.1:8000/json_test_files/json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_07_load_json_argv_with_data_via_localhost_8000_in_fixture::test_04_load_json_argv_with_argv_without_json_extension
questionnaire.py http://127.0.0.1:8000/json_test_files/json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_07_load_json_argv_with_data_via_localhost_8000_in_fixture::test_05_load_json_argv_with_non_existent_json_file
questionnaire.py http://127.0.0.1:8000/json_test_files/non-existent-file.json -> None, File_Path
127.0.0.1 - - [30/Jun/2026 15:32:24] code 404, message File not found
127.0.0.1 - - [30/Jun/2026 15:32:24] "GET /json_test_files/non-existent-file.json HTTP/1.1" 404 -
Error : File not found at URL http://127.0.0.1:8000/json_test_files/non-existent-file.json
PASSED
questionnaire_unit_test.py::_07_load_json_argv_with_data_via_localhost_8000_in_fixture::test_06_load_json_argv_with_empty_json_file
questionnaire.py http://127.0.0.1:8000/json_test_files/json_00_empty.json -> None, File_Path
127.0.0.1 - - [30/Jun/2026 15:32:24] "GET /json_test_files/json_00_empty.json HTTP/1.1" 200 -
Error : Incompatible or no data in JSON file at URL http://127.0.0.1:8000/json_test_files/json_00_empty.json
PASSEDHTTP Disconnection from http://127.0.0.1:8000/
questionnaire_unit_test.py::_08_load_json_argv_with_data_via_localhost_8000_in_setupClass_teardownClass::test_01_load_json_argv_with_one_good_json_file
Connection to http://127.0.0.1:43809/ in Thread-14 (serve_forever)
questionnaire.py http://127.0.0.1:43809/json_test_files/json_01_good_format.json -> Json_Data, File_Path
127.0.0.1 - - [30/Jun/2026 15:32:24] "GET /json_test_files/json_01_good_format.json HTTP/1.1" 200 -
PASSED
questionnaire_unit_test.py::_08_load_json_argv_with_data_via_localhost_8000_in_setupClass_teardownClass::test_02_load_json_argv_with_no_argv
questionnaire.py http://127.0.0.1:43809/json_test_files/ -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_08_load_json_argv_with_data_via_localhost_8000_in_setupClass_teardownClass::test_03_load_json_argv_with_more_than_one_argv
questionnaire.py http://127.0.0.1:43809/json_test_files/json_01_good_format.json http://127.0.0.1:43809/json_test_files/json_01_another_good_format.json -> None, None
Error : Error in argument, should add a single .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_08_load_json_argv_with_data_via_localhost_8000_in_setupClass_teardownClass::test_04_load_json_argv_with_argv_without_json_extension
questionnaire.py http://127.0.0.1:43809/json_test_files/json_00_without_extension -> None, File_Path
Error : Incorrect extension, add a .json questionnaire. Example : questionnaire.py questionnaire_to_read.json
PASSED
questionnaire_unit_test.py::_08_load_json_argv_with_data_via_localhost_8000_in_setupClass_teardownClass::test_05_load_json_argv_with_non_existent_json_file
questionnaire.py http://127.0.0.1:43809/json_test_files/non-existent-file.json -> None, File_Path
127.0.0.1 - - [30/Jun/2026 15:32:24] code 404, message File not found
127.0.0.1 - - [30/Jun/2026 15:32:24] "GET /json_test_files/non-existent-file.json HTTP/1.1" 404 -
Error : File not found at URL http://127.0.0.1:43809/json_test_files/non-existent-file.json
PASSED
questionnaire_unit_test.py::_08_load_json_argv_with_data_via_localhost_8000_in_setupClass_teardownClass::test_06_load_json_argv_with_empty_json_file
questionnaire.py http://127.0.0.1:43809/json_test_files/json_00_empty.json -> None, File_Path
127.0.0.1 - - [30/Jun/2026 15:32:24] "GET /json_test_files/json_00_empty.json HTTP/1.1" 200 -
Error : Incompatible or no data in JSON file at URL http://127.0.0.1:43809/json_test_files/json_00_empty.json
PASSEDDisconnection from http://127.0.0.1:43809/
questionnaire_unit_test.py::_09_load_json_argv_with_simulated_server::test_01_load_json_argv_with_simulated_FileNotFound_answer
questionnaire.py http://non-existent-url.com/json_01_good_format.json -> None, File_Path
Error : File not found at URL http://non-existent-url.com/json_01_good_format.json
PASSED
questionnaire_unit_test.py::_09_load_json_argv_with_simulated_server::test_02_load_json_argv_with_simulated_success_request_and_fake_data
questionnaire.py http://non-existent-url.com/json_01_good_format.json -> Json_Data, File_Path
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_00_Questionnaire_empty_file
Questionnaire( <json data>, json_test_files/json_00_empty.json ) --> None
Error : Incompatible or no data in JSON file json_test_files/json_00_empty.json
--> Wrong arguments, should be test on load_json_argv
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_01_Questionnaire_good_format_file
Questionnaire( <json data>, json_test_files/json_01_good_format.json ) --> Questionnaire
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_02_Questionnaire_without_not_mandatory_category
Questionnaire( <json data>, json_test_files/json_02_without_category.json ) --> Questionnaire
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_03_Questionnaire_with_empty_not_mandatory_category
Questionnaire( <json data>, json_test_files/json_03_with_empty_category.json ) --> Questionnaire
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_04_Questionnaire_without_not_mandatory_difficulty
Questionnaire( <json data>, json_test_files/json_04_without_difficulty.json ) --> Questionnaire
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_05_Questionnaire_with_empty_not_mandatory_difficulty
Questionnaire( <json data>, json_test_files/json_05_with_empty_difficulty.json ) --> Questionnaire
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_06_Questionnaire_without_mandatory_title
Questionnaire( <json data>, json_test_files/json_06_without_title.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_06_without_title.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_07_Questionnaire_with_empty_title
Questionnaire( <json data>, json_test_files/json_07_with_empty_title.json ) --> None
Error : The title of the quizz is missing and mandatory in file json_test_files/json_07_with_empty_title.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_08_Questionnaire_without_mandatory_questions
Questionnaire( <json data>, json_test_files/json_08_without_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_08_without_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_09_Questionnaire_with_empty_questions
Questionnaire( <json data>, json_test_files/json_09_with_empty_questions.json ) --> None
Error : The questions of the quizz are missing and mandatory in file json_test_files/json_09_with_empty_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_10_Questionnaire_with_more_keys
Questionnaire( <json data>, json_test_files/json_10_with_more_keys.json ) --> Questionnaire
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_11_Questionnaire_without_title_in_questions
Questionnaire( <json data>, json_test_files/json_11_without_title_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_11_without_title_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_12_Questionnaire_with_empty_title_in_questions
Questionnaire( <json data>, json_test_files/json_12_with_empty_title_in_questions.json ) --> Questionnaire
Warning : Skipped question : question is empty in question 1 file json_test_files/json_12_with_empty_title_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_13_Questionnaire_without_choice_in_questions
Questionnaire( <json data>, json_test_files/json_13_without_choice_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_13_without_choice_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_14_Questionnaire_with_empty_choice_array_in_questions
Questionnaire( <json data>, json_test_files/json_14_with_empty_choice_array_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_14_with_empty_choice_array_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_15_Questionnaire_with_only_one_choices_in_questions
Questionnaire( <json data>, json_test_files/json_15_with_only_one_choice_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_15_with_only_one_choice_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_16_Questionnaire_without_answer_in_choices_in_questions
Questionnaire( <json data>, json_test_files/json_16_without_answer_in_choices_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_16_without_answer_in_choices_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_17_Questionnaire_with_empty_wrong_answer_in_choices_in_questions
Questionnaire( <json data>, json_test_files/json_17_with_empty_wrong_answer_in_choices_in_questions.json ) --> Questionnaire
Warning : Skipped answer : answer is empty in question 1 file json_test_files/json_17_with_empty_wrong_answer_in_choices_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_18_Questionnaire_with_empty_good_answer_in_choices_in_questions
Questionnaire( <json data>, json_test_files/json_18_with_empty_good_answer_in_choices_in_questions.json ) --> Questionnaire
Warning : Skipped answer : answer is empty in question 1 file json_test_files/json_18_with_empty_good_answer_in_choices_in_questions.json
Warning : Skipped question : no one or more than one good answers in question 1 file json_test_files/json_18_with_empty_good_answer_in_choices_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_19_Questionnaire_without_boolean_in_choices_in_questions
Questionnaire( <json data>, json_test_files/json_19_without_boolean_in_choices_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_19_without_boolean_in_choices_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_20_Questionnaire_with_integer_in_choices_in_questions
Questionnaire( <json data>, json_test_files/json_20_with_integer_in_choices_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_20_with_integer_in_choices_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_21_Questionnaire_without_no_good_answer_in_choices_in_questions
Questionnaire( <json data>, json_test_files/json_21_without_no_good_answer_in_choices_in_questions.json ) --> Questionnaire
Warning : Skipped question : no one or more than one good answers in question 1 file json_test_files/json_21_without_no_good_answer_in_choices_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_22_Questionnaire_with_more_than_one_good_answer_in_choices_in_questions
Questionnaire( <json data>, json_test_files/json_22_with_more_than_one_good_answer_in_choices_in_questions.json ) --> Questionnaire
Warning : Skipped question : no one or more than one good answers in question 1 file json_test_files/json_22_with_more_than_one_good_answer_in_choices_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_23_Questionnaire_with_an_empty_array_in_choices_in_questions
Questionnaire( <json data>, json_test_files/json_23_with_an_empty_array_in_choices_in_questions.json ) --> None
Error : Incompatible Json schema in file json_test_files/json_23_with_an_empty_array_in_choices_in_questions.json
PASSED
questionnaire_unit_test.py::_10_Questionnaire_initialization::test_24_Questionnaire_with_questions_without_good_answer_only
Questionnaire( <json data>, json_test_files/json_24_with_questions_without_good_answer_only.json ) --> Questionnaire
Warning : Skipped question : no one or more than one good answers in question 1 file json_test_files/json_24_with_questions_without_good_answer_only.json
Warning : Skipped question : no one or more than one good answers in question 2 file json_test_files/json_24_with_questions_without_good_answer_only.json
PASSED
===================================================================================================== 73 passed, 53 deselected in 5.70s ======================================================================================================