Skip to content

faisalraja/testhttp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

deploy-package

testhttp

testhttp allows you to send HTTP request for testing your endpoints.

Features

  • The goal is to be compatible with vscode-restclient but with ability to assert results and automate dependencies.
  • Run named or by index http definition
  • Import other files to re-use http definition
  • Set global variables as a context for the scripts

Install

pip install testhttp
# -h for help
testhttp -h

# Run a file
testhttp --file sample.http

# Run all files based on glob pattern
testhttp --pattern '/Users/path/to/**/test/*.http'
# Declaring a global variable that will be available for all scripts
testhttp --var host=https://baseurl/
# Automatically remove steps with the same name
testhttp --distinct

Usage

In editor, type an HTTP request as simple as below:

https://example.com/comments/1

###

# @name postToExample
POST https://example.com/comments HTTP/1.1
content-type: application/json

{
    "name": "sample",
    "time": "Wed, 21 Oct 2015 18:27:50 GMT"
}

>>>

assert {{response.status_code}} == 404

Save it as sample.http then run the command below:

# add --verbose to see request and response information 
# add --debug for debug info
testhttp --file.sample.http --name postToExample

Import

You can import other files by:

@import other_file.http

###

... rest of your http info

This will do a lookup relative to current file. Without specifying --name or --index it will still only run all tests under the current file and will only run things it depends on.

Variables & Dependencies

Running by name will result in execution of it's variable dependencies. This way you can only test specific spec and it will still work with single command.

@user = hello
@password = world
@baseUrl = https://example.com

# @name login
POST {{baseUrl}}/api/login HTTP/1.1
content-type: application/json

{
    "username": "{{user}}",
    "password": "{{password}}"
}

>>>

assert {{response.status_code}} == 200

###

@token = {{login.response.body.token}}

# @name getCurrentUser
GET {{baseUrl}}/api/me HTTP/1.1
content-type: application/json
Authorization: {{token}}

>>>

assert {{response.status_code}} == 200
assert {{response.body.username}} == {{user}}

Running only getCurrentUser will automatically run login since it depends on login in the token variable.