🟪 DeepfakeHTTP is a web server that uses HTTP dumps as a source for responses.

Overview

DeepfakeHTTP – Your 100% static dynamic backend

License MIT Version 1.0.5 Powered by Tommy


DeepfakeHTTP is a web server that uses HTTP dumps as a source for responses.

What are people using it for?
  • Creating the product POC or demo before even starting out with the backend
  • REST, GraphQL, and other APIs prototyping and testing
  • Hiding critical enterprise infrastructure behind a simple static facade
  • Hacking and fine-tuning HTTP communications on both server and client sides

Features

  • No dependencies
  • No installation
  • No configuration files
  • Single-file executable

Command Line Interface (CLI)

java -jar df.jar [options] [dump1.txt] [dump2.txt] ...

Options:
        --help           print help message
        --info           print dump files statistics as JSON
        --requests       print dump requests as JSON
        --port           TCP port number, default: 8080
        --collect <file> append live request/response dumps to file
        --no-log         disable request/response console logging
        --no-etag        disable ETag optimization
        --no-watch       disable watch dump files for changes

Prerequisites

  • Java 15 or above

Get started

  1. Download the latest release of df.jar
  2. Copy-paste the content of the dump example to the file dump-sample.txt:
    GET /api/customer/123 HTTP/1.1
    
    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 123,
        "fname": "John",
        "lname": "Doe",
        "email": ["[email protected]", "[email protected]"]
    }
    
  3. Start the server from command line:
    java -jar df.jar dump-sample.txt
    
  4. Use a browser to check whether the server is running: http://localhost:8080/api/customer/123
For more examples see: APPENDIX B.

How does it work?

  1. Got client request
  2. Search dump entries (request-response pairs) for appropriate entry by matching all specified request parts:
    method, URI, headers, and body
  3. If entry is found, the server generates a corresponded response and sends it to the client
  4. If entry is not found, the server search dump entries for response with status 400 (Bad request).
  5. If entry is found, the server send entry to the client
  6. If entry is not found, the server sends status 400 with no body.
That's all.

Supports

  • asynchronous requests and responses
  • scriptable response body
  • all HTTP methods
  • multi-line and multi-value headers
  • OpenAPI-styled templates in paths
  • wildcards ( * and ? with escape / ) in query string and header values
  • templates in response body
  • response body fetching from external sources like URLs, local files, and data URI
  • per entry user-defined request and response delays
  • comments in dumps
  • live request/response collection
  • watching dump files for changes
  • ETag optimization

License

The DeepfakeHTTP is released under the MIT license.




APPENDIX A.
Optional response headers

Header Description
X-Body-Type

Tells the server what the content type (media type) of the body content actually is. Value of this header has same rules as value of standard HTTP Content-Type header.

This header is useful when you want to use binary data, template or script as a response body.

Examples:

📎 A response body is a character data (default).
No X-Body-Type header is needed.

HTTP/1.1 200 OK
Content-Type: application/json

{"id": 5, "name": "John Doe"}

📎 Get a response body from a remote server.
Body type is text/uri-list (RFC 2483)

HTTP/1.1 200 OK
Content-Type: application/json
X-Body-Type: text/uri-list

http://example.com/api/car/1234.json

📎 Get a response body from a file.
Body type is text/uri-list (RFC 2483)

HTTP/1.1 200 OK
Content-Type: image/jpeg
X-Body-Type: text/uri-list

file:///home/john/photo.jpeg

📎 Get a response body from a data URI.
Body type is text/uri-list (RFC 2483)

HTTP/1.1 200 OK
Content-Type: image/gif
X-Body-Type: text/uri-list

data:image/gif;base64,R0lGODlhAQABAIAAAP...

📎 Get a response body from a template.
Body type is text/template. Useful for forms processing.

HTTP/1.1 200 OK
Content-Type: text/html
X-Body-Type: text/template

<!DOCTYPE html>
<html lang="en">
    <body>
        <h1>Hello, ${fname[0]} ${lname[0]}!</h1>
    </body>
</html>
X-Request-Delay

Request delay (in milliseconds).

Example:
# Two seconds request delay.

HTTP/1.1 200 OK
X-Request-Delay: 2000

{"id": 5, "name": "John Doe"}
X-Response-Delay

Response delay (in milliseconds).

Example:
# Two seconds response delay.

HTTP/1.1 200 OK
X-Response-Delay: 2000

{"id": 5, "name": "John Doe"}
NOTE:  Optional response headers will not be sent to clients.

APPENDIX B.
Dump examples


Example 1.

# Comments are welcome! :)
# Please don't miss a single carriage return between headers and body!

GET /form.html HTTP/1.1

# Fake HTML file :)
HTTP/1.1 200 OK

<!DOCTYPE html>
<html lang="en">
<body>
    <form action="/add_user.php" method="POST">
        <label for="fname">First name:</label><input type="text" name="fname"><br><br>
        <label for="lname">Last name: </label><input type="text" name="lname"><br><br>
        <input type="submit" value="Submit">
    </form>
