滴滴云控制台 Selenium 自动化测试初探

Selenium 是一系列基于 Web 的自动化工具,提供一套测试函数,用于支持 Web 自动化测试。函数非常灵活,能够完成界面元素定位、窗口跳转、结果比较。具有如下特点:

  1. 支持多浏览器。 如 IE、Firefox、Safari、Chrome、Android 手机浏览器等。
  2. 支持多种语言。 如 Java、C#、Python、Ruby、PHP等。
  3. 支持多种操作系统。 如Windows、Linux、IOS、Android等。
  4. 开源免费。 官网: http://www.seleniumhg.org/

一、Selenium 组成部分

1.1 Selenium IDE

该工具是一个用于构建脚本的初级工具,其实是 FireFox 的一个插件,拥有一个易于使用的界面。

它拥有记录功能,能够记录用户执行的操作,并可以导出为可重复使用的脚本。如果没有编程经验,可以通过 Selenium IDE 来快速熟悉 Selenium 的命令。

1.2 Selenium RC

Selenium RC 是 Selenium 家族核心部分。

Selenium RC 支持多种不同的语言编写自动化测试脚本,通过 Selenium RC 的服务器作为代理服务器去访问应用,从而达到测试的目的。

1.3 Selenium WebDriver

当 Selenium2.x 提出了 WebDriver 的概念之后,它提供了完全另外的一种方式与浏览器交互。那就是利用浏览器原生的 API,封装成一套更加面向对象的 SeleniumWebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的)。

由于使用的是浏览器原生的 API,速度大大提高,而且调用的稳定性给了浏览器厂商本身,显然是更加科学。然而带来的一些副作用就是,不同的浏览器厂商,对 Web 元素的操作和呈现多少会有一些差异,这就直接导致了 Selenium WebDriver 要分浏览器厂商不同,而提供不同的实现。

例如 Firefox 就有专门的 FirefoxDriver,Chrome 就有专门的 ChromeDriver 等等(甚至包括了 AndroidDriver 和 iOS WebDriver)。

1.4 Selenium Grid

Selenium Grid 通过在许多服务器上同时运行测试,将 Selenium Remote Control 带到另一个层次,从而减少了测试多个浏览器或操作系统所需的时间。

这里借助 Selenium WebDriver,以 滴滴云 控制台的 默认选中 为例展示 Selenium 如何解放测试人员的双手。

滴滴云控制台的 DC2 创建页承载着复杂的业务逻辑,众多页面都需要跳转到此,并需要根据 URL 上的参数而对 DC2 的配置做默认选中。

当多人开发对业务逻辑耦合时,众多逻辑均会对默认选中的结果造成影响,难以避免导致 BUG 的产生。在手动测试的情况下,需要回归测试整个页面的所有功能点,而用 Selenium 如何保证页面的稳定呢?

二、Selenium 安装

Selenium 支持多种语言,Python 最受欢迎,安装也比较简单:


pip install selenium

然后需要根据 链接 下载 ChromeDriver 到 /usr/local/bin。

执行以下代码检测你的环境已经安装完毕:


# coding = utf-8
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()

如果程序能正常打开你的 Chrome 浏览器,输入 Selenium 并搜索,则说明 Selenium 安装成功。

三、Selenium 定位页面元素

WebDriver 提供了一系列的对象定位方法,常用的有 id, name, class name, link text, partial link text, tag name, xpath, css selector,针对百度的网页可以有一下多种方法定位页面元素。


#coding=utf-8
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
time.sleep(2)
#########百度输入框的定位方式##########
#通过id方式定位
browser.find_element_by_id("kw").send_keys("selenium")
#通过name方式定位
browser.find_element_by_name("wd").send_keys("selenium")
#通过tag name方式定位
browser.find_element_by_tag_name("input").send_keys("selenium")
#通过class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
#通过CSS方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")
#通过xpath方式定位
browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
############################################
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()

四、测试登录

因为 滴滴云 控制台部分页面需登录后方可打开,所以测试的第一步打开首页,填入用户名密码。


#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://app.didiyun.com")
driver.find_element_by_css_selector('input[type="text"]').send_keys("189****3932")
driver.find_element_by_css_selector('input[type="password"]').send_keys("3e****FV")
time.sleep(2)
subbutton=driver.find_element_by_css_selector('button[type="submit"]')
subbutton.click()
time.sleep(3)

检查程序可以打开滴滴云控制台首页,并成功登录 DashBoard 页,则登录验证成功。

