venom

package module
v1.0.0-beta Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 24, 2020 License: Apache-2.0 Imports: 36 Imported by: 38

README ΒΆ

🐍 Venom

Venom run executors (script, HTTP Request, etc. ) and assertions. It can also output xUnit results files.

Venom Demonstration

Command Line

Download latest binary release from https://github.com/ovh/venom/releases

$ venom run -h

$ venom run *.yml

Notice that variables initialized with -var-from-file argument can be overrided with -var argument.

Usage:
  venom run [flags]

Flags:
      --format string           --format:yaml, json, xml, tap (default "xml")
  -h, --help                    help for run
      --output-dir string       Output Directory: create tests results file inside this directory
      --stop-on-failure         Stop running Test Suite on first Test Case failure
      --var strings             --var cds='cds -f config.json' --var cds2='cds -f config.json'
      --var-from-file strings   --var-from-file filename.yaml --var-from-file filename2.yaml: yaml, must contains a dictionnary
  -v, --verbose count           verbose. -vv to very verbose and -vvv to very verbose with CPU Profiling

You can define the arguments with environment variables:

venom run my-test-suite.yml --format=json
# is the same as
VENOM_FORMAT=json venom run my-test-suite.yml
      --format           -  example: VENOM_FORMAT=json
      --output-dir       -  example: VENOM_OUTPUT_DIR=.
      --stop-on-failure  -  example: VENOM_STOP_ON_FAILURE=true
      --var              -  example: VENOM_VAR="foo=bar"
      --var-from-file    -  example: VENOM_VAR_FROM_FILE="fileA.yml fileB.yml"
      -v                 -  example: VENOM_VERBOSE=2 is the same as -vv

You can define the venom settings using a configuration file .venomrc. This configuration file should be placed in the current directory or in the home directory.

variables: 
  - foo=bar
variables_files
  - my_var_file.yaml
stop_on_failure: true
format: xml
output_dir: output
verbosity: 3

Please note that command line flags overrides the configuration file. Configuration file overrides the Environment variables.

Docker image

venom can be launched inside a docker image with:

$ git clone git@github.com:ovh/venom.git
$ cd venom
$ docker run -it $(docker build -q .) --rm -v $(pwd)/outputs:/outputs -v $(pwd):/tests run /tests/testsuite.yaml

TestSuites

A test suite is a collection of test cases that are intended to be used to test a software program to show that it has some specified set of behaviours. A test case is a specification of the inputs, execution conditions, testing procedure, and expected results that define a single test to be executed to achieve a particular software testing objective, such as to exercise a particular program path or to verify compliance with a specific requirement.

In venom the testcases are executed sequentialy within a testsuite. Each testcase is an ordered set of steps. Each step is based on an executor that enable some specific kind of behavior.

In venom a testsuite is written in one yaml file respecting the following structure.


name: Title of TestSuite
testcases:
- name: TestCase with default value, exec cmd. Check if exit code != 1
  steps:
  - script: echo 'foo'
    type: exec

- name: Title of First TestCase
  steps:
  - script: echo 'foo'
    assertions:
    - result.code ShouldEqual 0
  - script: echo 'bar'
    assertions:
    - result.systemout ShouldNotContainSubstring foo
    - result.timeseconds ShouldBeLessThan 1

- name: GET http testcase, with 5 seconds timeout
  steps:
  - type: http
    method: GET
    url: https://eu.api.ovh.com/1.0/
    timeout: 5
    assertions:
    - result.body ShouldContainSubstring /dedicated/server
    - result.body ShouldContainSubstring /ipLoadbalancing
    - result.statuscode ShouldEqual 200
    - result.timeseconds ShouldBeLessThan 1

- name: Test with retries and delay in seconds between each try
  steps:
  - type: http
    method: GET
    url: https://eu.api.ovh.com/1.0/
    retry: 3
    delay: 2
    assertions:
    - result.statuscode ShouldEqual 200

Executors

User defined executors

You can define an executor by single yaml file. This is a good way to abstract technical of functional behaviors and reuse them in complex testsuites.

Example:

file lib/customA.yml

executor: hello
input:
  myarg: {}
steps:
- script: echo "{\"hello\":\"{{.input.myarg}}\"}"
  assertions:
  - result.code ShouldEqual 0
