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

作者:性能测试   发布时间:2023-10-07

1,遇见问题

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


页面本来就有非常多资源需要加载,通常是首页;

页面使用了一些不是很稳定的外部依赖,比如调用了不成熟的 css 样式库和 js 库;

公司服务器处理能力有限;

开发人员的代码写得不好,等等。


1696660301732095259.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 秒。


1696660334283078416.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 个点:


1, 设置超时时间为 5 秒

2, 执行 driver.get(url) 时,页面加载如果不超过 5 秒,不会报错,超过 5 秒,会抛出超时异常

3, 使用 TimeoutException 捕获超时异常。当超时后,执行 js 指定,终止页面加载。

接下来,封装页面 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() 让页面按照设置的超时时间加载就可以了。


1696660366348027913.png

新的测试时间为 11.3 秒, 测试效率提升将近 60%。

推荐阅读:

性能测试软件有哪些

软件性能测试机构有哪些

app性能测试工具有哪些


本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-60725088-8054),我们将立即处理,马上删除。



沪ICP备07036474号-4 |

沪公网安备 31010702003220号

2015-2023 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd.