什么是自动化测试
自动化测试就是,假定一些预设值,由机器自动化完成的测试。
web自动化测试,将自动化测试技术艺能用到web测试中,是假定一些预设值,由程序驱动浏览器来完成web程序的测试,如下图:
Selenium
web自动化测试的技术手段和框架很多,这里我们主要介绍Selenium
Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像用户在操作一样。
我们通常所说的Selenium是对Seleninum的总称,其中包括三个项目,分别是:
1. Selenium WebDriver
2. Selenium IDE
3. seleninum Grid
后续相关的文章我们只关注Seleninum WebDriver
Selenium WebDriver
selenium webdriver 其实就是不同语言基于实现了W3C WebDriver协议从而达到能控制浏览器的代码库,它提供了简单的API接口使测试人员可以很方便的控制浏览器的各种行为。
运行自动化的几种方式
运行机理:webdriver通过driver(浏览器驱动)将执行命令发送给浏览器;同样的浏览器在执行玩命令之后通过相同的通道将信息返回给webdriver。
整体就是一个C/S架构,我们的webdriver是作为客户端存在。
-
这种方式是Seleninum Webdriver和浏览器驱动程序和浏览器在同一台主机 -
当然我们也可以将webdriver独立到另外一台服务器,然后通过Remote进行自动化。
-
远程连接我们还可以通过Seleninum Server或者Seleninum Grid来实现,从而进行分布式的测试。
环境安装
Python
Selenium
浏览器驱动: 相关地址
简单实例
from selenium import webdriver
import time
driver = webdriver.Chrome(executable_path='./chromedriver')
driver.maximize_window()
driver.get('https://www.baidu.com')
driver.find_element_by_id('kw').send_keys('python')
driver.find_element_by_id('su').click()
time.sleep(2)
driver.quit()
代码分析:
其实实例化driver的核心代码是这段,我们可以通过IDE进入到源码中,看到首先建立Service,其实就是通过命令行将浏览器驱动运行起来
self.service = Service( executable_path, port=port, service_args=service_args, log_path=service_log_path) self.service.start()
服务启动后,创建一个连接,从而进行后续的操作
try: RemoteWebDriver.__init__( self, command_executor=ChromeRemoteConnection( remote_server_addr=self.service.service_url, keep_alive=keep_alive), desired_capabilities=desired_capabilities) except Exception: self.quit() raise
正如我们介绍Selenium的时候说过Selenium Webdriver其实是实现了The WebDriver Wire Protocol协议,而协议其实就是一些Http相关的请求,具体信息我们可以在这查看。
下面我们通过requests来实现相同的功能,首先我们需要启动Service,这里我们可以使用Selenium Server来代替,或者我们也可以直接运行chromedriver等浏览器驱动程序。这里我使用Selenium来完成。
首先下载selenium-server-standalone-{VERSION}.jar,下载地址
然后启动
java -jar selenium-server-standalone-{VERSION}.jar
启动后控制台会给我们打印相关的服务地址
这个时候我们去浏览器访问一下这个地址: http://127.0.0.1:4444/wd/hub
我这里会被自动跳转到
我们点击Create Session,创建成功后就会发现启动了一个浏览器
其实如果您打开了chrome的检查面板,发现其实就是发送了一个Post请求,相关的信息都是同协议相同,那我们就以postman来调用这些接口看看效果。
在发送这些请求的时候,浏览器是在做相应变化的