feat: 新增JoyHub C端测试用例和接口封装

1. 新增C端业务关键字层 (JoyHubC/):
   - LoginManage.py - C端登录管理
   - UserManage.py - C端用户管理
   - ProductManage.py - C端产品管理
   - BannerManage.py - C端Banner管理
   - AppVersionManage.py - C端版本管理等

2. 新增C端测试用例 (TestCase/接口/JoyHubC/):
   - JoyhubC_UserPoint.py - 用户积分测试
   - JoyhubC_Product.py - 产品测试
   - JoyhubC_Banner.py - Banner测试等

3. 接口层增强:
   - Dlizhan_interface.py 添加C端接口封装
   - 添加网易163邮箱验证码获取功能

4. 配置更新:
   - hh-qa.robot 添加C端登录配置
This commit is contained in:
2026-05-13 15:56:41 +08:00
parent 3191ec4f3c
commit 37a040c3e5
33 changed files with 1830 additions and 4 deletions

View File

@@ -0,0 +1,27 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端APP版本业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCAppVersionManage(JoyHubCLoginManage):
"""JoyHub C端APP版本业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("获取APP版本列表")
def kw_joyhub_c_web_appversion_page_get(self, **kwargs):
"""
获取APP版本列表业务关键字
:return: 响应结果
"""
obj_log.info("获取APP版本列表")
resp = self.kw_in_joyhub_c_web_appversion_page_get(**kwargs)
obj_log.info(f"获取APP版本列表响应: {resp}")
return resp

View File

@@ -0,0 +1,38 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端Banner信息业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCBannerManage(JoyHubCLoginManage):
"""JoyHub C端Banner信息业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("获得Banner管理")
def kw_joyhub_c_banner_get_get(self, **kwargs):
"""
获得Banner管理业务关键字
:return: 响应结果
"""
obj_log.info("获得Banner管理")
resp = self.kw_in_joyhub_c_banner_get_get(**kwargs)
obj_log.info(f"获得Banner管理响应: {resp}")
return resp
@allure.step("获得Banner管理分页")
def kw_joyhub_c_banner_page_get(self, **kwargs):
"""
获得Banner管理分页业务关键字
:return: 响应结果
"""
obj_log.info("获得Banner管理分页")
resp = self.kw_in_joyhub_c_banner_page_get(**kwargs)
obj_log.info(f"获得Banner管理分页响应: {resp}")
return resp

View File

@@ -0,0 +1,27 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端blog分类业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCBlogCateManage(JoyHubCLoginManage):
"""JoyHub C端blog分类业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("获得blog分类列表")
def kw_joyhub_c_blog_cate_list_get(self, **kwargs):
"""
获得blog分类列表业务关键字
:return: 响应结果
"""
obj_log.info("获得blog分类列表")
resp = self.kw_in_joyhub_c_blog_cate_list_get(**kwargs)
obj_log.info(f"获得blog分类列表响应: {resp}")
return resp

View File

@@ -0,0 +1,49 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端blog信息业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCBlogManage(JoyHubCLoginManage):
"""JoyHub C端blog信息业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("获得blog详情")
def kw_joyhub_c_blog_get_detail_get(self, **kwargs):
"""
获得blog详情业务关键字
:return: 响应结果
"""
obj_log.info("获得blog详情")
resp = self.kw_in_joyhub_c_blog_get_detail_get(**kwargs)
obj_log.info(f"获得blog详情响应: {resp}")
return resp
@allure.step("获得blog下一条")
def kw_joyhub_c_blog_get_next_get(self, **kwargs):
"""
获得blog下一条业务关键字
:return: 响应结果
"""
obj_log.info("获得blog下一条")
resp = self.kw_in_joyhub_c_blog_get_next_get(**kwargs)
obj_log.info(f"获得blog下一条响应: {resp}")
return resp
@allure.step("获得blog管理分页")
def kw_joyhub_c_blog_page_get(self, **kwargs):
"""
获得blog管理分页业务关键字
:return: 响应结果
"""
obj_log.info("获得blog管理分页")
resp = self.kw_in_joyhub_c_blog_page_get(**kwargs)
obj_log.info(f"获得blog管理分页响应: {resp}")
return resp

