Postman 实现 UI 自动化测试

news2024/9/28 15:28:33

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

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.coloradmin.cn/o/381651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EPICS motor模块

一、概要 1) 在EPICS motor模块中的是什么并且它为了什么? 2) 支持的电机控制器和模型 3)电机记录特性 4)配置示例 5)反馈 6) 重试 7) 回程差矫正 8)发行 二、术…

Linux上的校验和验证

校验和(checksum)程序用来从文件中生成相对较小的唯一密钥。我们可以重新计算该密钥,用以检查文件是否发生改变。修改文件可能是有意为之(添加新用户会改变密码文件),也可能是无意而为(从CD-ROM…

Java:Java仍然处于领先地位?

没有多少编程语言能够自吹自擂并持续流行20多年,但Java就是其中之一。Java应用程序不仅局限于web和移动开发,而且给大数据和人工智能留下了深刻的印象。不用多说,让我们讨论一下Java流行的几个原因!!1.实用性根据JamesGosling的说法&#xff…

QT+OpenGL 面剔除和帧缓冲

QTOpenGL 面剔除和帧缓冲 本篇完整工程见gitee:QtOpenGL 对应点的tag,由turbolove提供技术支持,您可以关注博主或者私信博主 面剔除 OpenGL能够检查所有面向(Front Facing)观察者的面,并且渲染他们,而丢…

springboot logback日志+异常+阿里云日志 aliyun-log-logback-appender

前言最近有个新项目用了,springboot3.0,以前项目日志保存得方式是阿里云云服务自动读取日志文件,最近项目部署得方式可能有变化,所以新项目用logbackaliyun-log-logback-appender得方式保存到阿里云日志服务。用logback得原因主要…

《OpenGL宝典》--统一变量

统一变量 [layout (location 0)] uniform float f 1.0f;若设置layout,则不需要使用glGetUniformLocation来获取统一变量的位置 使用glUniform*传递值,glUniformMatrix*()设置矩阵统一变量。 glUseProgram(myShader); glUniform1f(0,45.2f);//0为loc…

思迅软锁安装配置说明

思迅软锁安装配置说明 一、软锁安装、申请及配置流程 1.软件安装环境要求 2.软件安装配置流程 步骤1: 在平台下载软锁程序并安装。在安装了总部数据库的服务器上,运行“思迅软锁服务.exe”程序,按照指引进行安装,安装完成后将在电脑的桌面上…

微服务之Gateway服务网关

🏠个人主页:阿杰的博客 💪个人简介:大家好,我是阿杰,一个正在努力让自己变得更好的男人👨 目前状况🎉:24届毕业生,奋斗在找实习的路上🌟 &#x1…

「亲测」0成本考证填报个税纳税额减免3600

「亲测」0成本考证填报个税纳税额减免3600 今天开始2022综合所得的年度汇算就开始办理了,刚刚步入工作的同学,对个税的填报有些苦恼,好像除了房租就没有能减税的政策了。 别急别急,其实个⼈所得税⾥⾯包含⼀个叫“专项附加扣除”的…

C++ 认识和了解C++

1.在使用C语言写代码的时候开头要用到的是&#xff1a; #include<iostream> using namespace std;不可以写成这样&#xff1a; #include iostream.h&#xff08;1&#xff09;iostream是输入输出流类&#xff0c; istream输入流类 cin >> ostream输出流类 cout &…

40系笔记本(可不联网激活)深度学习生产力(环境配置和简单训练测试)

40系笔记本深度学习、转码生产力&#xff08;环境配置和简单训练测试&#xff09;这里写自定义目录标题深度学习环境准备CUDA、CUDNN版本问题torch版本问题其他软件版本的安装命令训练测试代码地址关于Linux还是Windows的问题结果博主首发购买了枪神7超竞4080的版本&#xff0c…

git开发流程

分支介绍 dev&#xff1a;开发环境&#xff0c;从feature去mr test: 测试环境&#xff0c;从feature去mr pre&#xff1a; 预生产环境&#xff0c;从master去mr&#xff0c;为了验证master代码 master: 生产环境&#xff0c;从feature去mr feature&#xff1a; 开发分支----小…

4种方法教你如何隐藏电脑磁盘分区?

磁盘分区是电脑的重要组成部分&#xff0c;我们能够在电脑中保存众多数据&#xff0c;就离不开它。那么你知道该如何隐藏磁盘分区吗&#xff1f;下面小编就教你4个方法隐藏电脑磁盘分区。方法一&#xff1a;使用磁盘管理隐藏硬盘分区1、按下“WinR”键&#xff0c;输入“diskmg…

Python3-元组

Python3 元组 Python 的元组与列表类似&#xff0c;不同之处在于元组的元素不能修改。 元组使用小括号 ( )&#xff0c;列表使用方括号 [ ]。 元组创建很简单&#xff0c;只需要在括号中添加元素&#xff0c;并使用逗号隔开即可。 >>> tup1 (Google, Runoob, 19…

4-1 SpringCloud快速开发入门:RestTemplate类详细解读

RestTemplate类详细解读 RestTemplate 的 GET 请求 Get 请求可以有两种方式&#xff1a; 第一种&#xff1a;getForEntity 该方法返回一个 ResponseEntity对象&#xff0c;ResponseEntity是 Spring 对 HTTP 请求响应的封装&#xff0c;包括了几个重要的元素&#xff0c;比如响…

Python基础篇(十五)-- Pygame游戏编程

1 初识Pygame Pygame是一个开源的Python模块&#xff0c;专门用于多媒体应用&#xff08;如电子游戏&#xff09;的开发&#xff0c;其中包含对图像、声音、视频、事件、碰撞等的支持。Pygame建立在SDL的基础上&#xff0c;SDL是一套跨平台的多媒体开发库&#xff0c;用C语言实…

39万字完整版智能矿山项目建设整体解决方案

本资料来源网络&#xff0c;仅做知识分享&#xff0c;请勿商用。完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 1.1 总体技术要求 1.1.1 核心业务架构 智能矿山业务架构是在统一的标准与规范及安全运维保障体系下&#xff0c;按分层设计模式&#xff0c;分为设备层、…

QML鼠标事件

QML中常用的事件有&#xff1a; 鼠标事件键盘事件拖拽事件定时器MouseArea&#xff08;鼠标区域&#xff09; MouseArea是一个不可见的项目&#xff0c;同、通常用来和一个可见的项目配合使用来为其提供鼠标处理。鼠标处理的逻辑可以包含在MouseArea项目中 常用的属性&#xff…

【设计模式】原型模式与建造者模式

原型模式 原型模式是指通过原型实例指定创建对象的种类&#xff0c;然后通过拷贝的方式创建新的对象。属于创建型模式 原型模式的核心在于拷贝原型对象&#xff0c;主要用于对对象的复制。当你需要通过一大段get/set方法去构建对象的时候&#xff0c;就可以考虑使用原型模式了…

手牵手教Docker部署Springboot+vue ,全过程十分详细,轻松完成项目部署(简单,高效,通用)

手把手教Docker部署Springbootvue &#xff0c;详细全过程&#xff0c;轻松完成项目部署&#xff08;简单&#xff0c;高效&#xff09; 上线前准备 腾讯云的服务器&#xff0c;服务器安装好docker 和docker-compose 最好事先了解技术 nginxdocker-compose 整体编排 后端部…