Files
smart-management-auto-test/dulizhan/test_case/TestCase/接口/JoyHub/Joyhub_UserProfile.py

175 lines
8.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import pytest
import allure
import logging
import requests
import json
from dulizhan.library.BusinessKw.JoyHub.UserProfile import UserProfile
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
@allure.feature("管理后台 - 用户个人中心模块")
class TestUserProfile:
token_set = False
original_password = "Zhou1599"
test_password = "Aa123456"
@classmethod
def setup_class(cls):
"""在整个测试类开始时登录一次所有测试用例共享token"""
logging.info("=============================================")
logging.info("=========== 开始登录获取Token ============")
logging.info("=============================================")
cls.test_case = UserProfile()
username = "joytest"
password = cls.original_password
cls.test_case._clear_user_fingerprint(username)
url = "https://joyhub-website-manager-api-test.best-envision.com/admin-api/system/auth/login-dev"
payload = {"username": username, "password": password}
headers = {'Content-Type': 'application/json', 'tenant-id': '126'}
try:
response = requests.post(url, json=payload, headers=headers, verify=False, timeout=10)
login_response = response.json()
if login_response and login_response.get('code') == 0:
token = login_response.get('data', {}).get('accessToken', '')
if token:
cls.test_case.set_joyhub_token(token)
cls.token_set = True
logging.info("登录成功获取到Token: {}...".format(token[:20]))
else:
logging.warning("登录成功但未获取到Token")
else:
logging.error("登录失败: {}".format(login_response))
except Exception as e:
logging.error("登录异常: {}".format(str(e)))
def setup_method(self):
"""每个测试方法执行前检查token"""
if not self.token_set:
pytest.skip("Token未设置跳过测试")
@classmethod
def teardown_class(cls):
"""测试类结束后,确保密码改回原密码"""
logging.info("=============================================")
logging.info("=========== 测试结束,恢复原密码 ============")
logging.info("=============================================")
try:
# 先用测试密码登录
url = "https://joyhub-website-manager-api-test.best-envision.com/admin-api/system/auth/login-dev"
payload = {"username": "joytest", "password": cls.test_password}
headers = {'Content-Type': 'application/json', 'tenant-id': '126'}
response = requests.post(url, json=payload, headers=headers, verify=False, timeout=10)
login_response = response.json()
if login_response and login_response.get('code') == 0:
token = login_response.get('data', {}).get('accessToken', '')
if token:
# 修改回原密码
cls.test_case.set_joyhub_token(token)
resp = cls.test_case.kw_joyhub_user_profile_update_password_put(
old_password=cls.test_password,
new_password=cls.original_password
)
if resp and resp.get('code') == 0:
logging.info("密码已恢复为原密码: {}".format(cls.original_password))
else:
logging.warning("恢复原密码失败: {}".format(resp))
except Exception as e:
logging.error("恢复原密码异常: {}".format(str(e)))
@allure.story("验证获得登录用户信息")
@allure.title("测试获得登录用户信息接口")
def test_joyhub_user_profile_get_get(self):
"""测试获得登录用户信息接口"""
with allure.step("1. 调用接口"):
resp = self.test_case.kw_joyhub_user_profile_get_get()
allure.attach(json.dumps(resp, ensure_ascii=False, indent=2), name="响应数据", attachment_type=allure.attachment_type.JSON)
with allure.step("2. 验证响应"):
assert resp is not None, "响应为空"
assert "code" in resp, "响应中缺少code字段"
assert resp["code"] == 0, f"请求失败code={resp.get('code')}"
assert "data" in resp, "响应中缺少data字段"
assert "id" in resp["data"], "响应中缺少id字段"
assert "username" in resp["data"], "响应中缺少username字段"
logging.info("获得登录用户信息接口验证通过")
@allure.story("验证修改用户个人信息")
@allure.title("测试修改用户个人信息接口")
def test_joyhub_user_profile_update_put(self):
"""测试修改用户个人信息接口"""
with allure.step("1. 先获取当前用户信息"):
get_resp = self.test_case.kw_joyhub_user_profile_get_get()
if not get_resp or get_resp.get('code') != 0:
pytest.skip("获取用户信息失败,跳过修改测试")
original_data = get_resp.get('data', {})
allure.attach(json.dumps(original_data, ensure_ascii=False, indent=2), name="原始用户信息", attachment_type=allure.attachment_type.JSON)
with allure.step("2. 准备修改参数"):
params = {
"nickname": "测试用户_修改",
"email": "test_updated@example.com",
"mobile": "13900139000",
"sex": 1
}
allure.attach(json.dumps(params, ensure_ascii=False), name="修改参数", attachment_type=allure.attachment_type.TEXT)
with allure.step("3. 调用修改接口"):
resp = self.test_case.kw_joyhub_user_profile_update_put(**params)
allure.attach(json.dumps(resp, ensure_ascii=False, indent=2), name="响应数据", attachment_type=allure.attachment_type.JSON)
with allure.step("4. 验证响应"):
assert resp is not None, "响应为空"
assert "code" in resp, "响应中缺少code字段"
assert resp["code"] == 0, f"请求失败code={resp.get('code')}"
assert "data" in resp, "响应中缺少data字段"
assert resp["data"] is True, "修改用户个人信息失败"
logging.info("修改用户个人信息接口验证通过")
with allure.step("5. 恢复原始信息"):
# 恢复原始信息
restore_params = {
"nickname": original_data.get("nickname", ""),
"email": original_data.get("email", ""),
"mobile": original_data.get("mobile", ""),
"sex": original_data.get("sex"),
"avatar": original_data.get("avatar", "")
}
restore_resp = self.test_case.kw_joyhub_user_profile_update_put(**restore_params)
if restore_resp and restore_resp.get('code') == 0:
logging.info("用户信息已恢复")
else:
logging.warning("恢复用户信息失败: {}".format(restore_resp))
@allure.story("验证修改用户个人密码")
@allure.title("测试修改用户个人密码接口")
def test_joyhub_user_profile_update_password_put(self):
"""测试修改用户个人密码接口"""
with allure.step("1. 准备修改密码参数"):
params = {
"old_password": self.original_password,
"new_password": self.test_password
}
allure.attach(json.dumps({"oldPassword": "******", "newPassword": "******"}, ensure_ascii=False), name="修改参数", attachment_type=allure.attachment_type.TEXT)
with allure.step("2. 调用修改密码接口"):
resp = self.test_case.kw_joyhub_user_profile_update_password_put(**params)
allure.attach(json.dumps(resp, ensure_ascii=False, indent=2), name="响应数据", attachment_type=allure.attachment_type.JSON)
with allure.step("3. 验证响应"):
assert resp is not None, "响应为空"
assert "code" in resp, "响应中缺少code字段"
assert resp["code"] == 0, f"请求失败code={resp.get('code')}"
assert "data" in resp, "响应中缺少data字段"
assert resp["data"] is True, "修改用户个人密码失败"
logging.info("修改用户个人密码接口验证通过,密码已修改为: {}".format(self.test_password))
logging.info("注意:测试类结束后将自动恢复原密码: {}".format(self.original_password))