Postman 实现 UI 自动化测试

news/2024/12/29 8:21:47/

看到这篇文章的标题,是不是有小伙伴会感到惊讶呢?

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%免费】

)


http://www.ppmy.cn/news/29304.html

相关文章

深入浅出 MyBatis 的一级、二级缓存机制

一、MyBatis 缓存 缓存就是内存中的数据,常常来自对数据库查询结果的保存。使用缓存,我们可以避免频繁与数据库进行交互,从而提高响应速度。 MyBatis 也提供了对缓存的支持,分为一级缓存和二级缓存,来看下下面这张图…

【苹果内购支付】关于uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑

前言 Hello!又是很长时间没有写博客了,因为最近又开始从事新项目,也是第一次接触关于uniapp开发原生IOS应用的项目,在这里做一些关于我在项目中使用苹果内购支付所实现的方式以及要注意的事项,希望能给正在做uniapp开…

创新型中小企业认定评定标准

一、公告条件评价得分达到 60 分以上(其中创新能力指标得分不低于 20 分、成长性指标及专业化指标得分均不低于 15 分),或满足下列条件之一:(一)近三年内获得过国家级、省级科技奖励。(二&#…

ESP-C3入门14. 实现基本的web server

ESP-C3入门14. 实现基本的web server一、ESP32 IDF创建WEB SERVER的流程1. 配置web服务器2. 注册 URI处理器3. 实现 URI处理器函数4. 处理HTTP请求5. 处理web socket连接6. 注册 URI 处理函数7. 启动HTTP服务器8. 发送响应9. 关闭 http 服务二、本要主要使用API的说明1. httpd_…

《代码整洁之道》笔记

1章:专业人士要有专业人士素养,要有责任心,编写代码尽可能完善没有bug,有bug也要勇于承担。坚持学习,坚持练习,保证自己的专业技能。谦虚,相互学习,与顾客达成一致2章:说…

【算法笔记】前缀和与差分

前缀和与差分 算法是解决问题的方法与步骤。 在看一个算法是否优秀时,我们一般都要考虑一个算法的时间复杂度和空间复杂度。 现在随着空间越来越大,时间复杂度成为了一个算法的重要指标,那么如何估计一个算法的时间复杂度呢? …

【JavaSE】对象的比较

哈喽,大家好!我是保护小周ღ,本期为大家带来的是Java中自定义类型(对象)的三种比较方式,equals 方法, Comparable 泛型接口, Comparator 泛型接口 。在日常编程中,我们常常会需要比较的问题&…

发现新大陆——原来软件开发根本不需要会编码(看我10分钟应用上线)

目录 一、前言 二、官网基础功能及搭建 三、体验过程 01、连接数据源 02、设计表单 03、流程设计 04、图表呈现 05、组织架构设置 五、效率评价 六、小结 一、前言 众所周知,每家公司在发展过程中都需要构建大量的内部系统, 如运营使用的用户…