output:
  display:
    hello: "{{.result.systemoutjson.hello}}"

file testsuite.yml

name: testsuite with a user executor
testcases:
- name: testA
  steps:
  - type: hello
    myarg: World
    assertions:
    - result.display.hello ShouldContainSubstring World

venom will load user's executors from the directory lib/

  • from the path of the testsuite
  • from the venom path
$ venom run testsuite.yml # lib/*.yml files will be loaded as executors.

Variables

Testsuite variables

You can define variable on the testsuite level.

name: myTestSuite
vars:
  foo: foo
  biz:
    bar: bar

testcases:
- name: first-test-case
  steps:
  - type: exec
    script: echo '{{.foo}} {{.biz.bar}}'
    assertions:
    - result.code ShouldEqual 0
    - result.systemout ShouldEqual "foo bar"
...

Each user variable used in testsuite must be declared in this section. You can override the values at runtime in a number of ways:

  • Individually, with the --var command line option.
  • In variable definitions files, either specified on the command line --var-from-file.
  • As environment variables.
Variable on Command Line

To specify individual variables on the command line, use the --var option when running the venom run commands:

venom run --var="foo=bar"
venom run --var='foo_list=["biz","buz"]'
venom run --var='foo={"biz":"bar","biz":"barr"}'

The -var option can be used any number of times in a single command.

Variable Definitions Files

To set lots of variables, it is more convenient to specify their values in a variable definitions file. This file is a yaml dictionnay and you have specify that file on the command line with --var-from-file

Environment Variables

As a fallback for the other ways of defining variables, venom searches the environment of its own process for environment variables named VENOM_VAR_ followed by the name of a declared variable.

$ export VENOM_VAR_foo=bar
$ venom run *.yml
Variable helpers

Helpers available and some examples:

  • abbrev
  • abbrevboth
  • trunc
  • trim
  • upper: {{.myvar | upper}}
  • lower: {{.myvar | lower}}
  • title
  • untitle
  • substr
  • repeat
  • trimall
  • trimAll
  • trimSuffix
  • trimPrefix
  • nospace
  • initials
  • randAlphaNum
  • randAlpha
  • randASCII
  • randNumeric
  • swapcase
  • shuffle
  • snakecase
  • camelcase
  • quote
  • squote
  • indent
  • nindent
  • replace: {{.myvar | replace "_" "."}}
  • plural
  • default: {{.myvar | default ""}}
  • empty
  • coalesce
  • toJSON
  • toPrettyJSON
  • b64enc
  • b64dec {{.result.bodyjson | b64enc}}
  • escape: replace β€˜_β€˜, β€˜/’, β€˜.’ by β€˜-’

How to use outputs from a test step as input of another test step

To be able to reuse a property from a teststep in a following testcase or step, you have to extract the variable, as the following example.

After the first step execution, venom extracts a value using a regular expression foo with a ([a-z]+) here from the content of the result.systemout property returned by the executor. Then we are able to reuse this variable with the name testA.myvariable with testA corresponding to the name of the testcase.

name: MyTestSuite
testcases:
- name: testA
  steps:
  - type: exec
    script: echo 'foo with a bar here'
    vars:
      myvariable:
        from: result.systemout
        regex: foo with a ([a-z]+) here

- name: testB
  steps:
  - type: exec
    script: echo {{.testA.myvariable}}
    assertions:
    - result.code ShouldEqual 0
    - result.systemout ShouldContainSubstring bar

Builtin venom variables

name: MyTestSuite
testcases:
- name: testA
  steps:
  - type: exec
    script: echo '{{.venom.testsuite}} {{.venom.testsuite.filename}} {{.venom.testcase}} {{.venom.teststep.number}} {{.venom.datetime}} {{.venom.timestamp}}'
    # will display something as: MyTestSuite MyTestSuiteWithVenomBuiltinVar.yml testA 0 2018-08-05T21:38:24+02:00 1533497904

Builtin variables:

  • {{.venom.testsuite}}
  • {{.venom.testsuite.filename}}
  • {{.venom.testcase}}
  • {{.venom.teststep.number}}
  • {{.venom.datetime}}
  • {{.venom.timestamp}}

Tests Report

venom run --format=xml --output-dir="."

Available format: jUnit (xml), json, yaml, tap reports

Assertion

