For detailed documentation, read the docs
Write end-to-end tests in YAML, run them with Python and output your results in Markdown
pip install python-spectacles
spectacles [OPTIONS] BASE_URL
e.g.:
spectacles http://google.com
More details on CLI and options
python spectacles --help
Usage: runner.py [OPTIONS] BASE_URL
Options:
--driver TEXT Select the browser driver you would like to use
(phantomjs, chrome, firefox)
--spec-location TEXT A glob for finding spec files
--out-location TEXT path to the directory where we will output the
spec results
--screenshot-location TEXT path where we will save screenshots
--help Show this message and exit.
The default project layout is like this:
.
|_ specs/ # put your yaml specs here
|_ reports/
|_ screenshots # any screenshots you take will be saved here
|_ specs # spec reports will be saved here
You can create that layout with the following commands:
mkdir specs
mkdir -p reports/screenshots
mkdir -p reports/specs
Let's create a quick spec:
./specs/google_im_lucky.yml
---
- scenario: I'm feeling lucky
steps:
- goto: /
- screenshot: {}
- expect_elements :
- "#lst-ib": "search input"
- fill_fields:
- q: "testing"
- wait: 1
- click: "[name='btnG']"
- wait: 5
- wait_for_element : "#rcnt"
- screenshot:
widths: [375, 768, 990, 1200, 1600]
Run your spec:
spectacles https://www.google.com
Results:
- You should find a collection of screenshots at:
./reports/screenshots
Output:
##I'm feeling lucky
- Go to: /
- ✓ Check that search input exists
- enter django-spectacles into field:q
- ✓ Check that [name='btnG'] exists
- Click button:
- waiting for #rcnt to load
- ✓ Element has loaded: #rcnt
- Click the first link
- ✓ Check that h3.r a exists
- Click button: GitHub - toast38coza/django-spectacles: Write Integration tests in ...
TODO:
Some improvements I would like to ship in the near future:
- Print results
- Generate reports
- Prompts
- Variables
- Refactor / neaten
- Improve test coverage
- Remove dependency on Django
- Take arguments (e.g: domain, output directory, glob for yml files)
- Maybe we don't need to run this as a test?
Note to self: deploying to pypi:
-
Update version in setup.py
-
Upload to pypi:
python setup.py sdist upload -r pypi