test_product_efficiency_formatter.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import importlib.util
  2. from pathlib import Path
  3. import pandas as pd
  4. import pytest
  5. SCRIPT = (
  6. Path(__file__).parents[1]
  7. / ".agents"
  8. / "skills"
  9. / "odps-product-efficiency-report"
  10. / "scripts"
  11. / "format_report.py"
  12. )
  13. spec = importlib.util.spec_from_file_location("product_efficiency_formatter", SCRIPT)
  14. assert spec and spec.loader
  15. formatter = importlib.util.module_from_spec(spec)
  16. spec.loader.exec_module(formatter)
  17. CONFIG = {
  18. "experiment_buckets": list("012345678"),
  19. "control_buckets": list("9abcdef"),
  20. }
  21. def raw_facts(*, dau: int = 0, all_exposure_pv: int = 0) -> pd.DataFrame:
  22. rows = []
  23. for bucket in formatter.HEX:
  24. row = {
  25. "stat_date": "20260808",
  26. "app_type": "4",
  27. "version_code": "all",
  28. "bucket": bucket,
  29. **{column: 0 for column in formatter.RAW_FACT_COLUMNS},
  30. }
  31. row["dau"] = dau
  32. row["all_exposure_pv"] = all_exposure_pv
  33. rows.append(row)
  34. return pd.DataFrame(rows)
  35. def test_rejects_zero_dau_with_nonzero_behavior_facts() -> None:
  36. with pytest.raises(ValueError, match="zero DAU.*nonzero behavior.*rootSessionId"):
  37. formatter.build_report(raw_facts(all_exposure_pv=1), CONFIG)
  38. def test_legitimate_all_zero_facts_keep_blank_rates() -> None:
  39. report = formatter.build_report(raw_facts(), CONFIG)
  40. assert len(report) == 20
  41. assert len(report.columns) == 65
  42. assert pd.isna(report.loc[0, "全部曝光PV/DAU"])
  43. assert report.loc[0, "全部STR(分享PV/曝光PV)"] == ""
  44. def test_positive_dau_rates_are_unchanged() -> None:
  45. report = formatter.build_report(raw_facts(dau=10, all_exposure_pv=20), CONFIG)
  46. assert report.loc[0, "全部曝光PV/DAU"] == 2.0
  47. assert report.loc[0, "全部STR(分享PV/曝光PV)"] == "0.0000%"