Documentation ¶
Overview ¶
Package gdutils provides State object with utility methods that may be used for behavioral testing of HTTP API.
Main package struct is State that represents one testing scenario state. It can be initialized by 2 ways.
First, returns *State with default http.Client, DefaultCache and provided debug mode:
func NewDefaultState(isDebug bool) *State
Second, returns *State with provided http.Client, Cache and debug mode:
func NewState(HttpClient HttpClient, cache Cache, isDebug bool) *State
Struct State contains of ¶
* cache with arbitrary values - State.Cache.
* info whether scenario is in debug mode - State.IsDebug.
Useful State methods are func (s *State) GetLastResponse() (*http.Response, error) func (s *State) GetLastResponseBody() []byte func (s *State) GetLastResponseHeaders() http.Header
Testing HTTP API usually consist the following aspects:
* Data generation:
func (s *State) IGenerateARandomIntInTheRangeToAndSaveItAs(from, to int, cacheKey string) error func (s *State) IGenerateARandomFloatInTheRangeToAndSaveItAs(from, to int, cacheKey string) error func (s *State) IGenerateARandomStringOfLengthWithoutUnicodeCharactersAndSaveItAs(strLength int, cacheKey string) error func (s *State) IGenerateARandomStringOfLengthWithUnicodeCharactersAndSaveItAs(strLength int, cacheKey string) error
* Sending HTTP(s) requests:
func (s *State) ISendRequestToWithBodyAndHeaders(method, urlTemplate string, bodyTemplate *godog.DocString) error
or
func (s *State) IPrepareNewRequestToAndSaveItAs(method, urlTemplate, cacheKey string) error func (s *State) ISetFollowingHeadersForPreparedRequest(cacheKey string, headersTemplate *godog.DocString) error func (s *State) ISetFollowingBodyForPreparedRequest(cacheKey string, bodyTemplate *godog.DocString) error func (s *State) ISendRequest(cacheKey string) error
* Assertions:
func (s *State) TheResponseStatusCodeShouldBe(code int) error func (s *State) TheResponseBodyShouldHaveType(dataType string) error func (s *State) TheJSONResponseShouldHaveNode(expr string) error func (s *State) TheJSONNodeShouldNotBe(expr string, goType string) error func (s *State) TheJSONNodeShouldBe(expr string, goType string) error func (s *State) TheJSONResponseShouldHaveNodes(nodeExprs string) error func (s *State) TheJSONNodeShouldBeSliceOfLength(expr string, length int) error func (s *State) TheJSONNodeShouldBeOfValue(expr, dataType, dataValue string) error func (s *State) TheResponseShouldHaveHeader(name string) error func (s *State) TheResponseShouldHaveHeaderOfValue(name, value string) error
* Preserving JSON nodes:
func (s *State) ISaveFromTheLastResponseJSONNodeAs(expr, cacheKey string) error
* Temporary stopping scenario execution:
func (s *State) IWait(timeInterval string) error
* Debugging:
func (s *State) IPrintLastResponseBody() error func (s *State) IStartDebugMode() error func (s *State) IStopDebugMode() error
Index ¶
- Variables
- type State
- func (s *State) IGenerateARandomFloatInTheRangeToAndSaveItAs(from, to int, cacheKey string) error
- func (s *State) IGenerateARandomIntInTheRangeToAndSaveItAs(from, to int, cacheKey string) error
- func (s *State) IGenerateARandomStringOfLengthWithUnicodeCharactersAndSaveItAs(strLength int, cacheKey string) error
- func (s *State) IGenerateARandomStringOfLengthWithoutUnicodeCharactersAndSaveItAs(strLength int, cacheKey string) error
- func (s *State) IPrepareNewRequestToAndSaveItAs(method, urlTemplate, cacheKey string) error
- func (s *State) IPrintLastResponseBody() error
- func (s *State) ISaveFromTheLastResponseJSONNodeAs(expr, cacheKey string) error
- func (s *State) ISendRequest(cacheKey string) error
- func (s *State) ISendRequestToWithBodyAndHeaders(method, urlTemplate string, bodyTemplate *godog.DocString) error
- func (s *State) ISetFollowingBodyForPreparedRequest(cacheKey string, bodyTemplate *godog.DocString) error
- func (s *State) ISetFollowingHeadersForPreparedRequest(cacheKey string, headersTemplate *godog.DocString) error
- func (s *State) IStartDebugMode() error
- func (s *State) IStopDebugMode() error
- func (s *State) IWait(timeInterval string) error
- func (s *State) ResetState(isDebug bool)
- func (s *State) TheJSONNodeShouldBe(expr string, goType string) error
- func (s *State) TheJSONNodeShouldBeOfValue(expr, dataType, dataValue string) error
- func (s *State) TheJSONNodeShouldBeSliceOfLength(expr string, length int) error
- func (s *State) TheJSONNodeShouldNotBe(expr string, goType string) error
- func (s *State) TheJSONResponseShouldHaveNode(expr string) error
- func (s *State) TheJSONResponseShouldHaveNodes(nodeExprs string) error
- func (s *State) TheResponseBodyShouldHaveType(dataType string) error
- func (s *State) TheResponseShouldHaveHeader(name string) error
- func (s *State) TheResponseShouldHaveHeaderOfValue(name, value string) error
- func (s *State) TheResponseStatusCodeShouldBe(code int) error
Constants ¶
This section is empty.
Variables ¶
var ErrGdutils = errors.New("gdutils")
ErrGdutils is general package error and can be tested against
var ErrHTTPReqRes = fmt.Errorf("%w: something wrong with HTTP(s) request/response", ErrGdutils)
ErrHTTPReqRes tells that there is problem with last HTTP(s) request/response
var ErrJson = fmt.Errorf("%w: something wrong with JSON", ErrGdutils)
ErrJson tells that there is problem with JSON
var ErrPreservedData = errors.New("preserved data error")
ErrPreservedData tells indices that there is some kind of error with scenario preserved data.
var ErrQJSON = fmt.Errorf("%w: could not obtain value from JSON", ErrJson)
ErrQJSON occurs when value could not be obtained from JSON
Functions ¶
This section is empty.
Types ¶
type State ¶
type State struct { //IsDebug determine whether scenario is in debug mode Debugger debugger.Debugger //Cache is storage for scenario data Cache cache.Cache //HttpClient is entity that has ability to send HTTP(s) requests HttpContext httpctx.HttpContext //TemplateEngine is entity that has ability to retrieve templated values TemplateEngine template.TemplateEngine }
State struct represents data shared across one scenario.
func NewDefaultState ¶
NewDefaultState returns *State with default http.Client, DefaultCache and default Debugger
func (*State) IGenerateARandomFloatInTheRangeToAndSaveItAs ¶
IGenerateARandomFloatInTheRangeToAndSaveItAs generates random float from provided range and preserve it under given DefaultCache key
func (*State) IGenerateARandomIntInTheRangeToAndSaveItAs ¶
IGenerateARandomIntInTheRangeToAndSaveItAs generates random integer from provided range and preserve it under given DefaultCache key
func (*State) IGenerateARandomStringOfLengthWithUnicodeCharactersAndSaveItAs ¶
func (s *State) IGenerateARandomStringOfLengthWithUnicodeCharactersAndSaveItAs(strLength int, cacheKey string) error
IGenerateARandomStringOfLengthWithUnicodeCharactersAndSaveItAs generates random string of given length with unicode characters and preserve it under given DefaultCache key
func (*State) IGenerateARandomStringOfLengthWithoutUnicodeCharactersAndSaveItAs ¶
func (s *State) IGenerateARandomStringOfLengthWithoutUnicodeCharactersAndSaveItAs(strLength int, cacheKey string) error
IGenerateARandomStringOfLengthWithoutUnicodeCharactersAndSaveItAs generates random string of given length without unicode characters and preserve it under given DefaultCache key
func (*State) IPrepareNewRequestToAndSaveItAs ¶ added in v0.7.0
IPrepareNewRequestToAndSaveItAs prepares new request and saves it in cache under cacheKey
func (*State) IPrintLastResponseBody ¶
IPrintLastResponseBody prints last response from request
func (*State) ISaveFromTheLastResponseJSONNodeAs ¶
ISaveFromTheLastResponseJSONNodeAs saves from last response body JSON node under given DefaultCache key. expr should be valid according to qjson library
func (*State) ISendRequest ¶ added in v0.7.0
ISendRequest sends previously prepared HTTP(s) request
func (*State) ISendRequestToWithBodyAndHeaders ¶
func (s *State) ISendRequestToWithBodyAndHeaders(method, urlTemplate string, bodyTemplate *godog.DocString) error
ISendRequestToWithBodyAndHeaders sends HTTP request with provided body and headers. Argument method indices HTTP request method for example: "POST", "GET" etc. Argument urlTemplate should be full url path. May include template values. Argument bodyTemplate should be slice of bytes marshallable on bodyHeaders struct
func (*State) ISetFollowingBodyForPreparedRequest ¶ added in v0.7.0
func (s *State) ISetFollowingBodyForPreparedRequest(cacheKey string, bodyTemplate *godog.DocString) error
ISetFollowingBodyForPreparedRequest sets body for previously prepared request bodyTemplate may be in any format and accepts template values
func (*State) ISetFollowingHeadersForPreparedRequest ¶ added in v0.7.0
func (s *State) ISetFollowingHeadersForPreparedRequest(cacheKey string, headersTemplate *godog.DocString) error
ISetFollowingHeadersForPreparedRequest sets provided headers for previously prepared request
func (*State) IStartDebugMode ¶
IStartDebugMode starts debugging mode
func (*State) IStopDebugMode ¶
IStopDebugMode stops debugging mode
func (*State) IWait ¶
IWait waits for given timeInterval amount of time timeInterval should be string valid for time.ParseDuration func
func (*State) ResetState ¶
ResetState resets State struct instance to default values.
func (*State) TheJSONNodeShouldBe ¶
TheJSONNodeShouldBe checks whether JSON node from last response body is of provided type goType may be one of: nil, string, int, float, bool, map, slice expr should be valid according to qjson library
func (*State) TheJSONNodeShouldBeOfValue ¶
TheJSONNodeShouldBeOfValue compares json node value from expression to expected by user dataValue of given by user dataType available data types are listed in switch section in each case directive expr should be valid according to qjson library
func (*State) TheJSONNodeShouldBeSliceOfLength ¶
TheJSONNodeShouldBeSliceOfLength checks whether given key is slice and has given length expr should be valid according to qjson library
func (*State) TheJSONNodeShouldNotBe ¶
TheJSONNodeShouldNotBe checks whether JSON node from last response body is not of provided type goType may be one of: nil, string, int, float, bool, map, slice expr should be valid according to qjson library
func (*State) TheJSONResponseShouldHaveNode ¶
TheJSONResponseShouldHaveNode checks whether last response body contains given key
func (*State) TheJSONResponseShouldHaveNodes ¶
TheJSONResponseShouldHaveNodes checks whether last request body has keys defined in string separated by comma nodeExpr should be valid according to qjson library expressions separated by comma (,)
func (*State) TheResponseBodyShouldHaveType ¶
TheResponseBodyShouldHaveType checks whether last response body has given data type available data types are listed as package constants
func (*State) TheResponseShouldHaveHeader ¶
TheResponseShouldHaveHeader checks whether last HTTP response has given header
func (*State) TheResponseShouldHaveHeaderOfValue ¶
TheResponseShouldHaveHeaderOfValue checks whether last HTTP response has given header with provided value
func (*State) TheResponseStatusCodeShouldBe ¶
TheResponseStatusCodeShouldBe compare last response status code with given in argument.