在 webdriver 中执行的性能影响
Performance repercussions of execute in webdriver
我找不到这方面的任何信息,所以很好奇是否有人对来自测试的 execute()
调用进行了性能测试。据我了解,这些将 javascript 注入当前帧,执行它,然后 return 结果。
是否更好:
a) 运行 一堆较小的执行调用
b) 运行 越少越好,但调用本身做的更多
我的具体情况是使用 WebDriverIO,我需要 运行 这些以便收集应用程序中可用的调试信息,或与 local/session 存储交互。所以这意味着我可以:
a) 将每个所需的 属性 包装在执行执行的 getter 中,并且始终 returns 是反映当前的最新 属性应用程序的状态。这将导致 execute()
调用量是 运行 的 5 倍,但它们会非常小。
b) 将所有需要的属性集中到一个巨大的调用中,并在应用程序的状态发生变化时调用它。这就是我目前正在做的,但它经常需要 "refreshing" 我们的测试属性。如果测试作者忘记这样做,他们将得到错误的数据。
谢谢!
execute
函数的速度主要取决于网络延迟。我 运行 在 "local network" 场景中进行了一些测试(通过 Spectron),发现 execute
开销通常只有 10
~15
毫秒。
因此,如果您也在使用本地网络,我建议您使用 "best code quality" 路线,因为您可以在一秒钟内收集一百个属性。
如果您处于 "remote networK" 场景(例如 BrowserStack),您可以考虑 "batching" 请求,以提高速度。
作为参考,这是我测试的内容:
- 通过单个
execute
执行 1000 个客户端任务:408ms
- 通过 1000 个
execute
调用执行 1000 个客户端任务:10347ms
(每个任务添加 10ms
)
我找不到这方面的任何信息,所以很好奇是否有人对来自测试的 execute()
调用进行了性能测试。据我了解,这些将 javascript 注入当前帧,执行它,然后 return 结果。
是否更好:
a) 运行 一堆较小的执行调用
b) 运行 越少越好,但调用本身做的更多
我的具体情况是使用 WebDriverIO,我需要 运行 这些以便收集应用程序中可用的调试信息,或与 local/session 存储交互。所以这意味着我可以:
a) 将每个所需的 属性 包装在执行执行的 getter 中,并且始终 returns 是反映当前的最新 属性应用程序的状态。这将导致 execute()
调用量是 运行 的 5 倍,但它们会非常小。
b) 将所有需要的属性集中到一个巨大的调用中,并在应用程序的状态发生变化时调用它。这就是我目前正在做的,但它经常需要 "refreshing" 我们的测试属性。如果测试作者忘记这样做,他们将得到错误的数据。
谢谢!
execute
函数的速度主要取决于网络延迟。我 运行 在 "local network" 场景中进行了一些测试(通过 Spectron),发现 execute
开销通常只有 10
~15
毫秒。
因此,如果您也在使用本地网络,我建议您使用 "best code quality" 路线,因为您可以在一秒钟内收集一百个属性。
如果您处于 "remote networK" 场景(例如 BrowserStack),您可以考虑 "batching" 请求,以提高速度。
作为参考,这是我测试的内容:
- 通过单个
execute
执行 1000 个客户端任务:408ms
- 通过 1000 个
execute
调用执行 1000 个客户端任务:10347ms
(每个任务添加10ms
)