mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-15 20:38:44 +08:00
refactor run times: display test statistics correctly with run times setting
This commit is contained in:
@@ -1 +1 @@
|
||||
__version__ = '0.8.9'
|
||||
__version__ = '0.9.0'
|
||||
@@ -102,12 +102,6 @@ class Runner(object):
|
||||
except KeyError:
|
||||
raise exception.ParamsError("URL or METHOD missed!")
|
||||
|
||||
skip_current_test = testcase_dict.get("skip", False)
|
||||
if skip_current_test:
|
||||
run_times = 0
|
||||
else:
|
||||
run_times = int(testcase_dict.get("times", 1))
|
||||
|
||||
extractors = testcase_dict.get("extract", [])
|
||||
validators = testcase_dict.get("validate", [])
|
||||
setup_actions = testcase_dict.get("setup", [])
|
||||
@@ -117,32 +111,31 @@ class Runner(object):
|
||||
for action in actions:
|
||||
self.context.exec_content_functions(action)
|
||||
|
||||
for _ in range(run_times):
|
||||
setup_teardown(setup_actions)
|
||||
setup_teardown(setup_actions)
|
||||
|
||||
resp = self.http_client_session.request(
|
||||
method,
|
||||
url,
|
||||
name=group_name,
|
||||
**parsed_request
|
||||
)
|
||||
resp_obj = response.ResponseObject(resp)
|
||||
resp = self.http_client_session.request(
|
||||
method,
|
||||
url,
|
||||
name=group_name,
|
||||
**parsed_request
|
||||
)
|
||||
resp_obj = response.ResponseObject(resp)
|
||||
|
||||
extracted_variables_mapping = resp_obj.extract_response(extractors)
|
||||
self.context.bind_extracted_variables(extracted_variables_mapping)
|
||||
extracted_variables_mapping = resp_obj.extract_response(extractors)
|
||||
self.context.bind_extracted_variables(extracted_variables_mapping)
|
||||
|
||||
try:
|
||||
self.context.validate(validators, resp_obj)
|
||||
except (exception.ParamsError, exception.ResponseError, exception.ValidationError):
|
||||
err_msg = u"Exception occured.\n"
|
||||
err_msg += u"HTTP request url: {}\n".format(url)
|
||||
err_msg += u"HTTP request kwargs: {}\n".format(parsed_request)
|
||||
err_msg += u"HTTP response status_code: {}\n".format(resp.status_code)
|
||||
err_msg += u"HTTP response content: \n{}".format(resp.text)
|
||||
logging.error(err_msg)
|
||||
raise
|
||||
finally:
|
||||
setup_teardown(teardown_actions)
|
||||
try:
|
||||
self.context.validate(validators, resp_obj)
|
||||
except (exception.ParamsError, exception.ResponseError, exception.ValidationError):
|
||||
err_msg = u"Exception occured.\n"
|
||||
err_msg += u"HTTP request url: {}\n".format(url)
|
||||
err_msg += u"HTTP request kwargs: {}\n".format(parsed_request)
|
||||
err_msg += u"HTTP response status_code: {}\n".format(resp.status_code)
|
||||
err_msg += u"HTTP response content: \n{}".format(resp.text)
|
||||
logging.error(err_msg)
|
||||
raise
|
||||
finally:
|
||||
setup_teardown(teardown_actions)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ class ApiTestSuite(unittest.TestSuite):
|
||||
ApiTestCase.runTest.__func__.__doc__ = testcase_dict['name']
|
||||
|
||||
test = ApiTestCase(self.test_runner, testcase_dict)
|
||||
self.addTest(test)
|
||||
[self.addTest(test) for _ in range(int(testcase_dict.get("times", 1)))]
|
||||
|
||||
def print_output(self):
|
||||
output_variables_list = self.config_dict.get("output", [])
|
||||
|
||||
68
tests/data/demo_testset_cli.yml
Normal file
68
tests/data/demo_testset_cli.yml
Normal file
@@ -0,0 +1,68 @@
|
||||
- test:
|
||||
name: get token
|
||||
request:
|
||||
url: http://127.0.0.1:5000/api/get-token
|
||||
method: POST
|
||||
headers:
|
||||
Content-Type: application/json
|
||||
user_agent: 'iOS/10.3'
|
||||
device_sn: 'HZfFBh6tU59EdXJ'
|
||||
os_platform: 'ios'
|
||||
app_version: '2.8.6'
|
||||
json:
|
||||
sign: f1219719911caae89ccc301679857ebfda115ca2
|
||||
variables:
|
||||
- expect_status_code: 200
|
||||
- token_len: 16
|
||||
extract:
|
||||
- token: content.token
|
||||
validate:
|
||||
- {"check": "status_code", "comparator": "eq", "expect": 200}
|
||||
- eq: ["status_code", $expect_status_code]
|
||||
- {"check": "$token", "comparator": "len_eq", "expect": 16}
|
||||
- len_eq: ["$token", $token_len]
|
||||
- len_eq: ["content.token", 16]
|
||||
- {"check": "status_code", "comparator": "sum_status_code", "expect": 2}
|
||||
- sum_status_code: ["status_code", 2]
|
||||
|
||||
- test:
|
||||
name: create user which does not exist
|
||||
request:
|
||||
url: http://127.0.0.1:5000/api/users/1000
|
||||
method: POST
|
||||
headers:
|
||||
Content-Type: application/json
|
||||
device_sn: 'HZfFBh6tU59EdXJ'
|
||||
token: $token
|
||||
json:
|
||||
name: "user1"
|
||||
password: "123456"
|
||||
extract:
|
||||
- success: content.success
|
||||
validate:
|
||||
- eq: ["status_code", 201]
|
||||
- sum_status_code: ["status_code", 3]
|
||||
- eq: ["$success", True]
|
||||
- eq: ["abc$success", "abcTrue"]
|
||||
- {"check": "status_code", "comparator": "eq", "expect": 201}
|
||||
- {"check": "content.success", "comparator": "eq", "expect": true}
|
||||
|
||||
- test:
|
||||
name: create user which existed
|
||||
times: 3
|
||||
request:
|
||||
url: http://127.0.0.1:5000/api/users/1000
|
||||
method: POST
|
||||
headers:
|
||||
Content-Type: application/json
|
||||
device_sn: 'HZfFBh6tU59EdXJ'
|
||||
token: $token
|
||||
json:
|
||||
name: "user1"
|
||||
password: "123456"
|
||||
validate:
|
||||
- "eq": ["status_code", 500]
|
||||
- sum_status_code: ["status_code", 5]
|
||||
- "eq": ["content.success", false]
|
||||
- {"check": "status_code", "comparator": "eq", "expect": 500}
|
||||
- {"check": "content.success", "comparator": "eq", "expect": false}
|
||||
24
tests/test_cli.py
Normal file
24
tests/test_cli.py
Normal file
@@ -0,0 +1,24 @@
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
from httprunner.task import TaskSuite
|
||||
from pyunitreport import HTMLTestRunner
|
||||
from tests.base import ApiServerUnittest
|
||||
|
||||
|
||||
class TestCli(ApiServerUnittest):
|
||||
|
||||
def test_run_times(self):
|
||||
testset_path = "tests/data/demo_testset_cli.yml"
|
||||
output_folder_name = os.path.basename(os.path.splitext(testset_path)[0])
|
||||
kwargs = {
|
||||
"output": output_folder_name
|
||||
}
|
||||
|
||||
task_suite = TaskSuite(testset_path)
|
||||
result = HTMLTestRunner(**kwargs).run(task_suite)
|
||||
self.assertEqual(result.testsRun, 5)
|
||||
|
||||
report_save_dir = os.path.join(os.getcwd(), 'reports', output_folder_name)
|
||||
shutil.rmtree(report_save_dir)
|
||||
Reference in New Issue
Block a user