页面加载速度太慢,如何提升测试效率?

本贴最后更新于 1568 天前,其中的信息可能已经时移世易

1,遇见问题

在进行 web 自动化测试的时候,经常会碰到一些加载非常慢的页面。这些页面加载之所以慢有很多种原因:

image.png


2,分析问题

如果我们想进行自动化测试,首先需要通过 webdriver 的 get 方法打开页面,但是因为页面加载时间过长,后面的操作无法进行,甚至直接报错, 对自动化测试的运行效率影响非常大。

class TestLogin(unittest.TestCase):
    def test_login_success(self):
        # 初始化浏览器
        driver = webdriver.Chrome()
        driver.implicitly_wait(20)
        url = 'http://lemonban_url'
        driver.get(url)

        # 登录
        driver.find_element_by_name('phone').send_keys(current_phone)
        pwd_elem = driver.find_element_by_name('password')
        pwd_elem.send_keys(current_pwd)
        pwd_elem.send_keys(Keys.ENTER)

        # 实际结果
        actual = driver.find_element_by_xpath('//img[@class="mr-5"]/..')
        # 断言
        self.assertIn('小小鸟', actual.text)

当在进行实际结果获取的时候,占用了大量时间等待首页正确加载,虽然后面测试用例通过。但是造成了大量时间浪费,运行一个测试用例花费 26.5 秒。

image.png


3,解决问题

对于一些加载比较慢的资源,在进行自动化测试的时候没有必要等到所有的元素加载完成,再进行元素定位。

设置一个超时时间,如果页面加载超过了指定时间,手工终止页面,相当于用手点击浏览器的 X 按钮,让页面停止加载。

# 设置加载超时时间为 5 s
driver.set_page_load_timeout(5)

try:
	return driver.get(url)
except TimeoutException:
	# 调用 js 脚本终止页面加载
	driver.execute_script("window.stop()")

代码有 3 个点:

接下来,封装页面 get 方法:

class IndexPage():
    url = 'http://lemonban'

    def __init__(self, driver, load_timeout=5):
        self.driver = driver
        self.driver.set_page_load_timeout(load_timeout)

    def get(self):
        try:
            return self.driver.get(self.url)
        except TimeoutException:
            self.driver.execute_script("window.stop()")

修改原来的自动化脚本:

class TestLogin(unittest.TestCase):
    def test_login_success(self):
        # 初始化浏览器
        driver = webdriver.Chrome()
        driver.implicitly_wait(20)
        url = 'http://lemonban_url'
        driver.get(url)

        # 登录
        driver.find_element_by_name('phone').send_keys(current_phone)
        pwd_elem = driver.find_element_by_name('password')
        pwd_elem.send_keys(current_pwd)
        pwd_elem.send_keys(Keys.ENTER)

        # 实际结果
        IndexPage(driver).get()
        actual = driver.find_element_by_xpath('//img[@class="mr-5"]/..')
        # 断言
        self.assertIn('小小鸟', actual.text)

4, 总结问题

其他的代码都不需要发生变化,只需要在加载耗时的地方添加 IndexPage(driver).get() 让页面按照设置的超时时间加载就可以了。

image.png

新的测试时间为 11.3 秒, 测试效率提升将近 60%。不说了,我得赶紧把这个解决方案整合到简历里去。

  • Web
    22 引用 • 10 回帖
1 操作
yuze 在 2020-08-06 17:47:32 更新了该帖
2 回帖
请输入回帖内容 ...
  • Jack

    那么我想看看你的简历

  • 其他回帖
  • yuze

    嘿嘿,雪藏了。