mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-04 23:16:57 +08:00
feat: describe testcase in chain-call style
This commit is contained in:
@@ -1,88 +1,77 @@
|
|||||||
# NOTICE: Generated By HttpRunner. DO NOT EDIT!
|
# NOTICE: Generated By HttpRunner. DO NOT EDIT!
|
||||||
# FROM: examples/postman_echo/request_methods/request_with_functions.yml
|
# FROM: examples/postman_echo/request_methods/request_with_functions.yml
|
||||||
|
|
||||||
from httprunner import HttpRunner, TConfig, TStep
|
from httprunner import HttpRunner, Config, Step, Request
|
||||||
|
|
||||||
|
|
||||||
class TestCaseRequestWithFunctions(HttpRunner):
|
class TestCaseRequestWithFunctions(HttpRunner):
|
||||||
config = TConfig(
|
config = (
|
||||||
**{
|
Config("request methods testcase with functions")
|
||||||
"name": "request methods testcase with functions",
|
.set_variables(foo1="session_bar1")
|
||||||
"variables": {"foo1": "session_bar1"},
|
.set_base_url("https://postman-echo.com")
|
||||||
"base_url": "https://postman-echo.com",
|
.set_verify(False)
|
||||||
"verify": False,
|
.set_path(
|
||||||
"path": "examples/postman_echo/request_methods/request_with_functions_test.py",
|
"examples/postman_echo/request_methods/request_with_functions_test.py"
|
||||||
}
|
)
|
||||||
|
.init()
|
||||||
)
|
)
|
||||||
|
|
||||||
teststeps = [
|
teststeps = [
|
||||||
TStep(
|
Step("get with params")
|
||||||
**{
|
.set_variables(foo1="bar1", foo2="session_bar2", sum_v="${sum_two(1, 2)}")
|
||||||
"name": "get with params",
|
.run_request(
|
||||||
"variables": {
|
Request()
|
||||||
"foo1": "bar1",
|
.set_method("GET")
|
||||||
"foo2": "session_bar2",
|
.set_url("/get")
|
||||||
"sum_v": "${sum_two(1, 2)}",
|
.set_params(foo1="$foo1", foo2="$foo2", sum_v="$sum_v")
|
||||||
},
|
.set_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
|
||||||
"request": {
|
)
|
||||||
"method": "GET",
|
.extract("session_foo2", "body.args.foo2")
|
||||||
"url": "/get",
|
.assert_equal("status_code", 200)
|
||||||
"params": {"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"},
|
.assert_equal("body.args.foo1", "session_bar1")
|
||||||
"headers": {"User-Agent": "HttpRunner/${get_httprunner_version()}"},
|
.assert_equal("body.args.sum_v", "3")
|
||||||
},
|
.assert_equal("body.args.foo2", "session_bar2")
|
||||||
"extract": {"session_foo2": "body.args.foo2"},
|
.init(),
|
||||||
"validate": [
|
Step("post raw text")
|
||||||
{"eq": ["status_code", 200]},
|
.set_variables(foo1="hello world", foo3="$session_foo2")
|
||||||
{"eq": ["body.args.foo1", "session_bar1"]},
|
.run_request(
|
||||||
{"eq": ["body.args.sum_v", "3"]},
|
Request()
|
||||||
{"eq": ["body.args.foo2", "session_bar2"]},
|
.set_method("POST")
|
||||||
],
|
.set_url("/post")
|
||||||
}
|
.set_headers(
|
||||||
),
|
**{
|
||||||
TStep(
|
"User-Agent": "HttpRunner/${get_httprunner_version()}",
|
||||||
**{
|
"Content-Type": "text/plain",
|
||||||
"name": "post raw text",
|
}
|
||||||
"variables": {"foo1": "hello world", "foo3": "$session_foo2"},
|
)
|
||||||
"request": {
|
.set_data(
|
||||||
"method": "POST",
|
"This is expected to be sent back as part of response body: $foo1-$foo3."
|
||||||
"url": "/post",
|
)
|
||||||
"headers": {
|
)
|
||||||
"User-Agent": "HttpRunner/${get_httprunner_version()}",
|
.assert_equal("status_code", 200)
|
||||||
"Content-Type": "text/plain",
|
.assert_equal(
|
||||||
},
|
"body.data",
|
||||||
"data": "This is expected to be sent back as part of response body: $foo1-$foo3.",
|
"This is expected to be sent back as part of response body: session_bar1-session_bar2.",
|
||||||
},
|
)
|
||||||
"validate": [
|
.init(),
|
||||||
{"eq": ["status_code", 200]},
|
Step("post form data")
|
||||||
{
|
.set_variables(**{"foo1": "bar1", "foo2": "bar2"})
|
||||||
"eq": [
|
.run_request(
|
||||||
"body.data",
|
Request()
|
||||||
"This is expected to be sent back as part of response body: session_bar1-session_bar2.",
|
.set_method("POST")
|
||||||
]
|
.set_url("/post")
|
||||||
},
|
.set_headers(
|
||||||
],
|
**{
|
||||||
}
|
"User-Agent": "HttpRunner/${get_httprunner_version()}",
|
||||||
),
|
"Content-Type": "application/x-www-form-urlencoded",
|
||||||
TStep(
|
}
|
||||||
**{
|
)
|
||||||
"name": "post form data",
|
.set_data("foo1=$foo1&foo2=$foo2")
|
||||||
"variables": {"foo1": "bar1", "foo2": "bar2"},
|
)
|
||||||
"request": {
|
.assert_equal("status_code", 200)
|
||||||
"method": "POST",
|
.assert_equal("body.form.foo1", "session_bar1")
|
||||||
"url": "/post",
|
.assert_equal("body.form.foo2", "bar2")
|
||||||
"headers": {
|
.init(),
|
||||||
"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"]},
|
|
||||||
],
|
|
||||||
}
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
__version__ = "3.0.6"
|
__version__ = "3.0.7"
|
||||||
__description__ = "One-stop solution for HTTP(S) testing."
|
__description__ = "One-stop solution for HTTP(S) testing."
|
||||||
|
|
||||||
from httprunner.runner import HttpRunner
|
from httprunner.runner import HttpRunner, Config, Step, Request
|
||||||
from httprunner.schema import TConfig, TStep
|
from httprunner.schema import TConfig, TStep
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
@@ -10,4 +10,7 @@ __all__ = [
|
|||||||
"HttpRunner",
|
"HttpRunner",
|
||||||
"TConfig",
|
"TConfig",
|
||||||
"TStep",
|
"TStep",
|
||||||
|
"Config",
|
||||||
|
"Step",
|
||||||
|
"Request",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -30,9 +30,125 @@ from httprunner.schema import (
|
|||||||
TestCaseInOut,
|
TestCaseInOut,
|
||||||
ProjectMeta,
|
ProjectMeta,
|
||||||
TestCase,
|
TestCase,
|
||||||
|
TRequest,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Config(object):
|
||||||
|
def __init__(self, name):
|
||||||
|
self.__name = name
|
||||||
|
self.__variables = {}
|
||||||
|
self.__base_url = ""
|
||||||
|
self.__verify = False
|
||||||
|
self.__path = ""
|
||||||
|
|
||||||
|
def set_variables(self, **variables):
|
||||||
|
self.__variables.update(variables)
|
||||||
|
return self
|
||||||
|
|
||||||
|
def set_base_url(self, base_url):
|
||||||
|
self.__base_url = base_url
|
||||||
|
return self
|
||||||
|
|
||||||
|
def set_verify(self, verify):
|
||||||
|
self.__verify = verify
|
||||||
|
return self
|
||||||
|
|
||||||
|
def set_path(self, path):
|
||||||
|
self.__path = path
|
||||||
|
return self
|
||||||
|
|
||||||
|
def init(self):
|
||||||
|
return TConfig(
|
||||||
|
name=self.__name,
|
||||||
|
base_url=self.__base_url,
|
||||||
|
verify=self.__verify,
|
||||||
|
variables=self.__variables,
|
||||||
|
path=self.__path,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Request(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.__method = "GET"
|
||||||
|
self.__url = ""
|
||||||
|
self.__params = {}
|
||||||
|
self.__headers = {}
|
||||||
|
self.__data = ""
|
||||||
|
|
||||||
|
def set_method(self, method):
|
||||||
|
self.__method = method
|
||||||
|
return self
|
||||||
|
|
||||||
|
def set_url(self, url):
|
||||||
|
self.__url = url
|
||||||
|
return self
|
||||||
|
|
||||||
|
def set_params(self, **params):
|
||||||
|
self.__params.update(params)
|
||||||
|
return self
|
||||||
|
|
||||||
|
def set_headers(self, **headers):
|
||||||
|
self.__headers.update(headers)
|
||||||
|
return self
|
||||||
|
|
||||||
|
def set_data(self, data):
|
||||||
|
self.__data = data
|
||||||
|
return self
|
||||||
|
|
||||||
|
def perform(self):
|
||||||
|
"""build TRequest object with configs"""
|
||||||
|
return TRequest(
|
||||||
|
method=self.__method,
|
||||||
|
url=self.__url,
|
||||||
|
params=self.__params,
|
||||||
|
headers=self.__headers,
|
||||||
|
data=self.__data,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Step(object):
|
||||||
|
def __init__(self, name):
|
||||||
|
self.__name = name
|
||||||
|
self.__variables = {}
|
||||||
|
self.__request = None
|
||||||
|
self.__extract = {}
|
||||||
|
self.__validators = []
|
||||||
|
|
||||||
|
def set_variables(self, **variables):
|
||||||
|
self.__variables.update(variables)
|
||||||
|
return self
|
||||||
|
|
||||||
|
def extract(self, var_name, jmes_path):
|
||||||
|
self.__extract[var_name] = jmes_path
|
||||||
|
return self
|
||||||
|
|
||||||
|
def assert_equal(self, jmes_path, expected_value):
|
||||||
|
self.__validators.append({"eq": [jmes_path, expected_value]})
|
||||||
|
return self
|
||||||
|
|
||||||
|
def assert_greater_than(self, jmes_path, expected_value):
|
||||||
|
self.__validators.append({"gt": [jmes_path, expected_value]})
|
||||||
|
return self
|
||||||
|
|
||||||
|
def assert_less_than(self, jmes_path, expected_value):
|
||||||
|
self.__validators.append({"lt": [jmes_path, expected_value]})
|
||||||
|
return self
|
||||||
|
|
||||||
|
def run_request(self, req_obj: Request) -> "Step":
|
||||||
|
self.__request = req_obj.perform()
|
||||||
|
return self
|
||||||
|
|
||||||
|
def init(self):
|
||||||
|
return TStep(
|
||||||
|
name=self.__name,
|
||||||
|
variables=self.__variables,
|
||||||
|
request=self.__request,
|
||||||
|
extract=self.__extract,
|
||||||
|
validate=self.__validators,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class HttpRunner(object):
|
class HttpRunner(object):
|
||||||
config: TConfig
|
config: TConfig
|
||||||
teststeps: List[TStep]
|
teststeps: List[TStep]
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class TConfig(BaseModel):
|
|||||||
path: Text = None
|
path: Text = None
|
||||||
|
|
||||||
|
|
||||||
class Request(BaseModel):
|
class TRequest(BaseModel):
|
||||||
"""requests.Request model"""
|
"""requests.Request model"""
|
||||||
|
|
||||||
method: MethodEnum = MethodEnum.GET
|
method: MethodEnum = MethodEnum.GET
|
||||||
@@ -63,7 +63,7 @@ class Request(BaseModel):
|
|||||||
|
|
||||||
class TStep(BaseModel):
|
class TStep(BaseModel):
|
||||||
name: Name
|
name: Name
|
||||||
request: Request = None
|
request: TRequest = None
|
||||||
testcase: Union[Text, Callable] = ""
|
testcase: Union[Text, Callable] = ""
|
||||||
variables: VariablesMapping = {}
|
variables: VariablesMapping = {}
|
||||||
setup_hooks: Hook = []
|
setup_hooks: Hook = []
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "httprunner"
|
name = "httprunner"
|
||||||
version = "3.0.6"
|
version = "3.0.7"
|
||||||
description = "One-stop solution for HTTP(S) testing."
|
description = "One-stop solution for HTTP(S) testing."
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
|||||||
Reference in New Issue
Block a user