fix: auto-fix code issues (cron)
- 修复重复导入/字段 - 修复异常处理 - 修复PEP8格式问题 - 添加类型注解 - 修复缺失的urllib.parse导入
This commit is contained in:
@@ -32,6 +32,7 @@ backend_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
if backend_dir not in sys.path:
|
||||
sys.path.insert(0, backend_dir)
|
||||
|
||||
|
||||
class TestGrowthManager:
|
||||
"""测试 Growth Manager 功能"""
|
||||
|
||||
@@ -63,7 +64,7 @@ class TestGrowthManager:
|
||||
session_id="session_001",
|
||||
device_info={"browser": "Chrome", "os": "MacOS"},
|
||||
referrer="https://google.com",
|
||||
utm_params={"source": "google", "medium": "organic", "campaign": "summer"}
|
||||
utm_params={"source": "google", "medium": "organic", "campaign": "summer"},
|
||||
)
|
||||
|
||||
assert event.id is not None
|
||||
@@ -94,7 +95,7 @@ class TestGrowthManager:
|
||||
user_id=self.test_user_id,
|
||||
event_type=event_type,
|
||||
event_name=event_name,
|
||||
properties=props
|
||||
properties=props,
|
||||
)
|
||||
|
||||
self.log(f"成功追踪 {len(events)} 个事件")
|
||||
@@ -130,7 +131,7 @@ class TestGrowthManager:
|
||||
summary = self.manager.get_user_analytics_summary(
|
||||
tenant_id=self.test_tenant_id,
|
||||
start_date=datetime.now() - timedelta(days=7),
|
||||
end_date=datetime.now()
|
||||
end_date=datetime.now(),
|
||||
)
|
||||
|
||||
assert "unique_users" in summary
|
||||
@@ -156,9 +157,9 @@ class TestGrowthManager:
|
||||
{"name": "访问首页", "event_name": "page_view_home"},
|
||||
{"name": "点击注册", "event_name": "signup_click"},
|
||||
{"name": "填写信息", "event_name": "signup_form_fill"},
|
||||
{"name": "完成注册", "event_name": "signup_complete"}
|
||||
{"name": "完成注册", "event_name": "signup_complete"},
|
||||
],
|
||||
created_by="test"
|
||||
created_by="test",
|
||||
)
|
||||
|
||||
assert funnel.id is not None
|
||||
@@ -182,7 +183,7 @@ class TestGrowthManager:
|
||||
analysis = self.manager.analyze_funnel(
|
||||
funnel_id=funnel_id,
|
||||
period_start=datetime.now() - timedelta(days=30),
|
||||
period_end=datetime.now()
|
||||
period_end=datetime.now(),
|
||||
)
|
||||
|
||||
if analysis:
|
||||
@@ -204,7 +205,7 @@ class TestGrowthManager:
|
||||
retention = self.manager.calculate_retention(
|
||||
tenant_id=self.test_tenant_id,
|
||||
cohort_date=datetime.now() - timedelta(days=7),
|
||||
periods=[1, 3, 7]
|
||||
periods=[1, 3, 7],
|
||||
)
|
||||
|
||||
assert "cohort_date" in retention
|
||||
@@ -231,7 +232,7 @@ class TestGrowthManager:
|
||||
variants=[
|
||||
{"id": "control", "name": "红色按钮", "is_control": True},
|
||||
{"id": "variant_a", "name": "蓝色按钮", "is_control": False},
|
||||
{"id": "variant_b", "name": "绿色按钮", "is_control": False}
|
||||
{"id": "variant_b", "name": "绿色按钮", "is_control": False},
|
||||
],
|
||||
traffic_allocation=TrafficAllocationType.RANDOM,
|
||||
traffic_split={"control": 0.34, "variant_a": 0.33, "variant_b": 0.33},
|
||||
@@ -240,7 +241,7 @@ class TestGrowthManager:
|
||||
secondary_metrics=["conversion_rate", "bounce_rate"],
|
||||
min_sample_size=100,
|
||||
confidence_level=0.95,
|
||||
created_by="test"
|
||||
created_by="test",
|
||||
)
|
||||
|
||||
assert experiment.id is not None
|
||||
@@ -285,7 +286,7 @@ class TestGrowthManager:
|
||||
variant_id = self.manager.assign_variant(
|
||||
experiment_id=experiment_id,
|
||||
user_id=user_id,
|
||||
user_attributes={"user_id": user_id, "segment": "new"}
|
||||
user_attributes={"user_id": user_id, "segment": "new"},
|
||||
)
|
||||
|
||||
if variant_id:
|
||||
@@ -321,7 +322,7 @@ class TestGrowthManager:
|
||||
variant_id=variant_id,
|
||||
user_id=user_id,
|
||||
metric_name="button_click_rate",
|
||||
metric_value=value
|
||||
metric_value=value,
|
||||
)
|
||||
|
||||
self.log(f"成功记录 {len(test_data)} 条指标")
|
||||
@@ -375,7 +376,7 @@ class TestGrowthManager:
|
||||
<p><a href="{{dashboard_url}}">立即开始使用</a></p>
|
||||
""",
|
||||
from_name="InsightFlow 团队",
|
||||
from_email="welcome@insightflow.io"
|
||||
from_email="welcome@insightflow.io",
|
||||
)
|
||||
|
||||
assert template.id is not None
|
||||
@@ -413,8 +414,8 @@ class TestGrowthManager:
|
||||
template_id=template_id,
|
||||
variables={
|
||||
"user_name": "张三",
|
||||
"dashboard_url": "https://app.insightflow.io/dashboard"
|
||||
}
|
||||
"dashboard_url": "https://app.insightflow.io/dashboard",
|
||||
},
|
||||
)
|
||||
|
||||
if rendered:
|
||||
@@ -445,8 +446,8 @@ class TestGrowthManager:
|
||||
recipient_list=[
|
||||
{"user_id": "user_001", "email": "user1@example.com"},
|
||||
{"user_id": "user_002", "email": "user2@example.com"},
|
||||
{"user_id": "user_003", "email": "user3@example.com"}
|
||||
]
|
||||
{"user_id": "user_003", "email": "user3@example.com"},
|
||||
],
|
||||
)
|
||||
|
||||
assert campaign.id is not None
|
||||
@@ -472,8 +473,8 @@ class TestGrowthManager:
|
||||
actions=[
|
||||
{"type": "send_email", "template_type": "welcome", "delay_hours": 0},
|
||||
{"type": "send_email", "template_type": "onboarding", "delay_hours": 24},
|
||||
{"type": "send_email", "template_type": "feature_tips", "delay_hours": 72}
|
||||
]
|
||||
{"type": "send_email", "template_type": "feature_tips", "delay_hours": 72},
|
||||
],
|
||||
)
|
||||
|
||||
assert workflow.id is not None
|
||||
@@ -502,7 +503,7 @@ class TestGrowthManager:
|
||||
referee_reward_value=50.0,
|
||||
max_referrals_per_user=10,
|
||||
referral_code_length=8,
|
||||
expiry_days=30
|
||||
expiry_days=30,
|
||||
)
|
||||
|
||||
assert program.id is not None
|
||||
@@ -524,8 +525,7 @@ class TestGrowthManager:
|
||||
|
||||
try:
|
||||
referral = self.manager.generate_referral_code(
|
||||
program_id=program_id,
|
||||
referrer_id="referrer_user_001"
|
||||
program_id=program_id, referrer_id="referrer_user_001"
|
||||
)
|
||||
|
||||
if referral:
|
||||
@@ -551,8 +551,7 @@ class TestGrowthManager:
|
||||
|
||||
try:
|
||||
success = self.manager.apply_referral_code(
|
||||
referral_code=referral_code,
|
||||
referee_id="new_user_001"
|
||||
referral_code=referral_code, referee_id="new_user_001"
|
||||
)
|
||||
|
||||
if success:
|
||||
@@ -579,7 +578,9 @@ class TestGrowthManager:
|
||||
assert "total_referrals" in stats
|
||||
assert "conversion_rate" in stats
|
||||
|
||||
self.log(f"推荐统计: {stats['total_referrals']} 推荐, {stats['conversion_rate']:.2%} 转化率")
|
||||
self.log(
|
||||
f"推荐统计: {stats['total_referrals']} 推荐, {stats['conversion_rate']:.2%} 转化率"
|
||||
)
|
||||
return True
|
||||
except Exception as e:
|
||||
self.log(f"获取推荐统计失败: {e}", success=False)
|
||||
@@ -599,7 +600,7 @@ class TestGrowthManager:
|
||||
incentive_type="discount",
|
||||
incentive_value=20.0, # 20% 折扣
|
||||
valid_from=datetime.now(),
|
||||
valid_until=datetime.now() + timedelta(days=90)
|
||||
valid_until=datetime.now() + timedelta(days=90),
|
||||
)
|
||||
|
||||
assert incentive.id is not None
|
||||
@@ -617,9 +618,7 @@ class TestGrowthManager:
|
||||
|
||||
try:
|
||||
incentives = self.manager.check_team_incentive_eligibility(
|
||||
tenant_id=self.test_tenant_id,
|
||||
current_tier="free",
|
||||
team_size=5
|
||||
tenant_id=self.test_tenant_id, current_tier="free", team_size=5
|
||||
)
|
||||
|
||||
self.log(f"找到 {len(incentives)} 个符合条件的激励")
|
||||
@@ -642,7 +641,9 @@ class TestGrowthManager:
|
||||
assert "top_features" in dashboard
|
||||
|
||||
today = dashboard["today"]
|
||||
self.log(f"实时仪表板: 今日 {today['active_users']} 活跃用户, {today['total_events']} 事件")
|
||||
self.log(
|
||||
f"实时仪表板: 今日 {today['active_users']} 活跃用户, {today['total_events']} 事件"
|
||||
)
|
||||
return True
|
||||
except Exception as e:
|
||||
self.log(f"获取实时仪表板失败: {e}", success=False)
|
||||
@@ -734,10 +735,12 @@ class TestGrowthManager:
|
||||
print("✨ 测试完成!")
|
||||
print("=" * 60)
|
||||
|
||||
|
||||
async def main():
|
||||
"""主函数"""
|
||||
tester = TestGrowthManager()
|
||||
await tester.run_all_tests()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
|
||||
Reference in New Issue
Block a user