View File

@@ -0,0 +1,27 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端合作联系业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCCooperationManage(JoyHubCLoginManage):
"""JoyHub C端合作联系业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("提交合作联系信息")
def kw_joyhub_c_cooperation_create_post(self, **kwargs):
"""
提交合作联系信息业务关键字
:return: 响应结果
"""
obj_log.info("提交合作联系信息")
resp = self.kw_in_joyhub_c_cooperation_create_post(**kwargs)
obj_log.info(f"提交合作联系信息响应: {resp}")
return resp

View File

@@ -0,0 +1,38 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端二维码访问统计业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCDownloadQrcodeManage(JoyHubCLoginManage):
"""JoyHub C端二维码访问统计业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("获取二维码信息")
def kw_joyhub_c_download_qrcode_get_get(self, **kwargs):
"""
获取二维码信息业务关键字
:return: 响应结果
"""
obj_log.info("获取二维码信息")
resp = self.kw_in_joyhub_c_download_qrcode_get_get(**kwargs)
obj_log.info(f"获取二维码信息响应: {resp}")
return resp
@allure.step("增加二维码访问/点击次数")
def kw_joyhub_c_download_qrcode_increment_post(self, **kwargs):
"""
增加二维码访问/点击次数业务关键字
:return: 响应结果
"""
obj_log.info("增加二维码访问/点击次数")
resp = self.kw_in_joyhub_c_download_qrcode_increment_post(**kwargs)
obj_log.info(f"增加二维码访问/点击次数响应: {resp}")
return resp

View File

@@ -0,0 +1,27 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端FAQ联系我们业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCFaqContactUsManage(JoyHubCLoginManage):
"""JoyHub C端FAQ联系我们业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("提交FAQ联系信息")
def kw_joyhub_c_faq_contact_us_create_post(self, **kwargs):
"""
提交FAQ联系信息业务关键字
:return: 响应结果
"""
obj_log.info("提交FAQ联系信息")
resp = self.kw_in_joyhub_c_faq_contact_us_create_post(**kwargs)
obj_log.info(f"提交FAQ联系信息响应: {resp}")
return resp

View File

@@ -0,0 +1,38 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端FAQ业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCFaqManage(JoyHubCLoginManage):
"""JoyHub C端FAQ业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("获得FAQ分类树")
def kw_joyhub_c_faq_cate_list_get(self, **kwargs):
"""
获得FAQ分类树业务关键字
:return: 响应结果
"""
obj_log.info("获得FAQ分类树")
resp = self.kw_in_joyhub_c_faq_cate_list_get(**kwargs)
obj_log.info(f"获得FAQ分类树响应: {resp}")
return resp
@allure.step("获得FAQ列表")
def kw_joyhub_c_faq_list_get(self, **kwargs):
"""
获得FAQ列表业务关键字
:return: 响应结果
"""
obj_log.info("获得FAQ列表")
resp = self.kw_in_joyhub_c_faq_list_get(**kwargs)
obj_log.info(f"获得FAQ列表响应: {resp}")
return resp

View File

