A unit test runner for Python, and generate HTML reports.
Project description
# PyUnitReport
PyUnitReport is a unittest test runner that save test results in Html files, for human readable presentation of results.
## Installation
```bash
$ pip install PyUnitReport
```
## Usage
### testcase
```python
from pyunitreport import HTMLTestRunner
import unittest
class TestStringMethods(unittest.TestCase):
""" Example test for HtmlRunner. """
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
def test_error(self):
""" This test should be marked as error one. """
raise ValueError
def test_fail(self):
""" This test should fail. """
self.assertEqual(1, 2)
@unittest.skip("This is a skipped test.")
def test_skip(self):
""" This test should be skipped. """
pass
if __name__ == '__main__':
unittest.main(testRunner=HTMLTestRunner(output='example_dir'))
```
In most cases, you can use `PyUnitReport` with `unittest.main`, just pass it with the `testRunner` keyword.
For `HTMLTestRunner`, the only parameter you must pass in is `output`, which specifies the directory of your generated report. Also, if you want to specify the report name, you can use the `report_name` parameter, otherwise the report name will be the datetime you run test. And if you want to run testcases in `failfast` mode, you can pass in a `failfast` parameter and assign it to be True.
Here is another way to run the testcases.
```python
from pyunitreport import HTMLTestRunner
kwargs = {
"output": output_folder_name,
"report_name": report_name,
"failfast": True
}
result = HTMLTestRunner(**kwargs).run(task_suite)
```
### testsuite
For those who have `test suites` it works too, just create a runner instance and call the run method with your suite.
Here is an example:
```python
from unittest import TestLoader, TestSuite
from pyunitreport import HTMLTestRunner
import ExampleTest
import Example2Test
example_tests = TestLoader().loadTestsFromTestCase(ExampleTests)
example2_tests = TestLoader().loadTestsFromTestCase(Example2Test)
suite = TestSuite([example_tests, example2_tests])
kwargs = {
"output": output_folder_name,
"report_name": report_name,
"failfast": True
}
runner = HTMLTestRunner(**kwargs)
runner.run(suite)
```
## Output
### Console output
This is an example of what you got in the console.
```text
$ python examples/testcase.py
Running tests...
----------------------------------------------------------------------
This test should be marked as error one. ... ERROR (0.000575)s
This test should fail. ... FAIL (0.000564)s
test_isupper (__main__.TestStringMethods) ... OK (0.000149)s
This test should be skipped. ... SKIP (0.000067)s
test_split (__main__.TestStringMethods) ... OK (0.000167)s
test_upper (__main__.TestStringMethods) ... OK (0.000134)s
======================================================================
ERROR [0.000575s]: This test should be marked as error one.
----------------------------------------------------------------------
Traceback (most recent call last):
File "examples/testcase.py", line 23, in test_error
raise ValueError
ValueError
======================================================================
FAIL [0.000564s]: This test should fail.
----------------------------------------------------------------------
Traceback (most recent call last):
File "examples/testcase.py", line 27, in test_fail
self.assertEqual(1, 2)
AssertionError: 1 != 2
----------------------------------------------------------------------
Ran 6 tests in 0.002s
FAILED
(Failures=1, Errors=1, Skipped=1)
Generating HTML reports...
Template is not specified, load default template instead.
Reports generated: /Users/Leo/MyProjects/ApiTestEngine/src/pyunitreport/reports/example_dir/2017-07-26-23-33-49.html
```
### Html Output
![html output](docs/html_output.gif)
![html output](docs/html_output.png)
PyUnitReport is a unittest test runner that save test results in Html files, for human readable presentation of results.
## Installation
```bash
$ pip install PyUnitReport
```
## Usage
### testcase
```python
from pyunitreport import HTMLTestRunner
import unittest
class TestStringMethods(unittest.TestCase):
""" Example test for HtmlRunner. """
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
def test_error(self):
""" This test should be marked as error one. """
raise ValueError
def test_fail(self):
""" This test should fail. """
self.assertEqual(1, 2)
@unittest.skip("This is a skipped test.")
def test_skip(self):
""" This test should be skipped. """
pass
if __name__ == '__main__':
unittest.main(testRunner=HTMLTestRunner(output='example_dir'))
```
In most cases, you can use `PyUnitReport` with `unittest.main`, just pass it with the `testRunner` keyword.
For `HTMLTestRunner`, the only parameter you must pass in is `output`, which specifies the directory of your generated report. Also, if you want to specify the report name, you can use the `report_name` parameter, otherwise the report name will be the datetime you run test. And if you want to run testcases in `failfast` mode, you can pass in a `failfast` parameter and assign it to be True.
Here is another way to run the testcases.
```python
from pyunitreport import HTMLTestRunner
kwargs = {
"output": output_folder_name,
"report_name": report_name,
"failfast": True
}
result = HTMLTestRunner(**kwargs).run(task_suite)
```
### testsuite
For those who have `test suites` it works too, just create a runner instance and call the run method with your suite.
Here is an example:
```python
from unittest import TestLoader, TestSuite
from pyunitreport import HTMLTestRunner
import ExampleTest
import Example2Test
example_tests = TestLoader().loadTestsFromTestCase(ExampleTests)
example2_tests = TestLoader().loadTestsFromTestCase(Example2Test)
suite = TestSuite([example_tests, example2_tests])
kwargs = {
"output": output_folder_name,
"report_name": report_name,
"failfast": True
}
runner = HTMLTestRunner(**kwargs)
runner.run(suite)
```
## Output
### Console output
This is an example of what you got in the console.
```text
$ python examples/testcase.py
Running tests...
----------------------------------------------------------------------
This test should be marked as error one. ... ERROR (0.000575)s
This test should fail. ... FAIL (0.000564)s
test_isupper (__main__.TestStringMethods) ... OK (0.000149)s
This test should be skipped. ... SKIP (0.000067)s
test_split (__main__.TestStringMethods) ... OK (0.000167)s
test_upper (__main__.TestStringMethods) ... OK (0.000134)s
======================================================================
ERROR [0.000575s]: This test should be marked as error one.
----------------------------------------------------------------------
Traceback (most recent call last):
File "examples/testcase.py", line 23, in test_error
raise ValueError
ValueError
======================================================================
FAIL [0.000564s]: This test should fail.
----------------------------------------------------------------------
Traceback (most recent call last):
File "examples/testcase.py", line 27, in test_fail
self.assertEqual(1, 2)
AssertionError: 1 != 2
----------------------------------------------------------------------
Ran 6 tests in 0.002s
FAILED
(Failures=1, Errors=1, Skipped=1)
Generating HTML reports...
Template is not specified, load default template instead.
Reports generated: /Users/Leo/MyProjects/ApiTestEngine/src/pyunitreport/reports/example_dir/2017-07-26-23-33-49.html
```
### Html Output
![html output](docs/html_output.gif)
![html output](docs/html_output.png)
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
PyUnitReport-0.1.3b0.tar.gz
(10.9 kB
view details)
Built Distribution
PyUnitReport-0.1.3b0-py3.6.egg
(19.5 kB
view details)
File details
Details for the file PyUnitReport-0.1.3b0.tar.gz
.
File metadata
- Download URL: PyUnitReport-0.1.3b0.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ab2e10455c77ea3723263c4cb96411f8e6ff7a7fb35c666883f1181047b79c9 |
|
MD5 | 3c617ea22dc3d5486211b30e81fad7e5 |
|
BLAKE2b-256 | e3b7279d1ad4f418725cda74ff45120c8b9bb35da3deca6580c3038044852459 |
File details
Details for the file PyUnitReport-0.1.3b0-py3.6.egg
.
File metadata
- Download URL: PyUnitReport-0.1.3b0-py3.6.egg
- Upload date:
- Size: 19.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7e6418d610d0497174958a5a6766bd2e4f6b269a28be4f6a894e3d5ad1c06c7b |
|
MD5 | 9664a7bed222d77eb4aadb77c110a17f |
|
BLAKE2b-256 | deefc9c4a047ce04e5e79fe5568fd4633e52136123efe32f0d00a426b83bf884 |