bump version to v4.0.0

This commit is contained in:
debugtalk
2022-05-03 11:02:17 +08:00
parent 061d267246
commit 7c052770e5
44 changed files with 59 additions and 201 deletions

View File

@@ -27,7 +27,7 @@
## 核心特性
- 网络协议:完整支持 HTTP(S)/1.1 和 HTTP/2可扩展支持 WebSocket/TCP/RPC 等更多协议
- 网络协议:完整支持 HTTP(S)/HTTP2/WebSocket可扩展支持 TCP/UDP/RPC 等更多协议
- 多格式可选:测试用例支持 YAML/JSON/go test/pytest 格式,并且支持格式互相转换
- 双执行引擎:同时支持 golang/python 两个执行引擎,兼具 go 的高性能和 [pytest] 的丰富生态
- 录制 & 生成:可使用 [HAR]/Postman/Swagger/curl 等生成测试用例;基于链式调用的方法提示也可快速编写测试用例

View File

@@ -1,13 +1,15 @@
# Release History
## v4.0.0-beta2 (2022-04-25)
## v4.0.0 (2022-05-03)
**go version**
- feat: add builtin function `environ`/`ENV`
- fix: demo function compatibility
- fix #1240: losing host port in har2case
- fix: concurrent map write in parameterize
- change: get hrp version from aliyun OSS file when installing
- change: report more load testing metrics to prometheus
## v4.0.0-beta (2022-04-24)

View File

@@ -36,4 +36,4 @@ Copyright 2017 debugtalk
* [hrp run](hrp_run.md) - run API test with go engine
* [hrp startproject](hrp_startproject.md) - create a scaffold project
###### Auto generated by spf13/cobra on 24-Apr-2022
###### Auto generated by spf13/cobra on 3-May-2022

View File

@@ -41,4 +41,4 @@ hrp boom [flags]
* [hrp](hrp.md) - Next-Generation API Testing Solution.
###### Auto generated by spf13/cobra on 24-Apr-2022
###### Auto generated by spf13/cobra on 3-May-2022

View File

@@ -18,4 +18,4 @@ hrp convert $path... [flags]
* [hrp](hrp.md) - Next-Generation API Testing Solution.
###### Auto generated by spf13/cobra on 24-Apr-2022
###### Auto generated by spf13/cobra on 3-May-2022

View File

@@ -24,4 +24,4 @@ hrp har2case $har_path... [flags]
* [hrp](hrp.md) - Next-Generation API Testing Solution.
###### Auto generated by spf13/cobra on 24-Apr-2022
###### Auto generated by spf13/cobra on 3-May-2022

View File

@@ -16,4 +16,4 @@ hrp pytest $path ... [flags]
* [hrp](hrp.md) - Next-Generation API Testing Solution.
###### Auto generated by spf13/cobra on 24-Apr-2022
###### Auto generated by spf13/cobra on 3-May-2022

View File

@@ -34,4 +34,4 @@ hrp run $path... [flags]
* [hrp](hrp.md) - Next-Generation API Testing Solution.
###### Auto generated by spf13/cobra on 24-Apr-2022
###### Auto generated by spf13/cobra on 3-May-2022

View File

@@ -20,4 +20,4 @@ hrp startproject $project_name [flags]
* [hrp](hrp.md) - Next-Generation API Testing Solution.
###### Auto generated by spf13/cobra on 24-Apr-2022
###### Auto generated by spf13/cobra on 3-May-2022

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: a-b.c/1.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: a-b.c/2 3.yml

View File

