【问题标题】:How to speed up selenium tests on AWS device farm?如何加快 AWS 设备场上的 selenium 测试?
【发布时间】:2020-06-11 07:15:18
【问题描述】:

我正在使用 Python 在 AWS 设备场上进行测试。似乎启动硒需要很长时间。这是我使用的代码:

from time import time

from boto3 import client
from selenium import webdriver


def main():
    start = time()

    device_farm_client = client("devicefarm", region_name='us-west-2')

    test_grid_url_response = device_farm_client.create_test_grid_url(
        expiresInSeconds=666,
        projectArn="arn:aws:devicefarm:us-west-2:..."
    )

    driver = webdriver.Remote(
        command_executor=test_grid_url_response['url'],
        desired_capabilities=webdriver.DesiredCapabilities.CHROME,
    )

    driver.get('https://api.ipify.org')
    print(f"Your IP is: {driver.find_element_by_tag_name('pre').text}")

    driver.quit()

    print(f"took: {time() - start:.2f}")


if __name__ == '__main__':
    main()

输出:

Your IP is: 100.10.10.111
took: 99.89s

使用现有的 selenium-hub 基础设施,不到 2 秒即可获得 IP!

有什么方法可以从根本上减少时间?

【问题讨论】:

    标签: selenium aws-device-farm


    【解决方案1】:

    要减少完整测试套件执行的总体执行时间,请利用默认情况下免费提供的 50 个并发会话。检查此link。例如:

    让我们假设以下细节

    • 一个测试套件有 200 个 Selenium 测试用例
    • 每个测试用例大约需要 10 秒来执行
    • 一个 AWS Device Farm Selenium 会话大约需要 60 秒才能启动

    然后我将通过每个会话运行 4 个测试用例的并发批次将我的 200 个测试用例分成 50 个并发会话。

    总执行时间 =(60 秒开始每个会话 + 10 秒以每秒 5 个会话的速率启动所有 50 个并发会话 + 4*10 秒在每个会话中执行测试用例)= 60+ 10+40 = 110 秒完成完整的测试套件执行

    鉴于

    如果你是现有的 selenium-hub 基础设施,假设以下细节

    • 要执行的 200 个 Selenium 测试用例
    • 2 秒开始会话
    • 假设您最多可以运行 10 个并发会话

    总执行时间 = 2 秒开始每个会话 + 20*10 秒在每个会话中执行测试用例 = 200+2 = 202 秒完成完整的测试套件执行

    【讨论】:

    • 感谢您的回答!虽然,用例不能并行化,因此我不能接受你的回答。对不起:(
    • 我相信 geek2geek_AWS 的回答是可以接受的。如果您的 Selenium 测试不是为并行设计的,那么使用 Selenium 网格和 Device Farm 是没有意义的。
    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 2019-03-08
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多