mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-12 02:21:29 +08:00
239 lines
8.1 KiB
Python
239 lines
8.1 KiB
Python
import os
|
|
import unittest
|
|
|
|
from httprunner.make import (
|
|
main_make,
|
|
convert_testcase_path,
|
|
pytest_files_made_cache_mapping,
|
|
make_config_chain_style,
|
|
make_teststep_chain_style,
|
|
pytest_files_run_set,
|
|
ensure_file_abs_path_valid,
|
|
make_test_start_style,
|
|
)
|
|
from httprunner import loader
|
|
|
|
|
|
class TestMake(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
pytest_files_made_cache_mapping.clear()
|
|
pytest_files_run_set.clear()
|
|
loader.project_meta = None
|
|
|
|
def test_make_testcase(self):
|
|
path = ["examples/postman_echo/request_methods/request_with_variables.yml"]
|
|
testcase_python_list = main_make(path)
|
|
self.assertEqual(
|
|
testcase_python_list[0],
|
|
os.path.join(
|
|
os.getcwd(),
|
|
os.path.join(
|
|
"examples",
|
|
"postman_echo",
|
|
"request_methods",
|
|
"request_with_variables_test.py",
|
|
),
|
|
),
|
|
)
|
|
|
|
def test_make_testcase_with_ref(self):
|
|
path = [
|
|
"examples/postman_echo/request_methods/request_with_testcase_reference.yml"
|
|
]
|
|
testcase_python_list = main_make(path)
|
|
self.assertEqual(len(testcase_python_list), 1)
|
|
self.assertIn(
|
|
os.path.join(
|
|
os.getcwd(),
|
|
os.path.join(
|
|
"examples",
|
|
"postman_echo",
|
|
"request_methods",
|
|
"request_with_testcase_reference_test.py",
|
|
),
|
|
),
|
|
testcase_python_list,
|
|
)
|
|
|
|
with open(
|
|
os.path.join(
|
|
"examples",
|
|
"postman_echo",
|
|
"request_methods",
|
|
"request_with_testcase_reference_test.py",
|
|
)
|
|
) as f:
|
|
content = f.read()
|
|
self.assertIn(
|
|
"""
|
|
from request_methods.request_with_functions_test import (
|
|
TestCaseRequestWithFunctions as RequestWithFunctions,
|
|
)
|
|
""",
|
|
content,
|
|
)
|
|
self.assertIn(
|
|
".call(RequestWithFunctions)", content,
|
|
)
|
|
|
|
def test_make_testcase_folder(self):
|
|
path = ["examples/postman_echo/request_methods/"]
|
|
testcase_python_list = main_make(path)
|
|
self.assertIn(
|
|
os.path.join(
|
|
os.getcwd(),
|
|
os.path.join(
|
|
"examples",
|
|
"postman_echo",
|
|
"request_methods",
|
|
"request_with_functions_test.py",
|
|
),
|
|
),
|
|
testcase_python_list,
|
|
)
|
|
|
|
def test_ensure_file_path_valid(self):
|
|
self.assertEqual(
|
|
ensure_file_abs_path_valid(
|
|
os.path.join(os.getcwd(), "tests", "data", "a-b.c", "2 3.yml")
|
|
),
|
|
os.path.join(os.getcwd(), "tests", "data", "a_b_c", "T2_3.yml"),
|
|
)
|
|
loader.project_meta = None
|
|
self.assertEqual(
|
|
ensure_file_abs_path_valid(
|
|
os.path.join(os.getcwd(), "examples", "postman_echo", "request_methods")
|
|
),
|
|
os.path.join(os.getcwd(), "examples", "postman_echo", "request_methods"),
|
|
)
|
|
loader.project_meta = None
|
|
self.assertEqual(
|
|
ensure_file_abs_path_valid(os.path.join(os.getcwd(), "README.md")),
|
|
os.path.join(os.getcwd(), "README.md"),
|
|
)
|
|
loader.project_meta = None
|
|
self.assertEqual(
|
|
ensure_file_abs_path_valid(os.getcwd()), os.getcwd(),
|
|
)
|
|
loader.project_meta = None
|
|
self.assertEqual(
|
|
ensure_file_abs_path_valid(
|
|
os.path.join(os.getcwd(), "tests", "data", ".csv")
|
|
),
|
|
os.path.join(os.getcwd(), "tests", "data", ".csv"),
|
|
)
|
|
|
|
def test_convert_testcase_path(self):
|
|
self.assertEqual(
|
|
convert_testcase_path(
|
|
os.path.join(os.getcwd(), "tests", "data", "a-b.c", "2 3.yml")
|
|
),
|
|
(
|
|
os.path.join(os.getcwd(), "tests", "data", "a_b_c", "T2_3_test.py"),
|
|
"T23",
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
convert_testcase_path(
|
|
os.path.join(os.getcwd(), "tests", "data", "a-b.c", "中文case.yml")
|
|
),
|
|
(
|
|
os.path.join(
|
|
os.getcwd(),
|
|
os.path.join("tests", "data", "a_b_c", "中文case_test.py"),
|
|
),
|
|
"中文Case",
|
|
),
|
|
)
|
|
|
|
def test_make_testsuite(self):
|
|
path = ["examples/postman_echo/request_methods/demo_testsuite.yml"]
|
|
testcase_python_list = main_make(path)
|
|
self.assertEqual(len(testcase_python_list), 2)
|
|
self.assertIn(
|
|
os.path.join(
|
|
os.getcwd(),
|
|
os.path.join(
|
|
"examples",
|
|
"postman_echo",
|
|
"request_methods",
|
|
"demo_testsuite_yml",
|
|
"request_with_functions_test.py",
|
|
),
|
|
),
|
|
testcase_python_list,
|
|
)
|
|
self.assertIn(
|
|
os.path.join(
|
|
os.getcwd(),
|
|
os.path.join(
|
|
"examples",
|
|
"postman_echo",
|
|
"request_methods",
|
|
"demo_testsuite_yml",
|
|
"request_with_testcase_reference_test.py",
|
|
),
|
|
),
|
|
testcase_python_list,
|
|
)
|
|
|
|
def test_make_config_chain_style(self):
|
|
config = {
|
|
"name": "request methods testcase: validate with functions",
|
|
"variables": {"foo1": "bar1", "foo2": 22},
|
|
"base_url": "https://postman_echo.com",
|
|
"verify": False,
|
|
"path": "examples/postman_echo/request_methods/validate_with_functions_test.py",
|
|
}
|
|
self.assertEqual(
|
|
make_config_chain_style(config),
|
|
"""Config("request methods testcase: validate with functions").variables(**{'foo1': 'bar1', 'foo2': 22}).base_url("https://postman_echo.com").verify(False)""",
|
|
)
|
|
|
|
def test_make_teststep_chain_style(self):
|
|
step = {
|
|
"name": "get with params",
|
|
"variables": {"foo1": "bar1", "foo2": 123, "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()}"},
|
|
},
|
|
"testcase": "CLS_LB(TestCaseDemo)CLS_RB",
|
|
"extract": {
|
|
"session_foo1": "body.args.foo1",
|
|
"session_foo2": "body.args.foo2",
|
|
},
|
|
"validate": [
|
|
{"eq": ["status_code", 200]},
|
|
{"eq": ["body.args.sum_v", "3"]},
|
|
],
|
|
}
|
|
teststep_chain_style = make_teststep_chain_style(step)
|
|
self.assertEqual(
|
|
teststep_chain_style,
|
|
"""Step(RunRequest("get with params").with_variables(**{'foo1': 'bar1', 'foo2': 123, 'sum_v': '${sum_two(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.foo1', 'session_foo1').with_jmespath('body.args.foo2', 'session_foo2').validate().assert_equal("status_code", 200).assert_equal("body.args.sum_v", "3"))""",
|
|
)
|
|
|
|
def test_make_test_start_style(self):
|
|
params = {
|
|
"user_agent": ["iOS/10.1", "iOS/10.2"],
|
|
"username-password": "${parameterize(request_methods/account.csv)}",
|
|
"app_version": "${get_app_version()}",
|
|
}
|
|
config = {"parameters": params}
|
|
self.assertEqual(
|
|
make_test_start_style(config),
|
|
f"""
|
|
import pytest
|
|
from httprunner.parser import parse_parameters
|
|
|
|
param = [{params}]
|
|
|
|
@pytest.mark.parametrize('parametrize', parse_parameters(param))
|
|
def test_start(self, parametrize):
|
|
super().test_start(parametrize)
|
|
""",
|
|
)
|