</body>
</html>


POST /add_user.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded

# Fake PHP file :)
HTTP/1.1 200 OK
Content-Type: text/html
X-Body-Type: text/template

<!DOCTYPE html>
<html lang="en">
<body>
    <h1>Hello, ${fname[0]} ${lname[0]}!</h1>
</body>
</html>

Example 2.

#
# First request-response entry
#

# Client request
GET /api/customer/5 HTTP/1.1
Accept-Language: ru;*

# Server response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "id": 5,
    "name": "Джон Доу"
}


#
# Second request-response entry
#

# Client request
GET /api/customer/5 HTTP/1.1

# Server response
HTTP/1.1 200 OK
Content-Type: application/json

{
    "id": 5,
    "name": "John Doe"
}

Example 3.

#
# Work with HTML forms (1)
#

GET /form.html HTTP/1.1

HTTP/1.1 200 OK

<!DOCTYPE html>
<html lang="en">
<body>
    <form action="/action_page.php" method="POST">
        <label for="fname">First name:</label><input type="text" name="fname"><br><br>
        <label for="lname">Last name: </label><input type="text" name="lname"><br><br>
        <input type="submit" value="Submit">
    </form>
</body>
</html>


POST /action_page.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded

HTTP/1.1 200 OK
Content-Type: text/html
X-Body-Type: text/template

<!DOCTYPE html>
<html lang="en">
<body>
    <h1>Hello, ${fname[0]} ${lname[0]}!</h1>
</body>
</html>

Example 4.

#
# Work with HTML forms (2)
#

GET /form.html HTTP/1.1

HTTP/1.1 200 OK

<!DOCTYPE html>
<html lang="en">
<body>
    <form action="/action_page.php" method="POST">
        <label for="fname">First name:</label><input type="text" name="fname"><br><br>
        <label for="lname">Last name: </label><input type="text" name="lname"><br><br>
        <p>Only first name 'John' and last name 'Doe' are supported.<br>
        Expected output is: Hello, John Doe!,<br>
        or HTTP status 400 Bad request if first name is not 'John' or last name is not 'Doe'.
        </p><br><br>
        <input type="submit" value="Submit">
    </form>
</body>
</html>


POST /action_page.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded

fname=John&lname=Doe

HTTP/1.1 200 OK
Content-Type: text/html
X-Body-Type: text/template

<!DOCTYPE html>
<body>
    <h1>Hello, ${fname[0]} ${lname[0]}!</h1>
</body>
</html>
Comments
  • POST request with Content-Type: application/json

    POST request with Content-Type: application/json

    Can you show me example how to fake POST request with Content-Type: application/json? For this curl?:

    curl --header "Content-Type: application/json" \
      --request POST \
      --data '{"username":"xyz","password":"xyz"}' \
      http://localhost:3000/api/login
    

    response can be also Content-Type: application/json for example: { "name": "Martin", "surname: "Jablecnik", "logged_in: true }

    In your examples I see only GET for Content-Type: application/json and POST for Content-Type: application/x-www-form-urlencoded

    Thank you very much.

    opened by mjablecnik 7
  • Option for change default response

    Option for change default response

    Hello, I know that when I send request for not existing endpoint so I gain 400 Bad request error response. But what to do when I want to have some another default response? For example 404 Not found?

    Exists some option which can change what DeepfakeHTTP return when the endpoint doesn't exists?

    enhancement 
    opened by mjablecnik 6
  • New --data option question

    New --data option question

    Hello @xnbox, I see that you added a new --data option into DeepfakeHTTP but I didn't found any example of how to use it.. Can you write here some description of this new functionality please? I tried understand it but I am not sure if I understand it right. Can you write here also some small example? Thank you very much for your work. :-)

    enhancement 
    opened by mjablecnik 6
  • Comments behind of text

    Comments behind of text

    It would be nice to have also comments starting in the middle of line after some text.

    For example I can have this endpoint:

    #
    # Login endpoint
    #
    POST /login HTTP/1.1
    Content-Type: application/json
    
    {"username":"xyz","password":"xyz"}
    
    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "name":"Martin",          # here is user name
        "surname":"Jablecnik"     # here is user surname
    }
    

    where I have to comment my fields of output body but I don't want to have it in the real output:

    image

    enhancement 
    opened by mjablecnik 6
  • Versioning and releases

    Versioning and releases

    Hello, I feel that you didn't understand semantic versioning correctly.. I see that you released a lot of various versions (3.1.1, 3.2.1, 4.1.1, 5.1.1) during last two weeks.

    But semantic versioning is in format: MAJOR.MINOR.PATCH which is increased without too big jumping. For example when you have version: 2.1.1 And when you add 3 bug fixes so next version will be: 2.1.2 When you add 3 bug fixes and 2 features so next version will be: 2.2.0 When you add 3 bug fixes and 4 features but one from your change will not compatible with some previous version (for example you can remove some big functionality or you can rewrite all your code with some BREAK changes) so next version will be: 3.0.0

    I also very recommend make releases in longer interval. For example when you make release every second or third day with small changes, it is too often. Much better is when you make release with new features only one per month. And change MAJOR version only one per year.

    If you want to make releases more often, you can release it as RC (Release candidate) version: 2.2.0-rc.1 And release candidate you can release only one per 1 week so during one month you will release max. only 4 RC versions.

    Do you understand me?

    versioning and releases 
    opened by mjablecnik 3
  • How to configure https to work?

    How to configure https to work?

    Hi! When I start the project, I have an notice saying that "The Apache Tomcat Native library which allows using OpenSSL was not found on the java." This is no problem for me (it's a little bit anoying that it prints mt entire path after that, but no problem)

    But the real problem is when I try to point to my dfHttp as if it used https, so using "https://localhost:8080" instead of "http://localhost:8080" when this happens, it print an error and a stacktrace. I guess that this is not so intuitive for who is using image

    documentation question 
    opened by LuccaPrado 3
  • Options are detected as files

    Options are detected as files

    When I run command:

    java -jar ~/Downloads/df-1.0.8.jar --port 3000 /home/martin/Projects/my-project/endpoints/*
    

    So Deepfake detect argument --port 3000 as file inputs: image

    bug 
    opened by mjablecnik 2
  • Configurable log verbose

    Configurable log verbose

    Exists some possibility how to show in stdout only one line requests and more detailed information about request/response move into some special log file? Or show it only with -v, -vv, -vvv verbose tags. I think there is too a lot of information in stdout per every request for now but I don't want to disable it..

    enhancement 
    opened by mjablecnik 2
  • Where's the AI part of it?

    Where's the AI part of it?

    Given the name, I was expecting that you'd use AI to implement a fancy mock HTTP server. Turns out it's just yet another regular mock HTTP server... Reporting this as a bug in the project's name ;)

    enhancement 
    opened by lehphyro 1
  • Help - How to access request body in post request?

    Help - How to access request body in post request?

    Hi,

    Dump

    POST /api/customer/show HTTP/1.1
    
    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": "${request.body}",
        "name": "Name"
    }
    

    Request

    http localhost:9999/api/customer/show  id=1
    
    POST /api/customer/show HTTP/1.1
    Host: localhost:9999
    User-Agent: HTTPie/1.0.3
    Accept-Encoding: gzip, deflate
    Accept: application/json, */*
    Connection: keep-alive
    Content-Type: application/json
    Content-Length: 11
    
    {"id": "1"}
    --------------------------------------------------------------------------------
    HTTP/1.1 200 OK
    Content-Type: application/json
    Server: DeepfakeHTTP v6.4.2 (2022-01-23 14:42:00)
    Content-Length: 48
    ETag: "85fffc49"
    
    {
        "id": "{"id": "1"}",
        "name": "Name"
    }
    

    Expectation

    Response:

    {
        "id": "1",
        "name": "Name"
    }
    

    Question

    What do I need to do, if I want to access the "id" key in the request body?

    I tried "id": "${request.body.id}" but this returns "id": "undefined".

    opened by jhrdt 0
  • java.lang.NullPointerException after DeepfakeHTTP start

    java.lang.NullPointerException after DeepfakeHTTP start

    Hi,

    my startup gives me the following response. Everything works fine, but I am curious about the java.lang.NullPointerException after the DeepfakeHTTP start.

    Using Ubuntu's openjdk-17-jdk-headless package.

    ❯ java -jar df-6.4.2.jar --dump dump.txt 
    2022-01-25 13:13:46 INFO   Cluster RuleSet not found due to [java.lang.ClassNotFoundException: org.apache.catalina.ha.ClusterRuleSet]. Cluster configuration disabled.
    2022-01-25 13:13:46 INFO   Cluster RuleSet not found due to [java.lang.ClassNotFoundException: org.apache.catalina.ha.ClusterRuleSet]. Cluster configuration disabled.
    2022-01-25 13:13:46 INFO   Server version name:   Apache Tomcat/10.0.10
    2022-01-25 13:13:46 INFO   Server built:          Jul 30 2021 09:51:27 UTC
    2022-01-25 13:13:46 INFO   Server version number: 10.0.10.0
    2022-01-25 13:13:46 INFO   OS Name:               Linux
    2022-01-25 13:13:46 INFO   OS Version:            5.13.0-27-generic
    2022-01-25 13:13:46 INFO   Architecture:          amd64
    2022-01-25 13:13:46 INFO   Java Home:             /usr/lib/jvm/java-17-openjdk-amd64
    2022-01-25 13:13:46 INFO   JVM Version:           17.0.1+12-Ubuntu-120.04
    2022-01-25 13:13:46 INFO   JVM Vendor:            Private Build
    2022-01-25 13:13:46 INFO   CATALINA_BASE:         /tmp/catalina_base-9622103583921507216
    2022-01-25 13:13:46 INFO   CATALINA_HOME:         /tmp/catalina_home-17115209648337543168
    2022-01-25 13:13:46 INFO   The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib]
    2022-01-25 13:13:47 INFO   Initializing ProtocolHandler ["http-nio-8080"]
    2022-01-25 13:13:47 INFO   Server initialization in [1493] milliseconds
    2022-01-25 13:13:47 WARNING A context path must either be an empty string or start with a '/' and do not end with a '/'. The path [/] does not meet these criteria and has been changed to []
    2022-01-25 13:13:47 INFO   Starting service [Catalina]
    2022-01-25 13:13:47 INFO   Starting Servlet engine: [Apache Tomcat/10.0.10]
    2022-01-25 13:13:48 INFO   Unknown class loader [jdk.internal.loader.ClassLoaders$PlatformClassLoader@6009e3f5] of class [class jdk.internal.loader.ClassLoaders$PlatformClassLoader]
    2022-01-25 13:13:53 INFO   At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
    2022-01-25 13:13:53 INFO   DeepfakeHTTP Logger: HELLO!
    2022-01-25 13:13:53 INFO   File: "dump.txt" found 1 entries.
    2022-01-25 13:13:53 INFO   1 file(s) processed. 1 entries found.
    2022-01-25 13:13:53 INFO   1 dump file(s) loaded.
    2022-01-25 13:13:53 INFO   0 JavaScript file(s) loaded.
    2022-01-25 13:13:53 INFO   Data file loaded.
    DeepfakeHTTP started.
    java.lang.NullPointerException: Cannot invoke "java.nio.file.Path.register(java.nio.file.WatchService, java.nio.file.WatchEvent$Kind[])" because "this.dirPath" is null
            at org.deepfake_http.common.dir_watcher.DirectoryWatcher.run(DirectoryWatcher.java:53)
            at java.base/java.lang.Thread.run(Thread.java:833)
    Starting ProtocolHandler ["http-nio-8080"]
    Tommy started.
    

    Test:

    ❯ http http://localhost:8080/api/customer/123
    HTTP/1.1 200 
    Access-Control-Allow-Headers: *
    Access-Control-Allow-Methods: *
    Access-Control-Allow-Origin: *
    Connection: keep-alive
    Content-Length: 117
    Content-Type: application/json
    Date: Tue, 25 Jan 2022 12:18:48 GMT
    ETag: "f97ade2e"
    Keep-Alive: timeout=20
    Server: DeepfakeHTTP v6.4.2 (2022-01-23 14:42:00)
    
    {
        "email": [
            "[email protected]",
            "[email protected]"
        ],
        "fname": "John",
        "id": 123,
        "lname": "Doe"
    }
    
    bug 
    opened by jhrdt 1
  • Documentation for REST API DeepfakeHTTP/PetClinic

    Documentation for REST API DeepfakeHTTP/PetClinic

    Hello @xnbox , I would be interested in creating REST API reference documentation for how to use your DeepfakeHTTP/PetClinic API.

    Let me know if that would add value to your project.

    Thanks

    documentation 
    opened by Mikail1010 1
  • Custom separator

    Custom separator

    Hello, I want to use my own custom separator instead of '.' but when I add '#---' so it doesn't work. Do you know why? I have there '#' for make as comment it..

    Here is example of my file:

    #---
    
    POST /dapi/v1/inventory/item/EAN123/save HTTP/1.1
    
    {"items":["SN123","SN124","SN125","SN126"]}
    
    HTTP/1.1 200 OK
    
    #---
    
    GET /dapi/v1/inventory/item/SN123/check HTTP/1.1
    
    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
      "in_stock": true
    }
    
    #---
    
    GET /dapi/v1/inventory/item/SN123/location HTTP/1.1
    
    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
      "location": {
        "code": "1-2-3A",
        "name": "L123A"
      }
    }
    
    #---
    

    My version is: 1.0.14

    opened by mjablecnik 1
  • Project setup documentation for developers

    Project setup documentation for developers

    Hello, I would like to help you with this project in my free time but I don't know how to start.. I have IntelliJ Idea Community Edition 2020.3, Java SDK version 17, cloned latest version of this repository and my setup configuration is here: image

    But when I run it so I gain only this: image

    And I don't know how to setup it correctly..

    Can you write some documentation for developers about how to setup this project and how to build it? Are you using Maven or Gradle build tool? I don't see any configurations for this tools in the project..

    Thank you very much.. :-)

    documentation help wanted good first issue build 
    opened by mjablecnik 3
  • Refactoring and tests

    Refactoring and tests

    Hello @xnbox I found your DeebfakeHTTP project here and it looks very nice :+1: You created nice tool with good documentation and probably I will be use it ;-)

    But when I look into your code so I can really recommend you to read Clean Code book by Robert C. Martin. Because I found that you need it.

    Then I really recommend you to go through your projects and made refactor because in DeepfakeHttpServlet you have very big doDbRequest function which can be splited into more smaller functions for better readability. I tried understand it for future contribution but it is very hard to read and understand for me..

    The same you can make also in your other projects for example BrowserWindow.java intommybox project you have really big launch function or createMenu function..

    Also you should create some tests for ensure that after your refactor works everything right.

    Without this changes will be very hard for other developers like me to understand your code and make some changes and PRs in the future..

    I hope it will be improved and your project will be successful in the Open Source world. ;-)

    enhancement 
    opened by mjablecnik 1
