diff --git a/appveyor.yml b/appveyor.yml
index 85c67e8e672f9f41a15a12188c4d614dea9b9ab6..28d874fbe4c5ced24e0f62baa4f5953b53bb97b0 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -11,7 +11,7 @@ environment:
       PYTHON_ARCH: "64"
       CONDA_PY: "35"
       CONDA_NPY: "18"
-      QTDIR: "C:\\Qt\\5.7\\msvc2015_64"
+      QTDIR: "C:\\Qt\\5.6\\msvc2015_64"
       platform: x64
 
     - PYTHON: "C:\\Python35_32"
@@ -19,7 +19,7 @@ environment:
       PYTHON_ARCH: "32"
       CONDA_PY: "35"
       CONDA_NPY: "18"
-      QTDIR: "C:\\Qt\\5.7\\msvc2015"
+      QTDIR: "C:\\Qt\\5.6\\msvc2015"
       platform: x86
 
 install:
@@ -36,10 +36,7 @@ install:
   #- choco install -y vcredist2015
   - "%CMD_IN_ENV% conda config --set always_yes yes --set changeps1 no"
   - "%CMD_IN_ENV% conda config --add channels inso/channel/sakia"
-  - "%CMD_IN_ENV% conda create -q -n test-environment python=%PYTHON_VERSION% libsodium=1.0.3 setuptools=19.2"
-
-cache:
-  - C:\Qt\5.7\5.7
+  - "%CMD_IN_ENV% conda create -q -n test-environment python=%PYTHON_VERSION% pyqt5=5.6 libsodium=1.0.3 setuptools=19.2"
 
 build_script:
   - ".\\ci\\appveyor\\build.cmd"
diff --git a/ci/appveyor/build.cmd b/ci/appveyor/build.cmd
index 4eb6a091f8dc29c0a0cb0efa57655663073affb7..37c9a8dd3efe0a934f58e7355c17b5dabd088cd0 100644
--- a/ci/appveyor/build.cmd
+++ b/ci/appveyor/build.cmd
@@ -5,12 +5,12 @@ call activate test-environment
 echo "%PATH%"
 echo "%QT_PLUGIN_PATH%"
 python -V
-call pyuic5 --version
-
-pyrcc5 -version
 
 lrelease -version
 
+call pyuic5 --version
+pyrcc5 -version
+
 pip install -r requirements.txt
 pip install pyinstaller
 pip install six
diff --git a/ci/appveyor/tests.cmd b/ci/appveyor/tests.cmd
index e901b0acf46583b8ec958140c7b0f0bb9d0a1b4b..61e3c79ae7545d9c5f931b70fee343862959e63b 100644
--- a/ci/appveyor/tests.cmd
+++ b/ci/appveyor/tests.cmd
@@ -11,8 +11,7 @@ pyrcc5 -version
 
 lrelease -version
 
-echo "%CWD%"
-
-py.test
+echo "%cd%"
+py.test tests/
 
 if %errorlevel% neq 0 exit /b 1
\ No newline at end of file
diff --git a/ci/travis/before_install.sh b/ci/travis/before_install.sh
index ff73d483a7a0c5dd0e22e0cbc48c241069b55769..5ff6df18644fd7d351abe1f4dd71f07a47f51a62 100755
--- a/ci/travis/before_install.sh
+++ b/ci/travis/before_install.sh
@@ -27,7 +27,7 @@ then
             libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0 \
             libxcb-render-util0-dev libxcb-glx0-dev libgl1-mesa-dri libegl1-mesa libpcre3 libgles2-mesa-dev \
             freeglut3-dev libfreetype6-dev xorg-dev xserver-xorg-input-void xserver-xorg-video-dummy xpra libosmesa6-dev \
-            curl libdbus-1-dev libdbus-glib-1-dev autoconf automake libtool libgstreamer-plugins-base0.10-0
+            curl libdbus-1-dev libdbus-glib-1-dev autoconf automake libtool libgstreamer-plugins-base0.10-0 dunst
     wget https://download.qt.io/official_releases/qt/5.7/5.7.1/qt-opensource-linux-x64-5.7.1.run
     chmod +x qt-opensource-linux-x64-5.7.1.run
     ./qt-opensource-linux-x64-5.7.1.run --script $HOME/build/duniter/sakia/ci/travis/qt-installer-noninteractive.qs
diff --git a/ci/travis/build.sh b/ci/travis/build.sh
index 0424e008dcef2d1228e57da359cffac35b951a41..5b374636ea1c17decf82ec565a5bbaba8856e778 100755
--- a/ci/travis/build.sh
+++ b/ci/travis/build.sh
@@ -8,6 +8,7 @@ pyenv shell $PYENV_PYTHON_VERSION
 pip install --upgrade pip
 pyenv rehash
 pip install coveralls