Keywords

  • ShouldEqual
  • ShouldNotEqual
  • ShouldAlmostEqual
  • ShouldNotAlmostEqual
  • ShouldBeNil
  • ShouldNotBeNil
  • ShouldBeTrue
  • ShouldBeFalse
  • ShouldBeZeroValue
  • ShouldBeGreaterThan
  • ShouldBeGreaterThanOrEqualTo
  • ShouldBeLessThan
  • ShouldBeLessThanOrEqualTo
  • ShouldBeBetween
  • ShouldNotBeBetween
  • ShouldBeBetweenOrEqual
  • ShouldNotBeBetweenOrEqual
  • ShouldContain
  • ShouldNotContain
  • ShouldContainKey
  • ShouldNotContainKey
  • ShouldBeIn
  • ShouldNotBeIn
  • ShouldBeEmpty
  • ShouldNotBeEmpty
  • ShouldHaveLength
  • ShouldStartWith
  • ShouldNotStartWith
  • ShouldEndWith
  • ShouldNotEndWith
  • ShouldBeBlank
  • ShouldNotBeBlank
  • ShouldContainSubstring
  • ShouldNotContainSubstring
  • ShouldEqualTrimSpace
  • ShouldHappenBefore
  • ShouldHappenOnOrBefore
  • ShouldHappenAfter
  • ShouldHappenOnOrAfter
  • ShouldHappenBetween
  • ShouldNotExist

Most assertion keywords documentation can be found on https://pkg.go.dev/github.com/ovh/venom/assertions.

Advanced usage

Debug your testsuites

There is two ways to debug a testsuite:

  • use -v flag on venom binary.
    • $ venom run -v test.yml will output a venom.log file
    • $ venom run -vv test.yml will output a venom.log file and dump.json files for each teststep.
  • use info keyword your teststep: test.yml file:
name: Exec testsuite
testcases:
- name: testA
  steps:
  - type: exec
    script: echo 'foo with a bar here'
    info:
      - this a first info
      - and a second...
- name: cat json
  steps:
  - script: cat exec/testa.json
    info: "the value of result.systemoutjson is {{.result.systemoutjson}}"
    assertions:
    - result.systemoutjson.foo ShouldContainSubstrin bar
$ venom run test.yml

# output:

 β€’ Exec testsuite (exec.yml)
 	β€’ testA SUCCESS
	  [info] this a first info (exec.yml:8)
	  [info] and a second... (exec.yml:9)
 	β€’ testB SUCCESS
 	β€’ sleep 1 SUCCESS
 	β€’ cat json SUCCESS
	  [info] the value of result.systemoutjson is map[foo:bar] (exec.yml:34)

Skip testcase

It is possible to skip testcase according to some assertions. For instance, the following exampl will skip the last testcase.

name: "Skip testsuite"
vars:
  foo: bar

testcases:
- name: init
  steps:
  - type: exec
    script: echo {{.foo}}
    assertions:
    - result.code ShouldEqual 0
    - result.systemout ShouldContainSubstring bar

- name: do-not-skip-this
  skip: 
  - foo ShouldNotBeEmpty
  steps:
  - type: exec
    script: exit 0

- name: skip-this
  skip: 
    - foo ShouldBeEmpty
  steps:
  - type: exec
    script: command_not_found
    assertions:
    - result.code ShouldEqual 0

Use venom in CI

Venom can be use on dev environement or your CI server. To display correctly the venom output, you probably will have to export the environment variable IS_TTY=true before running venom.

Hacking

How to write your own executor?

How to compile?

$ make build

License

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Documentation ΒΆ

Index ΒΆ

Constants ΒΆ

This section is empty.

Variables ΒΆ

View Source
var (
	//Version is set with -ldflags "-X github.com/ovh/venom/venom.Version=$(VERSION)"
	Version = "snapshot"
)

Functions ΒΆ

func BoolVarFromCtx ΒΆ added in v1.0.0

func BoolVarFromCtx(ctx context.Context, varname string) bool

func Debug ΒΆ added in v1.0.0

func Debug(ctx context.Context, format string, args ...interface{})

func Error ΒΆ added in v1.0.0

func Error(ctx context.Context, format string, args ...interface{})

func Fatal ΒΆ added in v1.0.0

func Fatal(ctx context.Context, format string, args ...interface{})

