看到这篇文章的标题,是不是有小伙伴会感到惊讶呢?
Postman 不是做接口测试的吗?为什么还能做 UI 自动化测试呢?
其实,只要你了解 Selenium 的运行原理,就可以理解为什么 Postman 也能实现 UI 自动化测试了。
Selenium 底层原理
运行代码,启动浏览器后,webdriver 会将浏览器绑定到特定的端口,作为 webdriver 的 remote server(远程服务端),而 client(客户端,也就是测试脚本,可以是 Python 或者 Java 代码)会借助 CommandExecutor 创建 sessionId,发送 http 请求给 remote server,remote server 收到 http 请求后,调用 webdriver 完成操作,并将 http 响应结果返回给 client。
所以,本质上是调用 http 请求的过程,因此也就可以理解为什么可以使用 Postman 实现 UI 自动化测试。
Postman 实现 UI 自动化测试
以上我们知道了 Selenium 的底层原理其实就是调用 http 请求的过程,那么我们要想调用接口就需要知道接口信息,包括请求方式、请求地址、请求参数、请求格式等。
这些接口信息,我们可以通过对源码的分析得到。
运行 chromedriver.exe
Selenium 脚本:
from selenium import webdriver
driver = webdriver.Chrome()
执行上述代码,程序会打开 Chrome 浏览器。(前提:已经正确配置了 Chrome 驱动和对应的版本)
那么,Selenium 是如何实现这一过程的呢?
源码分析:
D:\Python3\Lib\site-packages\selenium\webdriver\chrome\webdriver.py
我们可以看到它执行了一个 cmd 命令,这个命令主要是启动 chromedriver.exe 浏览器驱动,我们每次执行脚本前,程序会自动帮我们启动浏览器驱动。
由于我们跳过了代码脚本,因此需要手动启动浏览器驱动。
地址及端口号:127.0.0.1:9515
新建浏览器会话
D:\Python3\Lib\site-packages\selenium\webdriver\remote\webdriver.py
继续查看源码,这里有一行重要的代码:
start_session () 这个方法是向地址 http://127.0.0.1:9515/session 发送了一个 post 请求,参数是 JSON 格式,然后返回一个特定的响应信息给程序,主要就是新建了一个 sessionId。
接口信息:
url: /session
method: POST
content_type: application/json
请求参数:
{
"capabilities": {
"browserName": "chrome"
}
}
调用接口:
访问目标网站
Selenium 脚本:
driver.get("https://www.baidu.com")
执行以上代码,可以访问目标网站。
源码分析:
D:\Python3\Lib\site-packages\selenium\webdriver\remote\remote_connection.py
在 RemoteConnection 这个类中,定义了所有 selenium 操作需要的接口地址(这些接口地址全部封装在浏览器驱动程序中)。
其中 Command.GET: (“POST”, “/session/$sessionId/url”) 这个地址就是实现访问一个网站的 URL。
紧接着,可以看到主要是通过 execute () 方法调用_request () 方法通过 urllib3 标准库向服务器发送对应操作请求地址,进而实现浏览器各种操作。
而打开浏览器和操作浏览器实现各种动作是通过上一步新建浏览器会话返回的 sessionId 实现的关联。你也会发现后面操作的各种接口地址中都存在一个 $sessionId,以达到能够在同一个浏览器中做操作。
接口信息:
url: /session/$sessionId/url
method: POST
content_type: application/json
请求参数:
{
"url": "目标网站地址"
}
调用接口:
窗口最大化
Selenium 脚本:
driver.maximize_window()
源码分析:
接口信息:
url: /session/$sessionId/window/maximize
method: POST
content_type: application/json
调用接口:
元素定位
Selenium 脚本:
driver.find_element(By.XPATH, "//input[@id='kw']")
源码分析:
接口信息:
url: /session/$sessionId/element
method: POST
content_type: application/json
请求参数:
{
"using": "xpath", // 定位方式
"value": "//input[@id='kw']" // 值
}
接口调用:
输入文本
Selenium 脚本:
driver.find_element(By.XPATH, '//input[@type="text"]').send_keys
源码分析:
接口信息:
url: /session/$sessionId/element/$id/value
method: POST
content_type: application/json
请求参数:
{
"text": "
}
接口调用:
点击元素
Selenium 脚本:
driver.find_element(By.XPATH, "//input[@id='su']").click()
源码分析:
接口信息:
url: /session/$sessionId/element/$id/click
method: POST
content_type: application/json
接口调用:
关闭浏览器
Selenium 脚本:
driver.quit()
源码分析:
接口信息:
url: /session/$sessionId
method: DELETE
content_type: application/json
接口调用:
最后:下方这份完整的自动化测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】
)