diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..888d6a9a97a892ca419c22e95df6faa7f675325f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+*.sw?
+.egg*
+.ropeproject
+.pytest*
+*.egg-info
+__pycache__
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ddc23d29b57a9d32f8a0acc5a3b3895259840429
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,14 @@
+image: python:3.6
+
+stages:
+    - build
+    - test
+    - deploy
+
+before_script:
+    - pip install setuptools
+    - pip install .
+
+pytest:
+    stage: test
+    script: python setup.py test
diff --git a/Readme.md b/Readme.md
index 0302c8deb3b7364f6fb8bd19b4ef2c439d6ec03e..f5fbc42382f34b10df1731c224babf5a88d42f11 100644
--- a/Readme.md
+++ b/Readme.md
@@ -74,7 +74,8 @@ setup(
 Suppose you want to run a `doStuf` function that takes exactly one argument :
 
 ```python
-runner = safeRunner()
+from pySafeRunner import safeRunner
+runner = safeRunner.safeRunner()
 for i in range(0,5):
     runner.run(doStuff, i)
 ```
@@ -86,7 +87,6 @@ for i in range(0,5):
 Suppose you want to run a `doStuf` function that takes exactly two arguments :
 
 ```python
-runner = safeRunner()
 for i in range(0,5):
     for i in range(5,10):
         runner.run(doStuff, (i,j))
@@ -97,7 +97,6 @@ for i in range(0,5):
 Suppose you want to run a `doStuf` function that takes 3 named arguments :
 
 ```python
-runner = safeRunner()
 for i in range(0,5):
     for i in range(5,10):
         runner.run(doStuff, {'i':i,'k':5,'j':j})
diff --git a/pySafeRunner/runner.py b/pySafeRunner/safeRunner.py
similarity index 100%
rename from pySafeRunner/runner.py
rename to pySafeRunner/safeRunner.py
diff --git a/pySafeRunner/test_runner.py b/pySafeRunner/test_runner.py
new file mode 100644
index 0000000000000000000000000000000000000000..4e0b3fdea0264118f90ca725dcc57f3a67d961f5
--- /dev/null
+++ b/pySafeRunner/test_runner.py
@@ -0,0 +1,38 @@
+from pySafeRunner import safeRunner
+
+def compute(i,j=5, k=0):
+    from random import randint
+    print("i {}, j {}, k {}".format(i,j,k))
+    if randint(0,10) >= 9:
+        raise Exception("Huge fail")
+    else:
+        return i*j+k
+
+def test_kwargs():
+    runner = safeRunner.safeRunner()
+    for i in range(0,5):
+        for j in range(5,10):
+            print(runner.run(compute, {'i':i,'k':5,'j':j}))
+
+def test_packedargs():
+    runner = safeRunner.safeRunner()
+    for i in range(0,5):
+        for j in range(5,10):
+            print(runner.run(compute, (i,j,5)))
+
+def test_singleArg():
+    runner = safeRunner.safeRunner()
+    for i in range(0,5):
+        for j in range(5,10):
+            print(runner.run(compute, i))
+
+def test_singlemap():
+    runner = safeRunner.safeRunner()
+    for res in runner.map(compute, range(0,5)):
+        print(res)
+
+def test_doublemap():
+    runner = safeRunner.safeRunner()
+    for res in runner.map(compute, range(0,5),range(5,10)):
+        print(res)
+