On this page:
make-servlet-tester

9 Testing Servlets

 (require web-server/test)

The Web Server provides a simple facility for writing tests for Web servlets.

The core functionality allows a request to be sent to the servlet and the response captured:

procedure

(make-servlet-tester servlet)

  
(->* ()
     ((or/c string? url? request? false/c)
      (listof binding?)
      #:raw? boolean?)
     (or/c bytes?
           xexpr?))
  servlet : 
(-> request?
    can-be-response?)
This function accepts a servlet function and provides a function that accepts a request and returns the answer the servlet for that request. This interaction function has many possible calling patterns:
  • No arguments: a call to the root URL path with no bindings.

  • At least one argument: this may be a string, URL, or a request data structure.

  • Two arguments: the first argument must be a string or a URL, but the second argument can specify the request bindings.

  • The optional #:raw? keyword controls whether an X-expression or a byte string is returned as a result.

This facility is designed to be used in concert with a technique of extracting continuation URLs and relevant values; xml/path is one way to do this. Here is an extended example that tests an Add-Two-Numbers.com:

(define (test-add-two-numbers -s>)
  (define x (random 500))
  (define xs (string->bytes/utf-8 (number->string x)))
  (define y (random 500))
  (define ys (string->bytes/utf-8 (number->string y)))
 
  (define r0 (-s>))
  (define k0 (se-path* '(form #:action) r0))
  (define i0 (se-path* '(form input #:name) r0))
  (define r1
    (-s> (format "~a?~a=~a" k0 i0 xs)
         (list (make-binding:form (string->bytes/utf-8 i0) xs))))
  (define k1 (se-path* '(form #:action) r1))
  (define i1 (se-path* '(form input #:name) r1))
  (define r2
    (-s> (format "~a?~a=~a" k1 i1 ys)
         (list (make-binding:form (string->bytes/utf-8 i1) ys))))
  (define n (se-path* '(p) r2))
  (check-equal? n
                (format "The answer is ~a" (+ x y))))
 
(require
 (prefix-in ex:add1: web-server/default-web-root/htdocs/servlets/examples/add)
 (prefix-in ex:add2: web-server/default-web-root/htdocs/servlets/examples/add-v2))
 
(test-add-two-numbers
 (make-servlet-tester ex:add1:start))
(test-add-two-numbers
 (make-servlet-tester ex:add2:start))