perf: 量化商品页打开耗时并去重检查 (#109)
This commit is contained in:
@@ -59,6 +59,7 @@ class FakeDevice:
|
||||
self.quantity = 1
|
||||
self.clicks = []
|
||||
self.opened_urls = []
|
||||
self.app_wait_calls = 0
|
||||
|
||||
def app_current(self):
|
||||
return {"package": "com.xunmeng.pinduoduo"}
|
||||
@@ -67,6 +68,7 @@ class FakeDevice:
|
||||
pass
|
||||
|
||||
def app_wait(self, _package, timeout=10):
|
||||
self.app_wait_calls += 1
|
||||
return True
|
||||
|
||||
def open_url(self, url):
|
||||
@@ -87,6 +89,25 @@ class FakeDevice:
|
||||
raise AssertionError(f"未预期的 selector: {selector}")
|
||||
|
||||
|
||||
class ColdStartDevice(FakeDevice):
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
self.current_calls = 0
|
||||
self.app_started = False
|
||||
|
||||
def app_current(self):
|
||||
self.current_calls += 1
|
||||
package = (
|
||||
"com.android.launcher"
|
||||
if self.current_calls == 1
|
||||
else "com.xunmeng.pinduoduo"
|
||||
)
|
||||
return {"package": package}
|
||||
|
||||
def app_start(self, _package):
|
||||
self.app_started = True
|
||||
|
||||
|
||||
class U2PddPurchaseAdapterTest(unittest.TestCase):
|
||||
def _adapter(self, device, calls):
|
||||
def select_color_fn(_device, _xml, target, **_kwargs):
|
||||
@@ -150,6 +171,7 @@ class U2PddPurchaseAdapterTest(unittest.TestCase):
|
||||
self.assertEqual(calls, [("color", "黑色"), ("size", "3XL【140-165斤】")])
|
||||
# 只点击一次商品页采购入口;最终“提交订单”从不点击。
|
||||
self.assertEqual(len(device.clicks), 1)
|
||||
self.assertEqual(device.app_wait_calls, 0)
|
||||
|
||||
def test_unsupported_dynamic_option_stops_before_click(self):
|
||||
device = FakeDevice()
|
||||
@@ -163,6 +185,16 @@ class U2PddPurchaseAdapterTest(unittest.TestCase):
|
||||
self.assertEqual(device.clicks, [])
|
||||
adapter.close()
|
||||
|
||||
def test_cold_start_waits_for_pdd_once(self):
|
||||
device = ColdStartDevice()
|
||||
adapter = self._adapter(device, [])
|
||||
|
||||
adapter.open_goods(GOODS_URL)
|
||||
|
||||
self.assertTrue(device.app_started)
|
||||
self.assertEqual(device.app_wait_calls, 1)
|
||||
adapter.close()
|
||||
|
||||
def test_captcha_stops_without_waiting_or_clicking(self):
|
||||
device = FakeDevice(
|
||||
'<hierarchy><node package="com.xunmeng.pinduoduo" '
|
||||
|
||||
Reference in New Issue
Block a user