@@ -0,0 +1,60 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端点赞记录业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCLikeInfoManage(JoyHubCLoginManage):
"""JoyHub C端点赞记录业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("创建点赞记录")
def kw_joyhub_c_like_info_create_post(self, **kwargs):
"""
创建点赞记录业务关键字
:return: 响应结果
"""
obj_log.info("创建点赞记录")
resp = self.kw_in_joyhub_c_like_info_create_post(**kwargs)
obj_log.info(f"创建点赞记录响应: {resp}")
return resp
@allure.step("取消点赞")
def kw_joyhub_c_like_info_delete_post(self, **kwargs):
"""
取消点赞业务关键字
:return: 响应结果
"""
obj_log.info("取消点赞")
resp = self.kw_in_joyhub_c_like_info_delete_post(**kwargs)
obj_log.info(f"取消点赞响应: {resp}")
return resp
@allure.step("获得点赞记录")
def kw_joyhub_c_like_info_get_get(self, **kwargs):
"""
获得点赞记录业务关键字
:return: 响应结果
"""
obj_log.info("获得点赞记录")
resp = self.kw_in_joyhub_c_like_info_get_get(**kwargs)
obj_log.info(f"获得点赞记录响应: {resp}")
return resp
@allure.step("获得点赞记录分页")
def kw_joyhub_c_like_info_page_get(self, **kwargs):
"""
获得点赞记录分页业务关键字
:return: 响应结果
"""
obj_log.info("获得点赞记录分页")
resp = self.kw_in_joyhub_c_like_info_page_get(**kwargs)
obj_log.info(f"获得点赞记录分页响应: {resp}")
return resp

View File

@@ -0,0 +1,84 @@
# -*- coding:utf-8 -*-
import os
import re
import time
import allure
from base_framework.public_tools import log
from dulizhan.library.Dlizhan_interface import DlzhanInterface
obj_log = log.get_logger()
class JoyHubCLoginManage(DlzhanInterface):
def __init__(self):
super().__init__()
test_url = self._read_robot_variable("joyhub_c_test_url")
if test_url:
self.joyhub_c_frontend_url = test_url
def _read_robot_variable(self, var_name):
robot_file_path = os.path.join(
os.path.dirname(__file__),
'../../../test_case/Resource/AdapterKws/hh-qa.robot'
)
try:
with open(robot_file_path, 'r', encoding='utf-8') as f:
content = f.read()
pattern = r'\$\{' + re.escape(var_name) + r'\}\s+(\S+)'
match = re.search(pattern, content)
if match:
return match.group(1)
except Exception as e:
obj_log.error("读取robot配置文件失败: {}".format(str(e)))
return None
@allure.step("获取JoyHub C端邮箱验证码")
def kw_joyhub_c_get_email_code(self, email=None, code_pattern=r'\d{4,8}'):
email = email or self._read_robot_variable("joyhub_c_login_email")
if not email:
raise Exception("C端登录邮箱不能为空请检查 joyhub_c_login_email 配置")
obj_log.info("获取JoyHub C端邮箱验证码 - email: {}".format(email))
code = self.kw_in_joyhub_c_get_email_code(email, code_pattern)
obj_log.info("获取JoyHub C端邮箱验证码成功")
return code
@allure.step("JoyHub C端登录")
def kw_joyhub_c_login(self, path=None, email=None, code=None, is_check='true', **kwargs):
email = email or self._read_robot_variable("joyhub_c_login_email")
path = path or self._read_robot_variable("joyhub_c_login_path")
if not email:
raise Exception("C端登录邮箱不能为空请检查 joyhub_c_login_email 配置")
if not path:
raise Exception("C端登录接口路径不能为空请检查 joyhub_c_login_path 配置")
code = code or "123456"
params = {
"email": email,
"valid_code": code,
"sys_type": "windows",
"app_channel": "5",
"lang": "en",
"client_time": str(int(time.time()))
}
params.update(kwargs)
obj_log.info("JoyHub C端登录 - email: {}, path: {}".format(email, path))
resp = self.kw_in_joyhub_c_login_post(path=path, is_check=is_check, **params)
data = resp.get('data') if isinstance(resp, dict) else None
token = None
if isinstance(data, dict):
token = data.get('accessToken') or data.get('access_token') or data.get('token')
token = token or resp.get('accessToken') if isinstance(resp, dict) else token
token = token or resp.get('access_token') if isinstance(resp, dict) else token
token = token or resp.get('token') if isinstance(resp, dict) else token
if token:
self.set_joyhub_c_token(token)
obj_log.info("JoyHub C端登录成功Token已写入当前实例")
else:
obj_log.warning("JoyHub C端登录响应中未解析到Token")
return resp

View File

@@ -0,0 +1,27 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端news分类业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCNewsCateManage(JoyHubCLoginManage):
"""JoyHub C端news分类业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("获得news分类列表")
def kw_joyhub_c_news_cate_list_get(self, **kwargs):
"""
获得news分类列表业务关键字
:return: 响应结果
"""
obj_log.info("获得news分类列表")
resp = self.kw_in_joyhub_c_news_cate_list_get(**kwargs)
obj_log.info(f"获得news分类列表响应: {resp}")
return resp