五、测试默认项选中

本次自动化测试的目的为检测从官网跳转到控制台时,进入 https://app.didiyun.com/#/dc2/add?srvType=ebs&systemDiskType=HE&zoneId=gz01 页,查看能否默认选中广州一区,标准云服务器,系统盘为高效云盘。


#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://app.didiyun.com")
driver.find_element_by_css_selector('input[type="text"]').send_keys("18903393932")
driver.find_element_by_css_selector('input[type="password"]').send_keys("3edc$RFV%TGB")
time.sleep(2)
#测试的最终结果
TEST_PASS = True
subbutton=driver.find_element_by_css_selector('button[type="submit"]')
subbutton.click()
time.sleep(3)
if (driver.current_url == 'https://app.didiyun.com/#/'):
    print 'Success our dashboard login'
print "Opening our target page"
driver.get('https://app.didiyun.com/#/dc2/add?srvType=ebs&systemDiskType=HE&zoneId=gz01')
#浏览器打开需要时间
time.sleep(3)
if (driver.current_url == 'https://app.didiyun.com/#/dc2/add?srvType=ebs&systemDiskType=HE&zoneId=gz01'):
    print 'Opened the dc2 add page'
#################################################
regionName = driver.find_element_by_css_selector('div.region-select3-item.active .region-head span').text
zoneName = driver.find_element_by_css_selector('div.region-select3-item.active .zone-item.active span').text
if(regionName != u'广州'):
    TEST_PASS = False
    print u"期望区域是广州,但实际选中是%s" %(regionName)
else:
    if(zoneName != '1'):
        TEST_PASS = False
        print u"期望1区,但实际选中是%s区" %(zoneName)
#################################################
serverType = driver.find_elements_by_xpath('//*[@id="app"]/div[2]/div/form/div[3]/div[1]/div/div[1]/div/div[2]/div/span[1]')[0].text
if(serverType != u'标准云服务器'):
     TEST_PASS = False
     print u"期望服务器类型是标准云服务器,但实际选中是%s" %(serverType)
##################################################
serverVerion = driver.find_elements_by_xpath('//*[@id="app"]/div[2]/div/form/div[3]/div[2]/div[1]/div/label[1]/span/span')[0].text
if(serverVerion != u'通用型'):
    TEST_PASS = False
    print u"期望服务器类型是通用型,但实际选中是%s" %(serverVerion)
#################################################
diskType = driver.find_element_by_css_selector('div.selector-wrapper input').get_attribute('value')
if(diskType != u'高效云盘'):
    TEST_PASS = False
    print u"期望的系统盘类型是高效云盘,但实际选中是%s" %(diskType)
if(TEST_PASS):
    print 'SUCCESS 从官网跳到控制台dc2创建页,选中了对应的配置'
else:
    print 'FAIL 从官网跳到控制台dc2创建页,未选中了对应的配置'
time.sleep(3)
driver.close()

如果有如下输出,则测试失败,需要我们手动进入对应页面查看默认选中项的情况:


(venv) ➜  ~ python test.py
Success our dashboard login
Opening our target page
期望的系统盘类型是高效云盘,但实际选中是普通云盘
FAIL 从官网跳到控制台dc2创建页,未选中了对应的配置
(venv) ➜  ~

如果有如下输出,则通过测试:


(venv) ➜  ~ python test.py
Success our dashboard login
Opening our target page
Opened the dc2 add page
SUCCESS 从官网跳到控制台dc2创建页,选中了对应的配置
(venv) ➜  ~

六、后记

我们知道,Selenium 是一个很优秀的 Web 框架,提供了很丰富的 API,使用它结合进行做 Web 的自动化测试真的很完美。

但是在实际的情况中,理想与现实总是存在那么一点距离,这点距离主要是难维护,难维护的最核心是页面元素经常改变,测试过程中数据很多,不知道怎么进行维护,页面元素确实经常改变,很难改变。另外一个就是数据问题,比如我们验证 N 个表单在不同输入情况下的提示信息,会有不同的提示信息,都得需要验证。

本文为减少重复劳动而对自动化测试所做的一个探索,专业的自动化测试肯定会封装的更加易用,可读,可维护。断言,日志都会用更加专业的框架。

期待自动化测试可以为 滴滴云 的稳定性出一份力。

七、参考链接

Selenium 官网: https://www.seleniumhq.org

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31559758/viewspace-2637060/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31559758/viewspace-2637060/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值