当前位置: 首页 > news >正文

新来测试用一手Postman实现UI自动化测试拿下了大厂面试官

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

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

请求参数:

 

接口调用:

 

点击元素

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

接口调用:

 postman_collection.json

总结:

现阶段很多人都在说软件测试太内卷了,工作太难找了,竞争太激烈了。那么如何在这样的现状下使得自己更具有竞争力呢?笔者认为大家需要迅速学习软件测试的硬技能,提升自己的业务能力,早日摆脱初中级测试的Title,虽然测试人员众多,但是高级的软件测试人员还是很稀缺,有很多人挂着高级测试的头衔却还在干着初中级测试的活。在掌握这些硬技能的同时,软技能的培养同样重要,沟通能力、自主学习能力越来越被企业看重。

如果不想被这个时代淘汰,就要做好持续学习的准备。下方给大家准备了全套的软件测试,自动化测试全套教程。

【需要的可以点击下方官方推广小卡片扫码备注000免费领取】

 

 

相关文章:

  • 实时即未来,大数据项目车联网之驾驶行程采样实时分析【十七】
  • python进阶——人工智能视觉识别
  • 一文解决Opencv四大经典算子——sobel算子、scharr算子、laplacian算子、canny算子
  • 灰色预测模型一文详解+Python实例代码
  • Spring泛型处理源码详解,Java泛型处理
  • String类——Java中常见的类(模拟登录案例练习)
  • 从C语言的使用转换到C++(下篇)——刷题、竞赛篇
  • 【C++修行之路】C++入门之深剖变量
  • 【自然语言处理】情感分析(五):基于 BERT 实现
  • C++STL入门:string的基本使用小笔记
  • 【CANoe示例分析】EthernetCanGW_Test_CN
  • 下班前几分钟,我彻底弄懂了并查集
  • 【GIS前沿】什么是新型基础测绘、内容、产品体系、特征?
  • linux性能优化-进程状态
  • 多线程之CAS
  • Create React App 使用
  • crontab执行失败的多种原因
  • ECMAScript6(0):ES6简明参考手册
  • github指令
  • gulp 教程
  • HTML-表单
  • JavaScript实现分页效果
  • java中具有继承关系的类及其对象初始化顺序
  • js ES6 求数组的交集,并集,还有差集
  • ViewService——一种保证客户端与服务端同步的方法
  • Web标准制定过程
  • 理解在java “”i=i++;”所发生的事情
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 实现简单的正则表达式引擎
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • kubernetes资源对象--ingress
  • 大数据全解:定义、价值及挑战
  • 第二十章:异步和文件I/O.(二十三)
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • (3)(3.5) 遥测无线电区域条例
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (HAL库版)freeRTOS移植STMF103
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (三)终结任务
  • (十八)SpringBoot之发送QQ邮件
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)EOS中账户、钱包和密钥的关系
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net6+aspose.words导出word并转pdf
  • .Net中ListT 泛型转成DataTable、DataSet
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [Effective C++读书笔记]0012_复制对象时勿忘其每一部分
  • [fsevents@^2.1.2] optional install error: Package require os(darwin) not compatible with your platfo
  • [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)
  • [HackMyVM]靶场Crossbow
  • [HDOJ4911]Inversion