@@ -42,11 +42,11 @@ func TeardownHookExample(args string) string {
}
func GetVersion() string {
return "v4.0.0-beta"
return fungo.Version
}
func main() {
fungo.Register("get_httprunner_version", GetVersion)
fungo.Register("get_version", GetVersion)
fungo.Register("sum_ints", SumInts)
fungo.Register("sum_two_int", SumTwoInt)
fungo.Register("sum_two", SumTwoInt)

View File

@@ -24,7 +24,7 @@ teststeps:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
User-Agent: funplugin/${get_version()}
Content-Type: "application/x-www-form-urlencoded"
data: "foo1=$foo1&foo2=$foo3"
validate:

View File

@@ -24,7 +24,7 @@ teststeps:
foo2: $foo2
sum_v: $sum_v
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
User-Agent: funplugin/${get_version()}
extract:
foo3: "body.args.foo2"
validate:
@@ -41,7 +41,7 @@ teststeps:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
User-Agent: funplugin/${get_version()}
Content-Type: "text/plain"
data: "This is expected to be sent back as part of response body: $foo1-$foo2-$foo3."
validate:
@@ -55,7 +55,7 @@ teststeps:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
User-Agent: funplugin/${get_version()}
Content-Type: "application/x-www-form-urlencoded"
data: "foo1=$foo1&foo2=$foo2&foo3=$foo3"
validate:

View File

@@ -5,8 +5,8 @@ from typing import List
import funppy
def get_httprunner_version():
return "v4.0.0-beta"
def get_version():
return funppy.__version__
def sleep(n_secs):
@@ -60,7 +60,7 @@ def teardown_hook_example(name):
if __name__ == "__main__":
funppy.register("get_httprunner_version", get_httprunner_version)
funppy.register("get_version", get_version)
funppy.register("sum", sum)
funppy.register("sum_ints", sum_ints)
funppy.register("concatenate", concatenate)

View File

@@ -1 +0,0 @@
# NOTICE: Generated By HttpRunner. DO NOT EDIT!

View File

@@ -24,7 +24,7 @@ teststeps:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
User-Agent: funplugin/${get_version()}
Content-Type: "application/x-www-form-urlencoded"
data: "foo1=$foo1&foo2=$foo3"
validate:

View File

@@ -1,60 +0,0 @@
# NOTE: Generated By HttpRunner v3.1.11
# FROM: testcases/demo_ref_testcase.yml
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
from testcases.demo_requests_test import TestCaseDemoRequests as DemoRequests
class TestCaseDemoRefTestcase(HttpRunner):
config = (
Config("request methods testcase: reference testcase")
.variables(
**{
"foo1": "testsuite_config_bar1",
"expect_foo1": "testsuite_config_bar1",
"expect_foo2": "config_bar2",
}
)
.base_url("https://postman-echo.com")
.verify(False)
)
teststeps = [
Step(
RunTestCase("request with functions")
.with_variables(
**{"foo1": "testcase_ref_bar1", "expect_foo1": "testcase_ref_bar1"}
)
.call(DemoRequests)
.export(*["foo3"])
),
Step(
RunRequest("post form data")
.with_variables(**{"foo1": "bar1"})
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/${get_httprunner_version()}",
"Content-Type": "application/x-www-form-urlencoded",
}
)
.with_data("foo1=$foo1&foo2=$foo3")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.form.foo1", "bar1")
.assert_equal("body.form.foo2", "bar21")
),
]
if __name__ == "__main__":
TestCaseDemoRefTestcase().test_start()

View File

@@ -24,7 +24,7 @@ teststeps:
foo2: $foo2
sum_v: $sum_v
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
User-Agent: funplugin/${get_version()}
extract:
foo3: "body.args.foo2"
validate:
@@ -41,7 +41,7 @@ teststeps:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
User-Agent: funplugin/${get_version()}
Content-Type: "text/plain"
data: "This is expected to be sent back as part of response body: $foo1-$foo2-$foo3."
validate:
@@ -55,7 +55,7 @@ teststeps:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
User-Agent: funplugin/${get_version()}
Content-Type: "application/x-www-form-urlencoded"
data: "foo1=$foo1&foo2=$foo2&foo3=$foo3"
validate:

View File

@@ -1,83 +0,0 @@
# NOTE: Generated By HttpRunner v3.1.11
# FROM: testcases/demo_requests.yml
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
class TestCaseDemoRequests(HttpRunner):
config = (
Config("request methods testcase with functions")
.variables(
**{
"foo1": "config_bar1",
"foo2": "config_bar2",
"expect_foo1": "config_bar1",
"expect_foo2": "config_bar2",
}
)
.base_url("https://postman-echo.com")
.verify(False)
.export(*["foo3"])
)
teststeps = [
Step(
RunRequest("get with params")
.with_variables(
**{"foo1": "bar11", "foo2": "bar21", "sum_v": "${sum_two_int(1, 2)}"}
)
.get("/get")
.with_params(**{"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"})
.with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
.extract()
.with_jmespath("body.args.foo2", "foo3")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args.foo1", "bar11")
.assert_equal("body.args.sum_v", "3")
.assert_equal("body.args.foo2", "bar21")
),
Step(
RunRequest("post raw text")
.with_variables(**{"foo1": "bar12", "foo3": "bar32"})
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/${get_httprunner_version()}",
"Content-Type": "text/plain",
}
)
.with_data(
"This is expected to be sent back as part of response body: $foo1-$foo2-$foo3."
)
.validate()
.assert_equal("status_code", 200)
.assert_equal(
"body.data",
"This is expected to be sent back as part of response body: bar12-$expect_foo2-bar32.",
)
),
Step(
RunRequest("post form data")
.with_variables(**{"foo2": "bar23"})
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/${get_httprunner_version()}",
"Content-Type": "application/x-www-form-urlencoded",
}
)
.with_data("foo1=$foo1&foo2=$foo2&foo3=$foo3")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.form.foo1", "$expect_foo1")
.assert_equal("body.form.foo2", "bar23")
.assert_equal("body.form.foo3", "bar21")
),
]
if __name__ == "__main__":
TestCaseDemoRequests().test_start()

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: basic.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: hooks.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: load_image.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: upload.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: validate.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: cookie_manipulation/hardcode.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: cookie_manipulation/set_delete_cookies.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: request_methods/hardcode.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: request_methods/request_with_functions.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: request_methods/request_with_parameters.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: request_methods/request_with_testcase_reference.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: request_methods/request_with_variables.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: request_methods/validate_with_functions.yml

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: request_methods/validate_with_variables.yml

