mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-10 23:12:41 +08:00
feat: validate with functions
This commit is contained in:
@@ -0,0 +1,60 @@
|
|||||||
|
config:
|
||||||
|
name: "request methods testcase: validate with functions"
|
||||||
|
variables:
|
||||||
|
foo1: session_bar1
|
||||||
|
base_url: "https://postman-echo.com"
|
||||||
|
verify: False
|
||||||
|
|
||||||
|
teststeps:
|
||||||
|
-
|
||||||
|
name: get with params
|
||||||
|
variables:
|
||||||
|
foo1: bar1
|
||||||
|
foo2: session_bar2
|
||||||
|
sum_v: "${sum_two(1, 2)}"
|
||||||
|
request:
|
||||||
|
method: GET
|
||||||
|
url: /get
|
||||||
|
params:
|
||||||
|
foo1: $foo1
|
||||||
|
foo2: $foo2
|
||||||
|
sum_v: $sum_v
|
||||||
|
headers:
|
||||||
|
User-Agent: HttpRunner/${get_httprunner_version()}
|
||||||
|
extract:
|
||||||
|
session_foo2: "body.args.foo2"
|
||||||
|
validate:
|
||||||
|
- eq: ["status_code", 200]
|
||||||
|
- eq: ["body.args.sum_v", "3"]
|
||||||
|
- less_than: ["body.args.sum_v", "${sum_two(2, 2)}"]
|
||||||
|
-
|
||||||
|
name: post raw text
|
||||||
|
variables:
|
||||||
|
foo1: "hello world"
|
||||||
|
foo3: "$session_foo2"
|
||||||
|
request:
|
||||||
|
method: POST
|
||||||
|
url: /post
|
||||||
|
headers:
|
||||||
|
User-Agent: HttpRunner/${get_httprunner_version()}
|
||||||
|
Content-Type: "text/plain"
|
||||||
|
data: "This is expected to be sent back as part of response body: $foo1-$foo3."
|
||||||
|
validate:
|
||||||
|
- eq: ["status_code", 200]
|
||||||
|
- eq: ["body.data", "This is expected to be sent back as part of response body: session_bar1-session_bar2."]
|
||||||
|
-
|
||||||
|
name: post form data
|
||||||
|
variables:
|
||||||
|
foo1: bar1
|
||||||
|
foo2: bar2
|
||||||
|
request:
|
||||||
|
method: POST
|
||||||
|
url: /post
|
||||||
|
headers:
|
||||||
|
User-Agent: HttpRunner/${get_httprunner_version()}
|
||||||
|
Content-Type: "application/x-www-form-urlencoded"
|
||||||
|
data: "foo1=$foo1&foo2=$foo2"
|
||||||
|
validate:
|
||||||
|
- eq: ["status_code", 200]
|
||||||
|
- eq: ["body.form.foo1", "session_bar1"]
|
||||||
|
- eq: ["body.form.foo2", "bar2"]
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
from httprunner.v3.runner import TestCaseRunner
|
||||||
|
from httprunner.v3.schema import TestsConfig, TestStep
|
||||||
|
from examples.postman_echo import debugtalk
|
||||||
|
|
||||||
|
|
||||||
|
class TestCaseRequestMethodsValidateWithFunctions(TestCaseRunner):
|
||||||
|
config = TestsConfig(**{
|
||||||
|
"name": "request methods testcase: validate with functions",
|
||||||
|
"variables": {
|
||||||
|
"foo1": "session_bar1"
|
||||||
|
},
|
||||||
|
"functions": {
|
||||||
|
"get_httprunner_version": debugtalk.get_httprunner_version,
|
||||||
|
"sum_two": debugtalk.sum_two
|
||||||
|
},
|
||||||
|
"base_url": "https://postman-echo.com",
|
||||||
|
"verify": False
|
||||||
|
})
|
||||||
|
|
||||||
|
teststeps = [
|
||||||
|
TestStep(**{
|
||||||
|
"name": "get with params",
|
||||||
|
"variables": {
|
||||||
|
"foo1": "bar1",
|
||||||
|
"foo2": "session_bar2",
|
||||||
|
"sum_v": "${sum_two(1, 2)}"
|
||||||
|
},
|
||||||
|
"request": {
|
||||||
|
"method": "GET",
|
||||||
|
"url": "/get",
|
||||||
|
"params": {
|
||||||
|
"foo1": "$foo1",
|
||||||
|
"foo2": "$foo2",
|
||||||
|
"sum_v": "$sum_v"
|
||||||
|
},
|
||||||
|
"headers": {
|
||||||
|
"User-Agent": "HttpRunner/${get_httprunner_version()}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extract": {
|
||||||
|
"session_foo2": "body.args.foo2"
|
||||||
|
},
|
||||||
|
"validate": [
|
||||||
|
{"eq": ["status_code", 200]},
|
||||||
|
{"eq": ["body.args.sum_v", 3]},
|
||||||
|
{"less_than": ["body.args.sum_v", "${sum_two(2, 2)}"]}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
TestCaseRequestMethodsValidateWithFunctions().run()
|
||||||
@@ -5,8 +5,8 @@ import requests
|
|||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from httprunner.v3.exceptions import ParamsError, ValidationFailure
|
from httprunner.v3.exceptions import ParamsError, ValidationFailure
|
||||||
from httprunner.v3.parser import parse_data
|
from httprunner.v3.parser import parse_data, parse_string_value
|
||||||
from httprunner.v3.schema import VariablesMapping, Validators
|
from httprunner.v3.schema import VariablesMapping, Validators, FunctionsMapping
|
||||||
from httprunner.v3.validator import uniform_validator, AssertMethods
|
from httprunner.v3.validator import uniform_validator, AssertMethods
|
||||||
|
|
||||||
|
|
||||||
@@ -25,7 +25,10 @@ class ResponseObject(object):
|
|||||||
"body": resp_obj.json()
|
"body": resp_obj.json()
|
||||||
}
|
}
|
||||||
|
|
||||||
def validate(self, validators: Validators, variables_mapping: VariablesMapping = None) -> NoReturn:
|
def validate(self,
|
||||||
|
validators: Validators,
|
||||||
|
variables_mapping: VariablesMapping = None,
|
||||||
|
functions_mapping: FunctionsMapping = None) -> NoReturn:
|
||||||
|
|
||||||
for v in validators:
|
for v in validators:
|
||||||
u_validator = uniform_validator(v)
|
u_validator = uniform_validator(v)
|
||||||
@@ -41,8 +44,9 @@ class ResponseObject(object):
|
|||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise ParamsError(f"Assert Method not supported: {assert_method}")
|
raise ParamsError(f"Assert Method not supported: {assert_method}")
|
||||||
|
|
||||||
|
actual_value = parse_string_value(actual_value)
|
||||||
# parse expected value with config/teststep/extracted variables
|
# parse expected value with config/teststep/extracted variables
|
||||||
expect_value = parse_data(expect_value, variables_mapping)
|
expect_value = parse_data(expect_value, variables_mapping, functions_mapping)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
assert_func(actual_value, expect_value)
|
assert_func(actual_value, expect_value)
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ class TestCaseRunner(object):
|
|||||||
|
|
||||||
# validate
|
# validate
|
||||||
validators = step.validators
|
validators = step.validators
|
||||||
resp_obj.validate(validators, variables_mapping)
|
resp_obj.validate(validators, variables_mapping, self.config.functions)
|
||||||
|
|
||||||
return extract_mapping
|
return extract_mapping
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user