Releases(v6.4.3)
  • v6.4.3(Mar 9, 2022)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    release v6.4.3

    • Bug fixes
    • Minor code enhancements
    • Release on top of Tommy v10.0.10
    • README updated

    release v6.4.2

    • Cheatsheet page updated.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • PetClinic example updated
    • Release on top of Tommy v10.0.10

    release v6.4.1

    • New request header: X-OpenAPI-Parameters
    • PetClinic example added

    release v6.3.2

    • Bug fixes

    release v6.3.1

    • New option --dir forward unmatched requests to specified directory

    release v6.2.1:

    • New option --no-log-request-info disable request info in console logging

    release v6.1.2:

    • Option --host fixed (help and doc updated)

    release v6.1.1:

    • New option --db <file|url> json/yaml/csv memory file to populate templates
    • New option --db-export export memory to json file
    • New option --db-path serve live memory file at specified context
    • New option --js <file|url>... JavaScript file(s) for script engine context
    • New option --no-bak disable backup old memory file before overwrite
    • New response header X-Handler-XGI XGI (Extended Gateway Interface) program
    • New response header X-Handler-CGI CGI (Common Gateway Interface) program
    • New response header X-Handler-JS JavaScript response handler function
    • Default 'Not found' status changed from 400 to 404
    • Cheatsheet page updated.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-6.4.3.jar(25.28 MB)
    df-spring-petclinic-6.4.3.zip(554.47 KB)
  • v6.4.2(Jan 23, 2022)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    release v6.4.2

    • Cheatsheet page updated.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • PetClinic example updated
    • Release on top of Tommy v10.0.10

    release v6.4.1

    • New request header: X-OpenAPI-Parameters
    • PetClinic example added

    release v6.3.2

    • Bug fixes

    release v6.3.1

    • New option --dir forward unmatched requests to specified directory

    release v6.2.1:

    • New option --no-log-request-info disable request info in console logging

    release v6.1.2:

    • Option --host fixed (help and doc updated)

    release v6.1.1:

    • New option --db <file|url> json/yaml/csv memory file to populate templates
    • New option --db-export export memory to json file
    • New option --db-path serve live memory file at specified context
    • New option --js <file|url>... JavaScript file(s) for script engine context
    • New option --no-bak disable backup old memory file before overwrite
    • New response header X-Handler-XGI XGI (Extended Gateway Interface) program
    • New response header X-Handler-CGI CGI (Common Gateway Interface) program
    • New response header X-Handler-JS JavaScript response handler function
    • Default 'Not found' status changed from 400 to 404
    • Cheatsheet page updated.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-6.4.2.jar(25.28 MB)
    df-spring-petclinic-6.4.2.zip(554.47 KB)
  • v6.4.1(Nov 2, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    release v6.4.1

    • New request header: X-OpenAPI-Parameters
    • PetClinic example added

    release v6.3.2

    • Bug fixes

    release v6.3.1

    • New option --dir forward unmatched requests to specified directory

    release v6.2.1:

    • New option --no-log-request-info disable request info in console logging

    release v6.1.2:

    • Option --host fixed (help and doc updated)

    release v6.1.1:

    • New option --db <file|url> json/yaml/csv memory file to populate templates
    • New option --db-export export memory to json file
    • New option --db-path serve live memory file at specified context
    • New option --js <file|url>... JavaScript file(s) for script engine context
    • New option --no-bak disable backup old memory file before overwrite
    • New response header X-Handler-XGI XGI (Extended Gateway Interface) program
    • New response header X-Handler-CGI CGI (Common Gateway Interface) program
    • New response header X-Handler-JS JavaScript response handler function
    • Default 'Not found' status changed from 400 to 404
    • Cheatsheet page updated.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-6.4.1.jar(25.28 MB)
    df-spring-petclinic-6.4.1.zip(554.40 KB)
  • v6.3.2(Oct 27, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    release v6.3.2

    • Bug fixes

    release v6.3.1

    • New option --dir forward unmatched requests to specified directory

    release v6.2.1:

    • New option --no-log-request-info disable request info in console logging

    release v6.1.2:

    • Option --host fixed (help and doc updated)

    release v6.1.1:

    • New option --db <file|url> json/yaml/csv memory file to populate templates
    • New option --db-export export memory to json file
    • New option --db-path serve live memory file at specified context
    • New option --js <file|url>... JavaScript file(s) for script engine context
    • New option --no-bak disable backup old memory file before overwrite
    • New response header X-Handler-XGI XGI (Extended Gateway Interface) program
    • New response header X-Handler-CGI CGI (Common Gateway Interface) program
    • New response header X-Handler-JS JavaScript response handler function
    • Default 'Not found' status changed from 400 to 404
    • Cheatsheet page updated.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-6.3.2.jar(25.29 MB)
  • v6.3.1(Oct 25, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release (v6.3.1)

    • New option --dir forward unmatched requests to specified directory

    release v6.2.1:

    • New option --no-log-request-info disable request info in console logging

    release v6.1.2:

    • Option --host fixed (help and doc updated)

    release v6.1.1:

    • New option --db <file|url> json/yaml/csv memory file to populate templates
    • New option --db-export export memory to json file
    • New option --db-path serve live memory file at specified context
    • New option --js <file|url>... JavaScript file(s) for script engine context
    • New option --no-bak disable backup old memory file before overwrite
    • New response header X-Handler-XGI XGI (Extended Gateway Interface) program
    • New response header X-Handler-CGI CGI (Common Gateway Interface) program
    • New response header X-Handler-JS JavaScript response handler function
    • Default 'Not found' status changed from 400 to 404
    • Cheatsheet page updated.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-6.3.1.jar(25.28 MB)
  • v6.2.1(Oct 18, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release (v6.2.1):

    • New option --no-log-request-info disable request info in console logging

    release (v6.1.2):

    • Option --host fixed (help and doc updated)

    release (v6.1.1):

    • New option --db <file|url> json/yaml/csv memory file to populate templates
    • New option --db-export export memory to json file
    • New option --db-path serve live memory file at specified context
    • New option --js <file|url>... JavaScript file(s) for script engine context
    • New option --no-bak disable backup old memory file before overwrite
    • New response header X-Handler-XGI XGI (Extended Gateway Interface) program
    • New response header X-Handler-CGI CGI (Common Gateway Interface) program
    • New response header X-Handler-JS JavaScript response handler function
    • Default 'Not found' status changed from 400 to 404
    • Cheatsheet page updated.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-6.2.1.jar(25.26 MB)
  • v6.1.2(Oct 17, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release (v6.1.2):

    • option --host fixed (help and doc updated)

    release (v6.1.1):

    • New option --db <file|url> json/yaml/csv memory file to populate templates
    • New option --db-export export memory to json file
    • New option --db-path serve live memory file at specified context
    • New option --js <file|url>... JavaScript file(s) for script engine context
    • New option --no-bak disable backup old memory file before overwrite
    • New response header X-Handler-XGI XGI (Extended Gateway Interface) program
    • New response header X-Handler-CGI CGI (Common Gateway Interface) program
    • New response header X-Handler-JS JavaScript response handler function
    • Default 'Not found' status changed from 400 to 404
    • Cheatsheet page updated.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-6.1.2.jar(25.26 MB)
  • v6.1.1(Oct 14, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release (v6.1.1):

    • New option --db <file|url> json/yaml/csv memory file to populate templates
    • New option --db-export export memory to json file
    • New option --db-path serve live memory file at specified context
    • New option --js <file|url>... JavaScript file(s) for script engine context
    • New option --no-bak disable backup old memory file before overwrite
    • New response header X-Handler-XGI XGI (Extended Gateway Interface) program
    • New response header X-Handler-CGI CGI (Common Gateway Interface) program
    • New response header X-Handler-JS JavaScript response handler function
    • Default 'Not found' status changed from 400 to 404
    • Cheatsheet page updated.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-6.1.1.jar(25.26 MB)
  • v5.1.1(Oct 2, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release (v5.1.1):

    • Added new option --no-server (disable 'Server' header)
    • Added new response header X-Forward-To (forward client request to specified origin)
    • Cheatsheet page updated.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-5.1.1.jar(26.72 MB)
  • v4.1.1(Sep 30, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release (v4.1.1):

    • Added new option --max-log-body (max body bytes in console log, default: unlimited)
    • Added new option --no-log-headers (disable request/response headers in console logging)
    • Added new option --no-log-body (disable request/response body in console logging)
    • Added new response header X-Content-Source (read content from external sources by URL)
    • Added new response header X-CGI (CGI (Common Gateway Interface) program)
    • Cheatsheet page updated.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-4.1.1.jar(26.72 MB)
  • v3.2.1(Sep 29, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release (v3.2.1):

    • Added URL support to option --dump <file|url>... (dump text file(s) and/or OpenAPI json/yaml file(s))
    • Added URL support to option --data <file|url>... (json/yaml/csv data file(s) to populate templates);
    • Cheatsheet page initial commit.
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-3.2.1.jar(26.72 MB)
  • v3.1.1(Sep 26, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release (v3.1.1):

    • New option: --dump ... (dump text file(s) and/or OpenAPI json/yaml file(s))
    • Added multiple files support to option --data ... (json/yaml/csv data file(s) to populate templates)
    • Added CSV format support to option --data ... (json/yaml/csv data file(s) to populate templates)
    • Added support for random function in templates Eg.: ${random(data.customers).email}
    • Added support for request parameters in templates Eg.: ${request.customerId[0]}
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-3.1.1.jar(26.76 MB)
  • v2.1.1(Sep 25, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release:

    • New option: --no-template (disable template processing)
    • New option: --no-wildcard (disable wildcard processing)
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    • Switching to semantic versioning (See: https://semver.org) Thanks to @mjablecnik for the tip.
    Source code(tar.gz)
    Source code(zip)
    df-2.1.1.jar(26.57 MB)
  • v1.0.15(Sep 23, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release:

    • New option: --no-cors (disable CORS headers)
    • New option: --no-powered-by (disable 'X-Powered-By' header)
    • New option: --strict-json (enable strict JSON comparison)
    • New option: --status (status code for non-matching requests, default: 400)
    • Added templates support in any place of request/response: first line, headers, body
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-1.0.15.jar(26.57 MB)
  • v1.0.14(Sep 18, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release:

    • Color output supported in the console log
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-1.0.14.jar(26.56 MB)
  • v1.0.13(Sep 17, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release:

    • New flag: --no-color (disable ANSI color output for --print-* commands)
    • Support for NO_COLOR environment variable
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-1.0.13.jar(26.55 MB)
  • v1.0.12(Sep 17, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to:

    • @mjablecnik
    • @LuccaPrado
    • @bernd-wechner
    • @virejdasani

    In this release:

    • New option: --data (specify json/yaml data file to populate templates)
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-1.0.12.jar(26.22 MB)
  • v1.0.11(Sep 15, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to @mjablecnik for the submitted issues.

    In this release:

    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    • --no-trim option (disable whitespace trimming at the end of the body) was removed
    Source code(tar.gz)
    Source code(zip)
    df-1.0.11.jar(26.22 MB)
  • v1.0.10(Sep 14, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to @mjablecnik for the submitted issues.

    In this release:

    • New option: --no-trim (disable whitespace trimming at the end of the body)
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-1.0.10.jar(26.22 MB)
  • v1.0.9(Sep 14, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to @mjablecnik for the submitted issues.

    In this release:

    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.10
    Source code(tar.gz)
    Source code(zip)
    df-1.0.9.jar(26.22 MB)
  • v1.0.8(Sep 12, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to @LuccaPrado for the submitted issues.

    In this release:

    • Release on top of Tommy v10.0.10
    • Better support for TLS(SSL)
    • New CLI arg: --port-ssl (HTTPS TCP port number)
    • New CLI arg: --redirect (redirect HTTP to HTTPS)
    • Minor bug fixes
    • Minor code enhancements
    • Documentation updated
    Source code(tar.gz)
    Source code(zip)
    df-1.0.8.jar(26.21 MB)
  • v1.0.7(Sep 11, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation!

    In this release:

    • Better support for TLS(SSL)
    • New CLI arg: --port-ssl (HTTPS TCP port number)
    • New CLI arg: --no-redirect (disable redirect HTTP to HTTPS)
    • Minor bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.8
    Source code(tar.gz)
    Source code(zip)
    df-1.0.7.jar(26.19 MB)
  • v1.0.6(Sep 9, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation!

    In this release:

    • New CLI arg: --openapi-path (serve OpenAPI client at specified context path)
    • New CLI arg: --openapi-title (provide custom OpenAPI spec title)
    • New CLI arg: --print-requests (print dump requests to stdout)
    • New CLI arg: --print-info (print dump files statistics to stdout)
    • New CLI arg: --print-openapi (print OpenAPI specification to stdout)
    • New CLI arg: --format <json|yaml> (set output format for print-* options, default: json)
    • New CLI arg: --pretty (enable prettyprint for print-* options)
    • Minor bug fixes
    • Minor code enhancements
    • Documentation updated
    • Release on top of Tommy v10.0.8
    Source code(tar.gz)
    Source code(zip)
    df-1.0.6.jar(26.18 MB)
  • v1.0.5(Sep 2, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation!

    In this release:

    • Release on top of Tommy v10.0.8
    • New CLI arg: --no-log (disable request/response console logging)
    • New CLI arg: --collect (collect live request/response dumps to file)
    • Bug fixes
    • Minor code enhancements
    • Documentation updated
    Source code(tar.gz)
    Source code(zip)
    df-1.0.5.jar(16.05 MB)
  • v1.0.4(Sep 2, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to @bernd-wechner for the submitted issues.

    In this release:

    • Release on top of Tommy v10.0.8
    • Bug fixes
    • Minor code enhancements
    Source code(tar.gz)
    Source code(zip)
    df-1.0.4.jar(16.05 MB)
  • v1.0.3(Aug 31, 2021)

    Thank you to all the people who helped with advice, suggestions, and participation! Special thanks to @virejdasani for the submitted issues.

    In this release:

    • Release on top of Tommy v10.0.8
    • New CLI args: --no-watch and --no-etag
    • Bug fixes
    • Minor code enhancements
    Source code(tar.gz)
    Source code(zip)
    df-1.0.3.jar(16.04 MB)
  • v1.0.2(Aug 21, 2021)

Gatling is a load test tool. It officially supports HTTP, WebSocket, Server-Sent-Events and JMS.

Gatling What is Gatling ? Gatling is a load test tool. It officially supports HTTP, WebSocket, Server-Sent-Events and JMS. Motivation Finding fancy GU

Gatling 5.8k Dec 27, 2022
A powerful open source test automation platform for Web Apps, Mobile Apps, and APIs

A powerful open source test automation platform for Web Apps, Mobile Apps, and APIs. Build stable and reliable end-to-end tests @ DevOps speed.

Testsigma Technologies Inc 466 Dec 31, 2022
Sonic-server - sonic-server

?? Sonic Cloud Real Machine Testing Platform English | 简体中文 Official Website Sonic Official Website Background What is sonic ? Nowadays, automatic tes

null 1.7k Jan 4, 2023
Sikuli's official repository on github. Ask questions or report bugs at http://launchpad.net/sikuli.

!!!This Sikuli X-1.0rc3 IS NO LONGER SUPPORTED !!! A new version of Sikuli(X) is available since 2013 as a follow up development GitHub repo: RaiMan/S

Sikuli Lab 1.7k Jan 3, 2023
A tool for mocking HTTP services

WireMock - a web service test double for all occasions Key Features HTTP response stubbing, matchable on URL, header and body content patterns Request

Tom Akehurst 5.3k Dec 31, 2022
MockServer enables easy mocking of any system you integrate with via HTTP or HTTPS with clients written in Java, JavaScript and Rub

MockServer enables easy mocking of any system you integrate with via HTTP or HTTPS with clients written in Java, JavaScript and Ruby. MockServer also includes a proxy that introspects all proxied traffic including encrypted SSL traffic and supports Port Forwarding, Web Proxying (i.e. HTTP proxy), HTTPS Tunneling Proxying (using HTTP CONNECT) and SOCKS Proxying (i.e. dynamic port forwarding).

Mock-Server 4k Jan 4, 2023
WireMock - A tool for mocking HTTP services

WireMock only uses log4j in its test dependencies. Neither the thin nor standalone JAR depends on or embeds log4j, so you can continue to use WireMock 2.32.0 without any risk of exposue to the recently discovered vulnerability.

null 5.3k Dec 31, 2022
Cucumber DSL for testing RESTful Web Services

cukes-rest takes simplicity of Cucumber and provides bindings for HTTP specification. As a sugar on top, cukes-rest adds steps for storing and using r

C.T.Co 100 Oct 18, 2022
Testcontainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.

Testcontainers Testcontainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium we

null 6.7k Jan 9, 2023
Utility to automatically manage all web element waits and enables to write wait-free selenium tests.

selenium-auto-wait selenium-auto-wait automatically manages all weblement waits and makes you to write wait free selenium tests. Features Waits till e

Sudharsan Selvaraj 31 Nov 1, 2022
Web automation example code of tests running parallely

Don't forget to give a ⭐ to make the project popular. ❓ What is this Repository about? This repo contains example code to run a single test parallely

Mohammad Faisal Khatri 1 Apr 3, 2022
Easy Setup Stub Server

Moco Moco is an easy setup stub framework. Latest Release 1.1.0 More details in Release Notes User Voice Let me know if you are using Moco. Join Moco

Zheng Ye 4.1k Dec 30, 2022
A Minestom extension that opens the port that the Minestom server is running on!

OpenPortStom A project that uses weupnp to forward the port for you when starting your server, it will also attempt to close the port. Yes this is a s

null 4 Apr 24, 2022
This mod gives the option to server admins to disable chat reporting, in a non-intrusive way

Simply No Report This mod gives the option to server admins to disable chat reporting, in a non-intrusive way. It is disabled by default to let everyo

Amber Bertucci 17 Aug 20, 2022
JUnit 5 Parameterized Test Yaml Test Data Source

Yamaledt — JUnit 5 Parameterized Tests Using Yaml and Jamal Introduction and usage Note This is the latest development documentation. This is a SNAPSH

Peter Verhas 4 Mar 23, 2022
Apache JMeter - An Open Source Java application designed to measure performance and load test applications

An Open Source Java application designed to measure performance and load test applications. By The Apache Software Foundation What Is It? Apache JMete

The Apache Software Foundation 6.7k Jan 1, 2023
ScalaTest is a free, open-source testing toolkit for Scala and Java programmers

ScalaTest is a free, open-source testing toolkit for Scala and Java programmers.

ScalaTest 1.1k Dec 26, 2022
AllPairs4J - an open source Java library for generation of minimal set of test combinations

AllPairs4J AllPairs4J is an open source Java library for generation of minimal set of test combinations. AllPairs4J is a Java port of allpairspy proje

Pavel Nazimok 5 Dec 11, 2022