func GetExecutorResult ΒΆ added in v1.0.0

func GetExecutorResult(r interface{}) map[string]interface{}

func Info ΒΆ added in v1.0.0

func Info(ctx context.Context, format string, args ...interface{})

func IntVarFromCtx ΒΆ added in v1.0.0

func IntVarFromCtx(ctx context.Context, varname string) int

func RemoveNotPrintableChar ΒΆ added in v0.16.0

func RemoveNotPrintableChar(in string) string

RemoveNotPrintableChar removes not printable chararacter from a string

func StringMapInterfaceVarFromCtx ΒΆ added in v1.0.0

func StringMapInterfaceVarFromCtx(ctx context.Context, varname string) map[string]interface{}

func StringMapStringVarFromCtx ΒΆ added in v1.0.0

func StringMapStringVarFromCtx(ctx context.Context, varname string) map[string]string

func StringSliceVarFromCtx ΒΆ added in v1.0.0

func StringSliceVarFromCtx(ctx context.Context, varname string) []string

func StringVarFromCtx ΒΆ added in v1.0.0

func StringVarFromCtx(ctx context.Context, varname string) string

func VarFromCtx ΒΆ added in v1.0.0

func VarFromCtx(ctx context.Context, varname string) interface{}

func Warn ΒΆ added in v1.0.0

func Warn(ctx context.Context, format string, args ...interface{})

func Warning ΒΆ added in v1.0.0

func Warning(ctx context.Context, format string, args ...interface{})

Types ΒΆ

type AssignStep ΒΆ added in v0.27.0

type AssignStep struct {
	Assignments map[string]Assignment `json:"vars" yaml:"vars" mapstructure:"vars"`
}

type Assignment ΒΆ added in v0.27.0

type Assignment struct {
	From  string `json:"from" yaml:"from"`
	Regex string `json:"regex" yaml:"regex"`
}

type ContextKey ΒΆ

type ContextKey string

type Executor ΒΆ

type Executor interface {
	// Run run a Test Step
	Run(context.Context, TestStep) (interface{}, error)
}

Executor execute a testStep.

type ExecutorRunner ΒΆ added in v1.0.0

type ExecutorRunner interface {
	Executor

	ExecutorWithSetup
	Name() string
	Retry() int
	Delay() int
	Timeout() int
	Info() []string
	Type() string
	GetExecutor() Executor
	// contains filtered or unexported methods
}

type ExecutorWithSetup ΒΆ added in v1.0.0

type ExecutorWithSetup interface {
	Setup(ctx context.Context, vars H) (context.Context, error)
	TearDown(ctx context.Context) error
}

type Failure ΒΆ

type Failure struct {
	TestcaseClassname  string `xml:"-" json:"-" yaml:"-"`
	TestcaseName       string `xml:"-" json:"-" yaml:"-"`
	TestcaseLineNumber int    `xml:"-" json:"-" yaml:"-"`
	StepNumber         int    `xml:"-" json:"-" yaml:"-"`
	Assertion          string `xml:"-" json:"-" yaml:"-"`
	Error              error  `xml:"-" json:"-" yaml:"-"`

	Value   string `xml:",cdata" json:"value" yaml:"value,omitempty"`
	Type    string `xml:"type,attr,omitempty" json:"type" yaml:"type,omitempty"`
	Message string `xml:"message,attr,omitempty" json:"message" yaml:"message,omitempty"`
}

Failure contains data related to a failed test.

func (Failure) String ΒΆ added in v1.0.0

func (f Failure) String() string

type H ΒΆ added in v0.27.0

type H map[string]interface{}

func AllVarsFromCtx ΒΆ added in v1.0.0

func AllVarsFromCtx(ctx context.Context) H

func (*H) Add ΒΆ added in v0.27.0

func (h *H) Add(k string, v interface{})

func (*H) AddAll ΒΆ added in v0.27.0

func (h *H) AddAll(h2 H)

func (*H) AddAllWithPrefix ΒΆ added in v0.27.0

func (h *H) AddAllWithPrefix(p string, h2 H)

func (*H) AddWithPrefix ΒΆ added in v0.27.0

func (h *H) AddWithPrefix(p, k string, v interface{})

func (H) Clone ΒΆ added in v0.27.0

func (h H) Clone() H

type InnerResult ΒΆ