View File

@@ -0,0 +1,49 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端news管理业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCNewsManage(JoyHubCLoginManage):
"""JoyHub C端news管理业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("获得news详情")
def kw_joyhub_c_news_get_detail_get(self, **kwargs):
"""
获得news详情业务关键字
:return: 响应结果
"""
obj_log.info("获得news详情")
resp = self.kw_in_joyhub_c_news_get_detail_get(**kwargs)
obj_log.info(f"获得news详情响应: {resp}")
return resp
@allure.step("获得news下一条")
def kw_joyhub_c_news_get_next_get(self, **kwargs):
"""
获得news下一条业务关键字
:return: 响应结果
"""
obj_log.info("获得news下一条")
resp = self.kw_in_joyhub_c_news_get_next_get(**kwargs)
obj_log.info(f"获得news下一条响应: {resp}")
return resp
@allure.step("获得news管理分页")
def kw_joyhub_c_news_page_get(self, **kwargs):
"""
获得news管理分页业务关键字
:return: 响应结果
"""
obj_log.info("获得news管理分页")
resp = self.kw_in_joyhub_c_news_page_get(**kwargs)
obj_log.info(f"获得news管理分页响应: {resp}")
return resp

View File

@@ -0,0 +1,38 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端产品业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCProductManage(JoyHubCLoginManage):
"""JoyHub C端产品业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("产品详情")
def kw_joyhub_c_product_get_get(self, **kwargs):
"""
产品详情业务关键字
:return: 响应结果
"""
obj_log.info("产品详情")
resp = self.kw_in_joyhub_c_product_get_get(**kwargs)
obj_log.info(f"产品详情响应: {resp}")
return resp
@allure.step("获得产品分页")
def kw_joyhub_c_product_page_get(self, **kwargs):
"""
获得产品分页业务关键字
:return: 响应结果
"""
obj_log.info("获得产品分页")
resp = self.kw_in_joyhub_c_product_page_get(**kwargs)
obj_log.info(f"获得产品分页响应: {resp}")
return resp

View File

@@ -0,0 +1,27 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端支付页产品推荐业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCProductPaymentRecommendManage(JoyHubCLoginManage):
"""JoyHub C端支付页产品推荐业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("获得支付页产品推荐分页")
def kw_joyhub_c_product_payment_recommend_page_get(self, **kwargs):
"""
获得支付页产品推荐分页业务关键字
:return: 响应结果
"""
obj_log.info("获得支付页产品推荐分页")
resp = self.kw_in_joyhub_c_product_payment_recommend_page_get(**kwargs)
obj_log.info(f"获得支付页产品推荐分页响应: {resp}")
return resp

View File

@@ -0,0 +1,27 @@
# -*- coding:utf-8 -*-
"""
JoyHub C端用户业务关键字层
"""
import allure
from dulizhan.library.BusinessKw.JoyHubC.LoginManage import JoyHubCLoginManage
from base_framework.public_tools import log
obj_log = log.get_logger()
class JoyHubCUserManage(JoyHubCLoginManage):
"""JoyHub C端用户业务关键字类"""
def __init__(self):
super().__init__()
@allure.step("查询当前用户积分")
def kw_joyhub_c_client_get_point_get(self):
"""
查询当前用户积分业务关键字
:return: 响应结果
"""
obj_log.info("查询当前用户积分")
resp = self.kw_in_joyhub_c_client_get_point_get()
obj_log.info(f"查询当前用户积分响应: {resp}")
return resp

View File

@@ -0,0 +1 @@
# -*- coding:utf-8 -*-