1,遇见问题
在进行 web 自动化测试的时候,经常会碰到一些加载非常慢的页面 。这些页面加载之所以慢有很多种原因:
- 页面本来就有非常多资源需要加载,通常是首页;
- 页面使用了一些不是很稳定的外部依赖,比如调用了不成熟的 css 样式库和 js 库;
- 公司服务器处理能力有限;
- 开发人员的代码写得不好,等等 。
文章插图
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 秒 。文章插图
3,解决问题对于一些加载比较慢的资源,在进行自动化测试的时候没有必要等到所有的元素加载完成,再进行元素定位 。
设置一个超时时间,如果页面加载超过了指定时间,手工终止页面,相当于用手点击浏览器的 X 按钮,让页面停止加载 。
# 设置加载超时时间为 5 sdriver.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 指定,终止页面加载 。
class IndexPage():url = 'http://lemonban'def __init__(self, driver, load_timeout=5):self.driver = driverself.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() 让页面按照设置的超时时间加载就可以了 。
文章插图
【Python自动化 页面加载速度太慢,如何提升测试效率?】新的测试时间为 11.3 秒, 测试效率提升将近 60% 。不说了,我得赶紧把这个解决方案整合到简历里去 。
推荐阅读
- 5个有趣的Python库
- Python中的多处理与多线程:新手简介
- 别在Python中使用“+”来连接字符串了,还有更好用的方法
- 自动化运维工具Ansible之LNMP实践环境部署
- 基于MIT协议,一个开源的Python微信公众号开发框架——WeRoBot
- 利用Python实现“天眼系统”,只要照片就能了解个人信息
- 看完这篇文章,你的Python基础就差不多了
- python生成exe
- 推荐一款Python数据可视化神器
- python中68个内置函数,你了解吗?