The tests/
folder is where all the tests for BigchainDB Server live. Most of them are unit tests. Integration tests are in the tests/integration/
folder.
A few notes:
tests/common/
contains self-contained tests only testingbigchaindb/common/
tests/backend/
contains tests requiring the database backend (RethinkDB or MongoDB)
We write unit and integration tests for our Python code using the pytest framework. You can use the tests in the tests/
folder as templates or examples.
If you installed BigchainDB Server using pip install bigchaindb
, then you
didn't install the tests. Before you can run all the tests, you must install
BigchainDB from source. The CONTRIBUTING.md
file has
instructions for how to do that.
Next, make sure you have RethinkDB or MongoDB running in the background. You
can run RethinkDB using rethinkdb --daemon
or MongoDB using mongod --replSet=bigchain-rs
.
If you wish to test with a TLS/SSL enabled MongoDB, use the command
mongod --replSet=bigchain-rs --sslAllowInvalidHostnames --sslMode=requireSSL \
-sslCAFile=bigchaindb/tests/backend/mongodb-ssl/certs/ca.crt \
--sslCRLFile=bigchaindb/tests/backend/mongodb-ssl/certs/crl.pem \
--sslPEMKeyFile=bigchaindb/tests/backend/mongodb-ssl/certs/test_mdb_ssl_cert_and_key.pem
The pytest
command has many options. If you want to learn about all the
things you can do with pytest, see the pytest
documentation. We've also added a customization to
pytest:
--database-backend
: Defines the backend to use for the tests. It defaults to
rethinkdb
It must be one of the backends available in the server
configuration.
Now you can run all tests using:
py.test -v
or, if that doesn't work, try:
python -m pytest -v
or:
python setup.py test
Note: the above pytest commands default to use RethinkDB as the backend. If
you wish to run the tests against MongoDB add the --database-backend=mongodb
to the pytest
command. If you wish to run tests against a TLS/SSL enabled
MongoDB instance (as mentioned above), use the command
pytest -v --database-backend=mongodb-ssl -m bdb_ssl
How does python setup.py test
work? The documentation for pytest-runner explains.
The pytest
command has many options. If you want to learn about all the things you can do with pytest, see the pytest documentation. We've also added a customization to pytest:
You can also use Docker Compose to run all the tests.
First, start MongoDB
in the background:
$ docker-compose up -d mdb
then run the tests using:
$ docker-compose run --rm bdb py.test -v
If you've upgraded to a newer version of BigchainDB, you might have to rebuild the images before being able to run the tests. Run:
$ docker-compose build
First, start RethinkDB
in the background:
$ docker-compose -f docker-compose.rdb.yml up -d rdb
then run the tests using:
$ docker-compose -f docker-compose.rdb.yml run --rm bdb-rdb py.test -v
to rebuild all the images (usually you only need to rebuild the bdb
and
bdb-rdb
images). If that fails, then do make clean-pyc
and try again.
We use Travis CI, so that whenever someone creates a new BigchainDB pull request on GitHub, Travis CI gets the new code and does a bunch of stuff. You can find out what we tell Travis CI to do in the .travis.yml
file: it tells Travis CI how to install BigchainDB, how to run all the tests, and what to do "after success" (e.g. run codecov
). (We use Codecov to get a rough estimate of our test coverage.)
We use tox to run multiple suites of tests against multiple environments during automated testing. Generally you don't need to run this yourself, but it might be useful when troubleshooting a failing Travis CI build.
To run all the tox tests, use:
tox
or:
python -m tox
To run only a few environments, use the -e
flag:
tox -e {ENVLIST}
where {ENVLIST}
is one or more of the environments specified in the tox.ini file.