diff --git a/test/WebService_test.py b/test/WebService_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..f72f7f590a32d04c7d20d292edfd67dfff0fa440
--- /dev/null
+++ b/test/WebService_test.py
@@ -0,0 +1,77 @@
+"""Tests for WebService.py"""
+
+from nose.tools import assert_equals
+import sys
+from webtest import TestApp
+
+from geomagio.edge import EdgeFactory
+from geomagio.WebService import WebService
+
+
+app = TestApp(WebService(EdgeFactory()))
+
+
+def test_bad_requests():
+    """WebService_test.test_bad_requests()
+    """
+    # Check bad request (values)
+    bad_values = [
+        '/',
+        '/?id=bad',
+        '/?id=BOU&starttime=2017-50-50',
+        '/?id=BOU&starttime=2016-06-06&endtime=2017-50-50',
+        '/?id=BOU&starttime=2016-06-06&endtime=2016-06-05',
+        '/?id=BOU&elements=H,E,D,Z,F',
+        '/?id=BOU&type=bad',
+        '/?id=BOU&format=bad'
+    ]
+    for bad_val in bad_values:
+        try:
+            response = app.get(bad_val, expect_errors=True)
+            assert_equals(response.status_int, 400)
+        except Exception:
+            exception = sys.exc_info()[1]
+            message = exception.args[0]
+            print('FAIL: ' + message + '\nrequest = ' + bad_val)
+    # Check bad request (duplicates)
+    duplicate_values = [
+            '/?id=BOU&id=BOU',
+            '/?id=BOU&starttime=2016-06-06&starttime=2016-06-06',
+            '/?id=BOU&endtime=2017-50-50&endtime=2017-50-50',
+            '/?id=BOU&elements=H,E,Z&elements=H,E,Z',
+            '/?id=BOU&type=variation&type=variation',
+            '/?id=BOU&format=iaga2002&format=iaga2002'
+    ]
+    for duplicate in duplicate_values:
+        try:
+            response = app.get(duplicate, expect_errors=True)
+            assert_equals(response.status_int, 400)
+        except Exception:
+            exception = sys.exc_info()[1]
+            message = exception.args[0]
+            print('FAIL: ' + message + '\nrequest = ' + duplicate)
+
+def test_good_requests():
+    """WebService_test.test_good_requests()
+    """
+    # Check for upper and lower case
+    good_requests = [
+            '/?id=BOU',
+            '/?id=bou',
+            '/?id=bou&starttime=2016-06-06',
+            '/?id=bou&starttime=2016-06-06&endtime=2016-06-07',
+            '/?id=bou&elements=H,E,Z,F',
+            '/?id=bou&elements=h,e,z,f',
+            '/?id=BOU&type=variation',
+            '/?id=BOU&type=VARIATION',
+            '/?id=BOU&format=iaga2002',
+            '/?id=BOU&format=IAGA2002'
+    ]
+    for request in good_requests:
+        try:
+            response = app.get(request)
+            assert_equals(response.status_int, 200)
+        except Exception:
+            exception = sys.exc_info()[1]
+            message = exception.args[0]
+            print('FAIL: ' + message + '\nrequest = ' + request)