refactor run times: display test statistics correctly with run times setting

This commit is contained in:
httprunner
2018-02-08 12:18:02 +08:00
parent fc88377c4a
commit 1f81623a66
5 changed files with 116 additions and 31 deletions

View File

@@ -1 +1 @@
__version__ = '0.8.9'
__version__ = '0.9.0'

View File

@@ -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

View File

@@ -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", [])

View 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
View 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)