diff --git a/http-test.cabal b/http-test.cabal
--- a/http-test.cabal
+++ b/http-test.cabal
@@ -1,5 +1,5 @@
 Name:                http-test
-Version:             0.2.0.3
+Version:             0.2.1.0
 synopsis:            Test framework for HTTP APIs
 Description:         A simple framework for making assertions about the 
                      responses of HTTP servers.
@@ -43,6 +43,7 @@
                 , bytestring
                 , lens
                 , http-client
+                , time
 
 executable    test-http-test-bayeshive
   main-is: test.hs
diff --git a/src/Test/HTTP.hs b/src/Test/HTTP.hs
--- a/src/Test/HTTP.hs
+++ b/src/Test/HTTP.hs
@@ -1,4 +1,4 @@
-module Test.HTTP (httpTestCase, get, getJSON, withJSON, post, postJSON, postForm, assert, assertEq, assertParse, debug, Session, Url, Tasty.defaultMain) where
+module Test.HTTP (httpTestCase, get, getJSON, withJSON, post, postJSON, postForm, assert, assertEq, assertParse, debug, Session, Url, Tasty.defaultMain, tic, toc) where
 
 import Control.Monad
 import Control.Monad.Error
@@ -22,6 +22,7 @@
 import qualified Network.Wreq.Types as WreqT
 import Control.Lens
 import Data.Aeson.Lens
+import Data.Time
 
 import qualified Network.HTTP.Client as HT 
 
@@ -30,7 +31,8 @@
 type Session = S.StateT HttpTest IO
 
 data HttpTest = HttpTest { baseUrl :: String,
-                           cookieJar :: HT.CookieJar }
+                           cookieJar :: HT.CookieJar,
+                           timer :: UTCTime }
 
 type Url = String
 
@@ -40,7 +42,8 @@
              -> Session () -- ^ the actions and assertions that define the session
              -> TestTree
 httpTestCase sessionName sessBaseURL m =  HUnit.testCase sessionName $ do
-   S.evalStateT m $ HttpTest sessBaseURL (HT.createCookieJar [])
+   tm <- getCurrentTime
+   S.evalStateT m $ HttpTest sessBaseURL (HT.createCookieJar []) tm
 
 
 withHT :: (HttpTest -> IO (HT.CookieJar, a)) -> Session a
@@ -62,7 +65,7 @@
 
 
 getRaw :: Url -> Session (Int, String) 
-getRaw url = withHT $ \(HttpTest base cj) -> do
+getRaw url = withHT $ \(HttpTest base cj _) -> do
    r <- Wreq.getWith (Wreq.defaults & Wreq.cookies .~ cj) (base ++ url)
    return (r ^. Wreq.responseCookieJar, 
            (r ^. Wreq.responseStatus . Wreq.statusCode, 
@@ -95,7 +98,7 @@
 
 -- | Post a string body
 postRaw :: WreqT.Postable a => Url -> a -> Session String
-postRaw url body = withHT $ \(HttpTest base cj) -> do
+postRaw url body = withHT $ \(HttpTest base cj _) -> do
   r <- Wreq.postWith (Wreq.defaults & Wreq.cookies .~ cj) (base ++ url) body
 
   let code = r ^. Wreq.responseStatus . Wreq.statusCode
@@ -168,3 +171,19 @@
      else return () -}
 
 
+-- | Re-start the timer
+
+tic :: Session ()
+tic = do
+  now <- liftIO $ getCurrentTime
+  S.modify $ \s -> s { timer = now }
+
+
+-- | Print the number of seconds elapsed, with a prefix
+
+toc :: String -> Session ()
+toc s = do
+  last <- fmap timer $ S.get
+  now <- liftIO $ getCurrentTime
+  let df = diffUTCTime now last
+  liftIO $ putStrLn $ s ++ " "++show df
