新增HubOps.md文档和test_hub_ops.py测试文件
This commit is contained in:
57
joyhub_backend/test_case/TestCase/接口/test_hub_ops.py
Normal file
57
joyhub_backend/test_case/TestCase/接口/test_hub_ops.py
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import logging
|
||||||
|
import re
|
||||||
|
from urllib.parse import urljoin
|
||||||
|
|
||||||
|
import allure
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from joyhub_backend.library.hubops_parser import load_hubops_cases
|
||||||
|
from joyhub_backend.library.joyhub_interface import JoyhubInterface
|
||||||
|
|
||||||
|
|
||||||
|
ALL_CASES = load_hubops_cases()
|
||||||
|
|
||||||
|
|
||||||
|
def case_id(case):
|
||||||
|
raw_id = "{}-{}".format(case.get("case_id"), case.get("name"))
|
||||||
|
safe_id = re.sub(r"[^0-9A-Za-z_\u4e00-\u9fa5-]+", "_", raw_id)
|
||||||
|
return safe_id[:120]
|
||||||
|
|
||||||
|
|
||||||
|
@allure.feature("JoyHub Backend 接口自动化")
|
||||||
|
class TestHubOps(object):
|
||||||
|
test_case = JoyhubInterface()
|
||||||
|
|
||||||
|
def teardown_method(self):
|
||||||
|
with allure.step("后置:记录用例结束日志"):
|
||||||
|
logging.info("-----------------------------End-------------------------------")
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("case", ALL_CASES, ids=case_id)
|
||||||
|
def test_hub_ops_api(self, case):
|
||||||
|
allure.dynamic.title("{} {}".format(case.get("case_id"), case.get("name")))
|
||||||
|
allure.dynamic.story(case.get("name"))
|
||||||
|
|
||||||
|
with allure.step("前置:初始化接口客户端并准备鉴权 token"):
|
||||||
|
headers = case.get("headers") or {}
|
||||||
|
query = case.get("query") or {}
|
||||||
|
body = case.get("body") or {}
|
||||||
|
|
||||||
|
response_data = self.test_case.request(
|
||||||
|
case.get("name"),
|
||||||
|
case.get("method"),
|
||||||
|
case.get("url"),
|
||||||
|
body=body,
|
||||||
|
query=query,
|
||||||
|
headers=headers,
|
||||||
|
)
|
||||||
|
with allure.step("断言内容:校验响应基础字段"):
|
||||||
|
request_url = case.get("url") or ""
|
||||||
|
full_url = request_url if request_url.startswith("http") else urljoin(self.test_case.base_url, request_url.lstrip("/"))
|
||||||
|
if full_url.startswith(self.test_case.base_url):
|
||||||
|
assert isinstance(response_data, dict), "断言失败原因:响应不是JSON对象,响应{}".format(response_data)
|
||||||
|
assert "code" in response_data, "断言失败原因:响应缺少code字段,响应{}".format(response_data)
|
||||||
|
assert response_data.get("msg") is not None, "断言失败原因:msg字段不能为空,响应{}".format(response_data)
|
||||||
|
else:
|
||||||
|
assert response_data is not None, "断言失败原因:非业务接口响应为空"
|
||||||
|
logging.info("断言通过:%s", case.get("name"))
|
||||||
Reference in New Issue
Block a user