type InnerResult struct {
	Value string `xml:",cdata" json:"value" yaml:"value"`
}

InnerResult is used by TestCase

type Property ΒΆ

type Property struct {
	XMLName xml.Name `xml:"property" json:"-" yaml:"-"`
	Name    string   `xml:"name,attr" json:"name" yaml:"-"`
	Value   string   `xml:"value,attr" json:"value" yaml:"-"`
}

Property represents a key/value pair used to define properties.

type Skipped ΒΆ added in v0.16.0

type Skipped struct {
	Value string `xml:",cdata" json:"value" yaml:"value,omitempty"`
}

Skipped contains data related to a skipped test.

type StepAssertions ΒΆ

type StepAssertions struct {
	Assertions []string `json:"assertions,omitempty" yaml:"assertions,omitempty"`
}

StepAssertions contains step assertions

type TestCase ΒΆ

type TestCase struct {
	XMLName   xml.Name  `xml:"testcase" json:"-" yaml:"-"`
	Classname string    `xml:"classname,attr,omitempty" json:"classname" yaml:"-"`
	Errors    []Failure `xml:"error,omitempty" json:"errors" yaml:"errors,omitempty"`
	Failures  []Failure `xml:"failure,omitempty" json:"failures" yaml:"failures,omitempty"`
	Name      string    `xml:"name,attr" json:"name" yaml:"name"`

	Skipped      []Skipped         `xml:"skipped,omitempty" json:"skipped" yaml:"skipped,omitempty"`
	Status       string            `xml:"status,attr,omitempty" json:"status" yaml:"status,omitempty"`
	Systemout    InnerResult       `xml:"system-out,omitempty" json:"systemout" yaml:"systemout,omitempty"`
	Systemerr    InnerResult       `xml:"system-err,omitempty" json:"systemerr" yaml:"systemerr,omitempty"`
	Time         string            `xml:"time,attr,omitempty" json:"time" yaml:"time,omitempty"`
	RawTestSteps []json.RawMessage `xml:"-" json:"steps" yaml:"steps"`

	Vars H `xml:"-" json:"-" yaml:"vars"`

	Skip []string `xml:"-" json:"skip" yaml:"skip"`
	// contains filtered or unexported fields
}

TestCase is a single test case with its result.

func (*TestCase) AppendError ΒΆ added in v1.0.0

func (tc *TestCase) AppendError(err error)

type TestStep ΒΆ

type TestStep map[string]interface{}

TestStep represents a testStep

func (TestStep) IntValue ΒΆ added in v1.0.0

func (t TestStep) IntValue(name string) (int, error)

func (TestStep) StringSliceValue ΒΆ added in v1.0.0

func (t TestStep) StringSliceValue(name string) ([]string, error)

func (TestStep) StringValue ΒΆ added in v1.0.0

func (t TestStep) StringValue(name string) (string, error)

type TestSuite ΒΆ

type TestSuite struct {
	XMLName      xml.Name   `xml:"testsuite" json:"-" yaml:"-"`
	Disabled     int        `xml:"disabled,attr,omitempty" json:"disabled" yaml:""`
	Errors       int        `xml:"errors,attr,omitempty" json:"errors" yaml:"-"`
	Failures     int        `xml:"failures,attr,omitempty" json:"failures" yaml:"-"`
	Hostname     string     `xml:"hostname,attr,omitempty" json:"hostname" yaml:"-"`
	ID           string     `xml:"id,attr,omitempty" json:"id" yaml:"-"`
	Name         string     `xml:"name,attr" json:"name" yaml:"name"`
	Filename     string     `xml:"-" json:"-" yaml:"-"`
	Package      string     `xml:"package,attr,omitempty" json:"package" yaml:"-"`
	Properties   []Property `xml:"-" json:"properties" yaml:"-"`
	Skipped      int        `xml:"skipped,attr,omitempty" json:"skipped" yaml:"skipped,omitempty"`
	Total        int        `xml:"tests,attr" json:"total" yaml:"total,omitempty"`
	TestCases    []TestCase `xml:"testcase" json:"testcases" yaml:"testcases"`
	Version      string     `xml:"version,omitempty" json:"version" yaml:"version,omitempty"`
	Time         string     `xml:"time,attr,omitempty" json:"time" yaml:"-"`
	Timestamp    string     `xml:"timestamp,attr,omitempty" json:"timestamp" yaml:"-"`
	Vars         H          `xml:"-" json:"-" yaml:"vars"`
	ComputedVars H          `xml:"-" json:"-" yaml:"-"`
	WorkDir      string     `xml:"-" json:"-" yaml:"-"`
}

