新增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