+pip install pytest-cov
 pip install pyinstaller
 pip install PyQt5
 pip install -r requirements.txt
diff --git a/ci/travis/test.sh b/ci/travis/test.sh
index f6567784ef2f9c3499e8016f94612e9a494731d4..ad1112601a75072e1566ada9e689c12f77e3369a 100755
--- a/ci/travis/test.sh
+++ b/ci/travis/test.sh
@@ -6,7 +6,7 @@ if [ $TRAVIS_OS_NAME == "linux" ]
 then
     export XVFBARGS="-screen 0 1280x1024x24"
     export DISPLAY=:99.0
-    sudo sh -e /etc/init.d/xvfb restart
+    sh -e /etc/init.d/xvfb start
     sleep 3
 fi
 
@@ -14,7 +14,7 @@ cd $HOME/build/duniter/sakia
 pyenv shell $PYENV_PYTHON_VERSION
 if [ $TRAVIS_OS_NAME == "linux" ]
 then
-    coverage run --source=sakia.core,sakia.gui,sakia.models py.test
+    py.test --cov=sakia tests/
 else
     py.test
 fi
diff --git a/src/sakia/tests/__init__.py b/tests/__init__.py
similarity index 100%
rename from src/sakia/tests/__init__.py
rename to tests/__init__.py
diff --git a/src/sakia/tests/conftest.py b/tests/conftest.py
similarity index 98%
rename from src/sakia/tests/conftest.py
rename to tests/conftest.py
index 9bc7e08fce96e417f5ef994cc2106bb226561faa..c2cbb2e651204380e57f24d099c3f106faa4f130 100644
--- a/src/sakia/tests/conftest.py
+++ b/tests/conftest.py
@@ -3,6 +3,11 @@ import asyncio
 import quamash
 import sqlite3
 import mirage
+import sys
+import os
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'src')))
+
 from duniterpy.documents import BlockUID
 from sakia.app import Application
 from sakia.options import SakiaOptions
@@ -11,7 +16,6 @@ from sakia.data.entities import *
 from sakia.data.repositories import *
 from sakia.services import DocumentsService
 
-
 _application_ = []
 
 
