API testing with Python + Pytest + Allure
How to write a first API test with Python + Pytest + Allure
- Install pytest as a tests framework
- Install Allure as a nice test report tool
- Write API test for Github API
- Run all together having beautiful report
- Installed ubuntu 20.04 focal (running on vagrant, box is ubuntu/focal64)
- Python 3.8.5 installed by default with this box
Scripts could be found on QAProvider github
Create virtual environment
Update package information
$ sudo apt-get update
Install virtual environment
$ sudo apt install python3-venv
Go to working directory (/code/pytests in my example)
$ cd /code/pytests
Create virtual environment with name api-tests
$ python3 -m venv api-tests
If you work on windows environment with vagrant then you might have got next error: Error: [Errno 71] Protocol error: 'lib' -> '/code/pytests/api-tests/lib64'. In this case you need to create virtual environment with --always-copy option using next command:
$ virtualenv -p python3 api-tests --always-copy
Activate virtual environment
$ source api-tests/bin/activate
$ sudo apt install ruby
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install)"
Add Linux-brew to your ~/.bash_profile by running
$ echo 'export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"' >>~/.bash_profile
$ echo 'export MANPATH="/home/linuxbrew/.linuxbrew/share/man:$MANPATH"' >>~/.bash_profile
$ echo 'export INFOPATH="/home/linuxbrew/.linuxbrew/share/info:$INFOPATH"' >>~/.bash_profile
Add Linuxbrew to your PATH
Finally install Allure
$ brew install allure
Check the version
$ allure --version
$ pip install -U pytest
Check the version
$ pytest --version
$ pip install allure-pytest
We will write 2 tests for get a user function of Github users API. 1 success test & 1 failed test just to see the difference in results.
Full example could be found here on Github
Complete project structure will look like that:
library is a folder with our small package to do an API request and have all stuff for Allure report
test_github.py is a file with 2 tests: test_success and test_failed
Run tests and check results
$ pytest --alluredir=allure_results
server results with allure
$ allure serve allure_results/
Generating report to temp directory...
Report successfully generated to /tmp/17631871144287129490/allure-report
Starting web server...
2020-10-21 23:40:31.094:INFO::main: Logging initialized @1810ms to org.eclipse.jetty.util.log.StdErrLog
Can not open browser because this capability is not supported on your platform. You can use the link below to open the report manually.
Server started at . Press to exit
Open results in a browser. As we build it under Vagrant on Windows machine it could be opened with 192.168.10.22 IP address instead of 127.0.0.1.
First, you will see overview panel.
Success result. You will see detailed information in the report: request, method, url, headers, response.
Failed result. You will see detailed information in the report: request, method, url, headers, response (you need to collapse it and it will be the same as in success result above) and failed assert.
Any questions or suggestions?