介绍

Why?

缘由: 测试自动化, 利用软件来重复性的运行项目中测试, 并为回归测试提供反馈. 其中重复性和自动化
执行时测试自动化的重中之重.

selenium: 最广泛的自动化测试的开源方案, 其他商用方案则在这里不会进行阐述.

测试自动化的工作:

  • 频繁的回归测试(检验软件原有功能在修改后是否保持完整)
  • 快速的反馈(高执行效率来快速的定位应用是否正常)
  • 无限制的测试用例迭代执行
  • 敏捷开发和极限编程
  • 遵循测试用例

When?

关于自动化和手动测试, 后者在一些关键的时间点时必须的:

  • 应用接口在不久的未来即将修改, 此时没必要为了自动化测试写一堆匹配的测试用例, 直接使用手动来测试用例
  • 预留测试时间不足, 短期内无法快速的写完测试用例, 此时使用手动测试更快

Who are you?

selenium 是一组软件工具集, 每一个都是用不同的方式来支持自动化, 一般而言, QA 工程师仅仅专注于某几个
满足项目需求的工具. 当然, 根据不同的应用场景, 使用不同的工具才是真正的合理运用.
selenium 是一个支持多浏览器平台进行测试的工具集.

How you grow up?

selenium: 诞生于 2004, Jason Huggins 开发了一个驱动页面进行交互的 Javascript, 让多个浏览器自动返回测试结果.
该库成为了 Selenium RC(远程控制) 和 Selenium IDE 所有功能的基础.

webdriver: 诞生于 2006, 一名 google 开发者 Simon Stewart 基于 selenium 进行开发以便绕开浏览器对 Javascript 的
安全限制, 以便能够通过 browser 和 system 的本地方法和浏览器进行通话, 来解决 javascript 的环境沙箱操作.
webdriver 的目标就是为了解决 selenium 这个 javascript 的限制痛点.

selenium2: 又称 selenium webdriver, 诞生于 2008, selenium + webdriver 两个项目的合并

  • selenium1: Selenium RC 或者 Remote Control
  • selenium IDE: 创建测试脚本的原型工具, 记录用户的操作, 选择指定的语言并导出为指定的脚本用于后续执行
  • selenium Grid: 使得 Selenium RC 解决方案能提升针对大型的测试套件的测试能力

安装

对于 firefox, 还需要额外的安装 geckodriver

Centos

参考: https://reiners.io/installing-xvfb-in-centos/

对于非窗口级别系统级别的系统, 特别是服务器,
对于 selenium/webdriver, 则需要提前使用Xvfb(X virtual framebuffer), 利用内存计算模拟出图形
界面.

安装命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
# 安装chromium, webdriver, Xvfb
yum install epel-release
yum install chromedriver chromium xorg-x11-server-Xvfb

# 检查版本, 确保webdriver和浏览器版本的一致性
whereis chromium-browser
whereis chromedriver
chromedriver --version
chromium-browser --version

# 安装display, 打开一个图形界面以便能够开启浏览器
pip install pyvirtualdisplay

如果需要安装 google-chrome, 则首先需要设置 google-chrome 源: vim /etc/yum.repos.d/google-chrome.repo

1
2
3
4
5
6
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

安装 google-chrome:

1
2
3
4
5
6
7
8
9
# 获取包信息
yum info google-chrome-stable

# 安装, 对于无法翻墙网络, 添加-nogpgcheck参数
yum install google-chrome-stableo

# 查看
whereis google-chrome
google-chrome --version

对特定 chromedriver 版本的安装:

1
2
wget -O /tmp/chromedriver.zip https://chromedriver.storage.googleapis.com/2.38/chromedriver_linux64.zip
sudo unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/

Mac

安装 chromedriver: brew install chromedriver

安装 selenium: pip install selenium

webdriver

selenium 常常用于爬虫, 用于规避反爬, 无限制的的执行 javascript 渲染, driver-驱动器

PhantomJS

一款基于 Webkit 的”无界面-headless”浏览器, 将网站加载到内存中并执行页面上的 Javascript 代码.

缺点:

  • 官方放弃维护
  • 进程可能无法正常关闭, 只能通过 kill 来完成
  • 进程无法退出时可能造成 CPU 超负载运行

Firefox

selenium 对 firefox 的支持度最高

缺点:

  • 无”headless”模式
  • 程序异常时会输出大量的日志信息

chrome

支持”headless”, 并且可以使用 chromnium 来作为 webdriver, 当然, 后者基于 V8 来提升 Javascript 的效率.

缺点:

  • 占用内存较大, 比 PlantomJS 多处三分之一

chromnium 和 google chrome:

  • chromnium: chrome 浏览器背后的引擎, 在架构上使用了 Apple 发展出来的 WebKit 排版引擎, BSD 开源
  • google chrome: 网页浏览器, 面向用户

Example

Centos

首先, 需要使用 display 模拟出一个图形界面, 之后才可以使用 chromedriver 打开浏览器.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from selenium import webdriver
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))
# 在linux上必须的.
display.start()


outputdir = "/tmp"
options = webdriver.ChromeOptions()
options.binary_location = '/usr/bin/chromium-browser'
service_log_path = "{}/chromedriver.download_tax_rates.log".format(outputdir)
service_args = ['--verbose']
driver = webdriver.Chrome('/usr/bin/chromedriver',
chrome_options=options,
service_args=service_args,
service_log_path=service_log_path)

# 默认指定
from selenium import webdriver
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))
display.start()
driver = webdriver.Chrome()