diff --git a/src/sakia/tests/functional/__init__.py b/tests/functional/__init__.py
similarity index 100%
rename from src/sakia/tests/functional/__init__.py
rename to tests/functional/__init__.py
diff --git a/src/sakia/tests/functional/test_certification_dialog.py b/tests/functional/test_certification_dialog.py
similarity index 100%
rename from src/sakia/tests/functional/test_certification_dialog.py
rename to tests/functional/test_certification_dialog.py
diff --git a/src/sakia/tests/functional/test_connection_cfg_dialog.py b/tests/functional/test_connection_cfg_dialog.py
similarity index 100%
rename from src/sakia/tests/functional/test_connection_cfg_dialog.py
rename to tests/functional/test_connection_cfg_dialog.py
diff --git a/src/sakia/tests/functional/test_preferences_dialog.py b/tests/functional/test_preferences_dialog.py
similarity index 100%
rename from src/sakia/tests/functional/test_preferences_dialog.py
rename to tests/functional/test_preferences_dialog.py
diff --git a/src/sakia/tests/functional/test_transfer_dialog.py b/tests/functional/test_transfer_dialog.py
similarity index 100%
rename from src/sakia/tests/functional/test_transfer_dialog.py
rename to tests/functional/test_transfer_dialog.py
diff --git a/src/sakia/tests/technical/__init__.py b/tests/technical/__init__.py
similarity index 100%
rename from src/sakia/tests/technical/__init__.py
rename to tests/technical/__init__.py
diff --git a/src/sakia/tests/technical/test_identities_service.py b/tests/technical/test_identities_service.py
similarity index 100%
rename from src/sakia/tests/technical/test_identities_service.py
rename to tests/technical/test_identities_service.py
diff --git a/src/sakia/tests/technical/test_transactions_service.py b/tests/technical/test_transactions_service.py
similarity index 100%
rename from src/sakia/tests/technical/test_transactions_service.py
rename to tests/technical/test_transactions_service.py
diff --git a/src/sakia/tests/unit/__init__.py b/tests/unit/__init__.py
similarity index 100%
rename from src/sakia/tests/unit/__init__.py
rename to tests/unit/__init__.py
diff --git a/src/sakia/tests/unit/data/__init__.py b/tests/unit/data/__init__.py
similarity index 100%
rename from src/sakia/tests/unit/data/__init__.py
rename to tests/unit/data/__init__.py
diff --git a/src/sakia/tests/unit/data/test_appdata_file.py b/tests/unit/data/test_appdata_file.py
similarity index 100%
rename from src/sakia/tests/unit/data/test_appdata_file.py
rename to tests/unit/data/test_appdata_file.py
diff --git a/src/sakia/tests/unit/data/test_blockchains_repo.py b/tests/unit/data/test_blockchains_repo.py
similarity index 100%
rename from src/sakia/tests/unit/data/test_blockchains_repo.py
rename to tests/unit/data/test_blockchains_repo.py
diff --git a/src/sakia/tests/unit/data/test_certifications_repo.py b/tests/unit/data/test_certifications_repo.py
similarity index 100%
rename from src/sakia/tests/unit/data/test_certifications_repo.py
rename to tests/unit/data/test_certifications_repo.py
diff --git a/src/sakia/tests/unit/data/test_connections_repo.py b/tests/unit/data/test_connections_repo.py
similarity index 100%
rename from src/sakia/tests/unit/data/test_connections_repo.py
rename to tests/unit/data/test_connections_repo.py
diff --git a/src/sakia/tests/unit/data/test_dividends_repo.py b/tests/unit/data/test_dividends_repo.py
similarity index 100%
rename from src/sakia/tests/unit/data/test_dividends_repo.py
rename to tests/unit/data/test_dividends_repo.py
diff --git a/src/sakia/tests/unit/data/test_identies_repo.py b/tests/unit/data/test_identies_repo.py
similarity index 100%
rename from src/sakia/tests/unit/data/test_identies_repo.py
rename to tests/unit/data/test_identies_repo.py
diff --git a/src/sakia/tests/unit/data/test_node_connector.py b/tests/unit/data/test_node_connector.py
similarity index 100%
rename from src/sakia/tests/unit/data/test_node_connector.py
rename to tests/unit/data/test_node_connector.py
diff --git a/src/sakia/tests/unit/data/test_nodes_repo.py b/tests/unit/data/test_nodes_repo.py
similarity index 100%
rename from src/sakia/tests/unit/data/test_nodes_repo.py
rename to tests/unit/data/test_nodes_repo.py
diff --git a/src/sakia/tests/unit/data/test_sources_repo.py b/tests/unit/data/test_sources_repo.py
similarity index 100%
rename from src/sakia/tests/unit/data/test_sources_repo.py
rename to tests/unit/data/test_sources_repo.py
diff --git a/src/sakia/tests/unit/data/test_transactions_repo.py b/tests/unit/data/test_transactions_repo.py
similarity index 100%
rename from src/sakia/tests/unit/data/test_transactions_repo.py
rename to tests/unit/data/test_transactions_repo.py
diff --git a/src/sakia/tests/unit/data/test_user_parameters_file.py b/tests/unit/data/test_user_parameters_file.py
similarity index 100%
rename from src/sakia/tests/unit/data/test_user_parameters_file.py
rename to tests/unit/data/test_user_parameters_file.py
diff --git a/src/sakia/tests/unit/gui/__init__.py b/tests/unit/gui/__init__.py
similarity index 100%
rename from src/sakia/tests/unit/gui/__init__.py
rename to tests/unit/gui/__init__.py
diff --git a/src/sakia/tests/unit/gui/test_generic_tree.py b/tests/unit/gui/test_generic_tree.py
similarity index 100%
rename from src/sakia/tests/unit/gui/test_generic_tree.py
rename to tests/unit/gui/test_generic_tree.py
diff --git a/src/sakia/tests/unit/money/__init__.py b/tests/unit/money/__init__.py
similarity index 100%
rename from src/sakia/tests/unit/money/__init__.py
rename to tests/unit/money/__init__.py
diff --git a/src/sakia/tests/unit/money/test_quantitative.py b/tests/unit/money/test_quantitative.py
similarity index 100%
rename from src/sakia/tests/unit/money/test_quantitative.py
rename to tests/unit/money/test_quantitative.py
diff --git a/src/sakia/tests/unit/money/test_quantitative_zsum.py b/tests/unit/money/test_quantitative_zsum.py
similarity index 100%
rename from src/sakia/tests/unit/money/test_quantitative_zsum.py
rename to tests/unit/money/test_quantitative_zsum.py
diff --git a/src/sakia/tests/unit/money/test_relative.py b/tests/unit/money/test_relative.py
similarity index 100%
rename from src/sakia/tests/unit/money/test_relative.py
rename to tests/unit/money/test_relative.py
diff --git a/src/sakia/tests/unit/money/test_relative_zsum.py b/tests/unit/money/test_relative_zsum.py
similarity index 100%
rename from src/sakia/tests/unit/money/test_relative_zsum.py
rename to tests/unit/money/test_relative_zsum.py
diff --git a/src/sakia/tests/unit/test_decorators.py b/tests/unit/test_decorators.py
similarity index 100%
rename from src/sakia/tests/unit/test_decorators.py
rename to tests/unit/test_decorators.py