View File

@@ -42,11 +42,11 @@ func TeardownHookExample(args string) string {
}
func GetVersion() string {
return "v4.0.0-beta"
return fungo.Version
}
func main() {
fungo.Register("get_httprunner_version", GetVersion)
fungo.Register("get_version", GetVersion)
fungo.Register("sum_ints", SumInts)
fungo.Register("sum_two_int", SumTwoInt)
fungo.Register("sum_two", SumTwoInt)

View File

@@ -5,8 +5,8 @@ from typing import List
import funppy
def get_httprunner_version():
return "v4.0.0-beta"
def get_version():
return funppy.__version__
def sleep(n_secs):
@@ -60,7 +60,7 @@ def teardown_hook_example(name):
if __name__ == "__main__":
funppy.register("get_httprunner_version", get_httprunner_version)
funppy.register("get_version", get_version)
funppy.register("sum", sum)
funppy.register("sum_ints", sum_ints)
funppy.register("concatenate", concatenate)

View File

@@ -24,7 +24,7 @@ teststeps:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
User-Agent: funplugin/${get_version()}
Content-Type: "application/x-www-form-urlencoded"
data: "foo1=$foo1&foo2=$foo3"
validate:

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: testcases/demo_ref_testcase.yml
@@ -43,7 +43,7 @@ class TestCaseDemoRefTestcase(HttpRunner):
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/${get_httprunner_version()}",
"User-Agent": "funplugin/${get_version()}",
"Content-Type": "application/x-www-form-urlencoded",
}
)

View File

@@ -24,7 +24,7 @@ teststeps:
foo2: $foo2
sum_v: $sum_v
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
User-Agent: funplugin/${get_version()}
extract:
foo3: "body.args.foo2"
validate:
@@ -41,7 +41,7 @@ teststeps:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
User-Agent: funplugin/${get_version()}
Content-Type: "text/plain"
data: "This is expected to be sent back as part of response body: $foo1-$foo2-$foo3."
validate:
@@ -55,7 +55,7 @@ teststeps:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
User-Agent: funplugin/${get_version()}
Content-Type: "application/x-www-form-urlencoded"
data: "foo1=$foo1&foo2=$foo2&foo3=$foo3"
validate:

View File

@@ -1,4 +1,4 @@
# NOTE: Generated By HttpRunner v4.0.0-beta
# NOTE: Generated By HttpRunner v4.0.0
# FROM: testcases/demo_requests.yml
@@ -30,7 +30,7 @@ class TestCaseDemoRequests(HttpRunner):
)
.get("/get")
.with_params(**{"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"})
.with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
.with_headers(**{"User-Agent": "funplugin/${get_version()}"})
.extract()
.with_jmespath("body.args.foo2", "foo3")
.validate()
@@ -45,7 +45,7 @@ class TestCaseDemoRequests(HttpRunner):
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/${get_httprunner_version()}",
"User-Agent": "funplugin/${get_version()}",
"Content-Type": "text/plain",
}
)
@@ -65,7 +65,7 @@ class TestCaseDemoRequests(HttpRunner):
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/${get_httprunner_version()}",
"User-Agent": "funplugin/${get_version()}",
"Content-Type": "application/x-www-form-urlencoded",
}
)

View File

@@ -1 +1 @@
v4.0.0-beta
v4.0.0

View File

@@ -1,4 +1,4 @@
__version__ = "v4.0.0-beta"
__version__ = "v4.0.0"
__description__ = "One-stop solution for HTTP(S) testing."
from httprunner.config import Config

View File

@@ -33,7 +33,7 @@ pytest_files_made_cache_mapping: Dict[Text, Text] = {}
pytest_files_run_set: Set = set()
__TEMPLATE__ = jinja2.Template(
"""# NOTE: Generated By HttpRunner v{{ version }}
"""# NOTE: Generated By HttpRunner {{ version }}
# FROM: {{ testcase_path }}
{% if imports_list and diff_levels > 0 %}

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "httprunner"
version = "v4.0.0-beta"
version = "v4.0.0"
description = "One-stop solution for HTTP(S) testing."
license = "Apache-2.0"
readme = "README.md"