TestSuite is a single JUnit test suite which may contain many testcases.

type Tests ΒΆ

type Tests struct {
	XMLName      xml.Name    `xml:"testsuites" json:"-" yaml:"-"`
	Total        int         `xml:"-" json:"total"`
	TotalOK      int         `xml:"-" json:"ok"`
	TotalKO      int         `xml:"-" json:"ko"`
	TotalSkipped int         `xml:"-" json:"skipped"`
	TestSuites   []TestSuite `xml:"testsuite" json:"test_suites"`
}

Tests contains all informations about tests in a pipeline build

type UserExecutor ΒΆ added in v1.0.0

type UserExecutor struct {
	Executor     string            `json:"executor" yaml:"executor"`
	Input        H                 `json:"input" yaml:"input"`
	RawTestSteps []json.RawMessage `json:"steps" yaml:"steps"`
	Output       json.RawMessage   `json:"output" yaml:"output"`
}

func (UserExecutor) Run ΒΆ added in v1.0.0

func (ux UserExecutor) Run(ctx context.Context, step TestStep) (interface{}, error)

type Venom ΒΆ added in v0.17.0

type Venom struct {
	LogOutput io.Writer

	PrintFunc func(format string, a ...interface{}) (n int, err error)

	OutputFormat  string
	OutputDir     string
	StopOnFailure bool
	Verbose       int
	// contains filtered or unexported fields
}

func New ΒΆ added in v0.17.0

func New() *Venom

func (*Venom) AddVariables ΒΆ added in v0.17.0

func (v *Venom) AddVariables(variables map[string]interface{})

func (*Venom) GetExecutorRunner ΒΆ added in v1.0.0

func (v *Venom) GetExecutorRunner(ctx context.Context, t TestStep, h H) (context.Context, ExecutorRunner, error)

GetExecutorRunner initializes a test by name no type -> exec is default

func (*Venom) InitLogger ΒΆ added in v1.0.0

func (v *Venom) InitLogger() error

InitLogger initializes venom logger

func (*Venom) OutputResult ΒΆ added in v0.17.0

func (v *Venom) OutputResult(tests Tests, elapsed time.Duration) error

OutputResult output result to sdtout, files...

func (*Venom) Parse ΒΆ added in v0.17.0

func (v *Venom) Parse(path []string) error

Parse parses tests suite to check context and variables

func (*Venom) Print ΒΆ added in v1.0.0

func (v *Venom) Print(format string, a ...interface{})

func (*Venom) Println ΒΆ added in v1.0.0

func (v *Venom) Println(format string, a ...interface{})

func (*Venom) PrintlnTrace ΒΆ added in v1.0.0

func (v *Venom) PrintlnTrace(s string)

func (*Venom) Process ΒΆ added in v0.17.0

func (v *Venom) Process(ctx context.Context, path []string) (*Tests, error)

Process runs tests suite and return a Tests result

func (*Venom) RegisterExecutorBuiltin ΒΆ added in v1.0.0

func (v *Venom) RegisterExecutorBuiltin(name string, e Executor)

RegisterExecutorBuiltin register builtin executors

func (*Venom) RegisterExecutorPlugin ΒΆ added in v1.0.0

func (v *Venom) RegisterExecutorPlugin(name string, e Executor)

RegisterExecutorPlugin register plugin executors

func (*Venom) RegisterExecutorUser ΒΆ added in v1.0.0

func (v *Venom) RegisterExecutorUser(name string, e Executor)

RegisterExecutorUser register User sxecutors

func (*Venom) RunTestStep ΒΆ added in v0.17.0

func (v *Venom) RunTestStep(ctx context.Context, e ExecutorRunner, tc *TestCase, stepNumber int, step TestStep) interface{}

RunTestStep executes a venom testcase is a venom context

func (*Venom) RunUserExecutor ΒΆ added in v1.0.0

func (v *Venom) RunUserExecutor(ctx context.Context, ux UserExecutor, step TestStep) (interface{}, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL