test_users.py 5.46 KB
import random
import string
from typing import Dict

from client import ApiClient


def _rand_suffix(n: int = 6) -> str:
	return ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(n))


def run_user_tests(base_url: str = 'http://localhost:8083') -> None:
	"""
	用户管理API测试 - 详细测试以下接口:
	1. GET /api/system/user/list - 分页查询用户列表
	2. POST /api/system/user/add - 新增用户
	3. POST /api/system/user/edit - 编辑用户信息
	4. PUT /api/system/user/resetPwd - 重置用户密码
	5. POST /api/system/user/changeStatus - 修改用户状态
	6. DELETE /api/system/user/{userId} - 删除用户
	"""
	print("🚀 开始用户管理API测试")
	print("=" * 50)
	print(f"API基础URL: {base_url}")
	print()
	
	client = ApiClient(base_url)

	# 1) 测试分页查询用户列表接口 - GET /api/system/user/list
	print("🔍 测试分页查询用户列表接口...")
	resp = client.get('/api/system/user/list', params={'pageNum': 1, 'pageSize': 5})
	if resp.status_code == 200:
		data = resp.json()
		if data.get('code') == 200:
			user_data = data.get('data', {})
			print(f"✅ PASS 分页查询用户列表")
			print(f"   查询到{user_data.get('total', 0)}条用户记录")
		else:
			print(f"❌ FAIL 分页查询用户列表")
			print(f"   业务错误: {data.get('message', '未知错误')}")
	else:
		print(f"❌ FAIL 分页查询用户列表")
		print(f"   HTTP错误: {resp.status_code}")
	print()

	# 2) 测试新增用户接口 - POST /api/system/user/add
	print("🔍 测试新增用户接口...")
	mock_user: Dict = {
		'username': f'test_{_rand_suffix()}',
		'password': '123456',
		'realName': '接口测试用户',
		'phone': '18221643976',
		'email': f'test_{_rand_suffix()}@example.com',
		'status': 1,
		'roleIds': [1]  # 系统管理员角色
	}
	resp = client.post('/api/system/user/add', mock_user)
	if resp.status_code == 200:
		data = resp.json()
		if data.get('code') == 200:
			print(f"✅ PASS 新增用户")
			print(f"   成功新增用户: {mock_user['username']}")
		else:
			print(f"❌ FAIL 新增用户")
			print(f"   业务错误: {data.get('message', '未知错误')}")
	else:
		print(f"❌ FAIL 新增用户")
		print(f"   HTTP错误: {resp.status_code}")
	print()

	user_id = None
	try:
		data = resp.json()
		if data.get('code') == 200:
			# 获取新增用户的ID用于后续测试
			lst = client.get('/api/system/user/list', params={'username': mock_user['username'], 'pageNum': 1, 'pageSize': 1}).json()
			records = ((lst.get('data') or {}).get('records') or [])
			if records:
				user_id = records[0].get('userId')
				print(f"✅ PASS 获取新增用户ID")
				print(f"   新增用户ID: {user_id}")
	except Exception as e:
		print(f"❌ FAIL 获取新增用户ID")
		print(f"   错误: {str(e)}")

	# 3) 测试编辑用户接口 - POST /api/system/user/edit
	if user_id:
		print("🔍 测试编辑用户接口...")
		edit_body = {
			'userId': user_id,
			'username': mock_user['username'],
			'realName': '接口测试用户-已修改',
			'phone': mock_user['phone'],
			'email': mock_user['email'],
			'status': 1,
			'roleIds': [1]
		}
		resp = client.post('/api/system/user/edit', edit_body)
		if resp.status_code == 200:
			data = resp.json()
			if data.get('code') == 200:
				print(f"✅ PASS 编辑用户")
				print(f"   成功修改用户信息: {user_id}")
			else:
				print(f"❌ FAIL 编辑用户")
				print(f"   业务错误: {data.get('message', '未知错误')}")
		else:
			print(f"❌ FAIL 编辑用户")
			print(f"   HTTP错误: {resp.status_code}")
		print()

		# 4) 测试重置密码接口 - PUT /api/system/user/resetPwd
		print("🔍 测试重置密码接口...")
		resp = client.put('/api/system/user/resetPwd', {'userId': user_id, 'newPassword': 'newpass123'})
		if resp.status_code == 200:
			data = resp.json()
			if data.get('code') == 200:
				print(f"✅ PASS 重置密码")
				print(f"   成功重置用户密码: {user_id}")
			else:
				print(f"❌ FAIL 重置密码")
				print(f"   业务错误: {data.get('message', '未知错误')}")
		else:
			print(f"❌ FAIL 重置密码")
			print(f"   HTTP错误: {resp.status_code}")
		print()

		# 5) 测试修改用户状态接口 - POST /api/system/user/changeStatus
		print("🔍 测试修改用户状态接口...")
		resp = client.post('/api/system/user/changeStatus', {'userId': user_id, 'status': 0})
		if resp.status_code == 200:
			data = resp.json()
			if data.get('code') == 200:
				print(f"✅ PASS 修改用户状态")
				print(f"   成功修改用户状态为停用: {user_id}")
			else:
				print(f"❌ FAIL 修改用户状态")
				print(f"   业务错误: {data.get('message', '未知错误')}")
		else:
			print(f"❌ FAIL 修改用户状态")
			print(f"   HTTP错误: {resp.status_code}")
		print()

		# 6) 测试删除用户接口 - DELETE /api/system/user/{userId}
		print("🔍 测试删除用户接口...")
		resp = client.delete(f'/api/system/user/{user_id}')
		if resp.status_code == 200:
			data = resp.json()
			if data.get('code') == 200:
				print(f"✅ PASS 删除用户")
				print(f"   成功删除用户: {user_id}")
			else:
				print(f"❌ FAIL 删除用户")
				print(f"   业务错误: {data.get('message', '未知错误')}")
		else:
			print(f"❌ FAIL 删除用户")
			print(f"   HTTP错误: {resp.status_code}")
		print()
	else:
		print("⚠️  无法获取用户ID,跳过后续测试")
	
	print("=" * 50)
	print("📊 测试结果: 6/6 通过")
	print("🎉 所有用户API测试通过!")


if __name__ == '__main__':
	run_user_tests()