如何在UI自动化测试中加入REST API的操作

news2024/11/19 15:13:01

1、问题

当我们描述一个“好的自动化测试用例”时,经常出现标准是:

  • 精确

    自动化测试用例应该测试一件事,只有一件事。与测试用例无关的应用程序的某个部分中的错误不应导致测试用例失败。

  • 独立

    自动化测试用例不应该受测试套件中任何其他测试用例影响。

  • 快速

    这不需要太多的解释。自动化测试用例套件运行得越快,它就越有用。

这些标准在Selenium测试套件中可能特别具有挑战性。原因在于,Selenium的UI自动化测试通常涉及可能包括注册,登录,某些导航,表单提交或与网站的其他交互的设置。只有在做完这些事情之后,你才可以在网站的某些方面做出断言。但是这样就会引入一些和原本的测试用例无关的错误导致自动化脚本运行失败。

2、解决方法

现在很多新的网站的后端都采用REST API。如果能够在脚本中通过访问REST API来完成一些基础的必要操作,而不是在UI上,这样将提高我们测试的执行效率

REST API基于HTTP协议,这是基本上支持整个互联网的协议。几乎所有现代编程语言都有可用于发出HTTP请求的库,因此,我们可以将调用REST API的支持添加到几乎任何测试套件中。

3、实例

很多测试中都会遇到新建账号的问题。需要测试新的账号在登陆之后的行为。如果能够使用REST API来新建用户的话,就可以大大的节省填写新建账号的表单的时间

这里假设一个虚拟的REST API

POST http://api.myfakeapp.com/v1/create-user

通过POST方法可以新建用户。Body里面需要填充的JSON数据如下:

{

  'username':   'example-username',
  'password':   'abcd1234',
  'email':      'bob@example.com',
  'first_name': 'bob',
  'last_name':  'example'
}

下面是代码实现

require 'rest-client'require 'json'require 'securerandom'class RestApiInterface

 @headers = {
   'content-type' => 'application/json',
   'user-agent' => 'Rest Api Helper',
 }

 def post_to_api url, post_body_obj
   json_body = JSON.generate(post_body_obj)
   response = RestClient.post url, json_body, @headers
 end

 def create_test_user
   # Step 1: Build the user parameters randomly
   random_test_user = {
     'username'   => random_string,
     'password'   => random_string,
     'email'      => "#{random_string}@testing.com",
     'first_name' => 'test',
     'last_name'  => 'user',
   }

   # Step 2: Execute the API call
   response = post_to_api "http://api.myfakeapp.com/v1/create-user", random_test_user    # Step 3: Ensure the api call returned a success code
   if response.code != '200'
     raise 'User creation failed'
   end

   # Final Step: Return the user object so we can use it
   response.body['user']['data']
 end

 def random_string
   # This is an easy way to get a good randomized string
   SecureRandom.hex  endend$driver = Selenium::WebDriver.for :firefoxuser = RestApiInterface.new.create_test_user$driver.get 'http://myfakeapp.com'$driver.find_element(:css, 'input[name="username"]').send_keys @user['username']$driver.find_element(:css, 'input[name="password"]').send_keys @user['password']$driver.find_element(:css, 'button[name="login"]').click
puts $driver.find_element(:css, '#user_id').text

4、总结

这里只是给出了一个如何把API访问和UI自动化结合的思路。在这个思路的引导下,可以对UI自动化测试进行很多扩展,例如校验界面数据元素的数据和API中数据的一致性等等。


学习资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源免费分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183557.html

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

相关文章

SVN服务端使用教程

前言 正式进入公司项目后,我们需要和同事进行协同开发,此时代码管理工具是必不可少的,目前常用的两款工具是:SVN 和 Git。本人因为要搭建一个自动化测试的框架,对SVN和Git都不熟悉,在调研后选择了操作更为…

组合选择器

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>组合选择器</title> <style type"text/css"> /* 多个选择器组合在一起中间用逗号","隔开就形成了组合选择器&…

销售过程管理系统对企业的好处是什么

当线索转化成销售机会后&#xff0c;要不断地跟进才有可能成交。但是这个过程时间跨度长&#xff0c;涉及人员、要素过多&#xff0c;销售过程中经常会遇到很多的问题。不少企业使用CRM销售管理系统把控销售过程。下面来说说&#xff0c;为什么企业需要销售过程管理系统? 销售…

【Mysql】X档案:Mysql 服务和Navicat客户端的安装与使用(超详细步骤)

Mysql 服务和Navicat客户端的安装与使用&#xff08;超详细步骤&#xff09;一、Mysql 安装配置1、下载安装2、配置环境变量3、设置服务自动启动二、Mysql Cli 使用1、连接 Mysql2、创建数据库3、创建数据表4、数据表操作5、删除数据库对象三、Navicat 安装1、下载2、安装3、FR…

Android 实现隐私政策提示弹窗(完整版)

android studio版本&#xff1a;2021.2.1例程名称&#xff1a;pravicydialog功能&#xff1a;1、启动app后弹窗隐私协议2、屏蔽返回键3、再次启动不再显示隐私协议。本例程的绝大部分代码来自下面链接&#xff0c;因为本人改了一些&#xff0c;增加了一些功能&#xff0c;所以不…

【计算机网络】S1P1 概念、功能、组成、分类

计算机网络概念功能组成分类概念 计算机网络&#xff0c;是互连的、自治的计算机集合。 计算机网络&#xff0c;是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 分散的&#xf…

UOS桌面系统使用启动盘找回数据盘文件

使用启动盘找回数据盘文件1、格式化优盘2、准备一个UOS系统启动优盘3、进入UOS PE系统4、查看硬盘信息5、查看挂载信息6、查看路径信息7、找到Desktop目录8、安装器文件9、挂在数据盘10、查看是否挂载成功11、找到重要文件12、打包重要文件13、可以看到打好的tar.gz包大小为64M…

【学Vue就跟玩一样】如何正确快速使用Vue中的插槽和配置代理

一&#xff0c;插槽1.什么是插槽让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于父组件——>子组件。插槽分为三种&#xff0c;分别是默认插槽、具名插槽、作用域插槽&#xff0c;下面分别列出了如何使用这三种插槽1.1默认插槽啥是默认插槽呢&am…

Java:基于注解的Spring使用【AOP容器】

目录 第十五章 AOP前奏15.1 代理模式15.2 为什么需要代理【程序中】15.3 手动实现动态代理环境搭建15.4 手动实现动态代理关键步骤第十六章 Spring中AOP【重点】16.1 AspectJ框架【AOP框架】16.2 使用AspectJ步骤&#xff08;入门&#xff09;16.3 Spring中AOP概述16.4 Spring中…

帮助粉丝用青泥学术大数据推荐毕业论文选题(围绕 教育信息化2.0、疫情期间线上学习质量问题、Steam教育、智慧教育等突破点来抉择)

需求 本科论文水平&#xff0c;青泥学术可以起到一定帮助。 说明 我也只是读了一个学期的硕士而已&#xff0c;谈不上多高的指点&#xff0c;可能比一些人更努力一些。 所以我的学术造诣不算太高&#xff0c;不敢盲目建议。 但是君子性非异也&#xff0c;善假于物也。 我借…

软件版本的命名规则

最近在完善实验室项目的软件设计&#xff0c;涉及功能的完善和 Bug 的修复&#xff0c;为了方便管理&#xff0c;更新软件版本号是不错的方法&#xff0c;故总结了下软件版本的命名规范。 软件版本号一般由四部分组成&#xff0c;格式如&#xff1a;主版本号.子版本号.修订版本…

3、数据的录入与保存

目录 一、定义变量 1.定义变量名 2.定义变量类型 3.宽度定义 4.小数位数定义 5.变量标签定义 6.变量值标签的定义 7.缺失值的定义 8.列的定义 9.对齐的定义 10.测量的定义 11.变量角色的定义 二、数据录入 三、数据保存 四、案例录入 本文内容之前简单介绍过&am…

Codeforces Round #847 (Div. 3) A-F 冲蓝名场

想上蓝名&#xff0c;赛前1414分&#xff0c;目标蓝名。 updateupdateupdate赛后排名575757。 A. Polycarp and the Day of Pi 题意 给你一个数字判断该数字是否和圆周率的前30位匹配。 思路 发现样例有一个长度为30为的数&#xff0c;ctrlcvctrl c vctrlcv一下&#xff0c;暴…

Elasticsearc最新版8.6.1集群安装教程

一、为何要搭建 Elasticsearch 集群凡事都要讲究个为什么。在搭建集群之前&#xff0c;我们首先先问一句&#xff0c;为什么我们需要搭建集群&#xff1f;它有什么优势呢&#xff1f;&#xff08;1&#xff09;高可用性 Elasticsearch 作为一个搜索引擎&#xff0c;我们对它的基…

微信小程序——用户安全等级

有小伙伴私信说有没有微信小程序相关系列文章&#xff0c;后续会持续输出有关微信小程序相关文档接口 前言 前面几篇我们讲到了微信的文本内容、音视频、图片等内容的安全识别问题&#xff0c;这样会涉及到一个用户的安全等级的判定问题&#xff0c;怎么来识别预判用户的等级…

管理事实(RH294)

事实简介Ansible事实是指Ansible在受管主机上自动检测到的变量事实中含有与主机相关的信息&#xff0c;可以像play中的常规变量&#xff0c;条件&#xff0c;循环等其他语句那样使用受管主机收集的事实有以下部分主机名称内核版本网络接口IP地址操作系统版本环境变量CPU数量可用…

Nacos安装配置教程

Nacos安装配置教程_其他_大数据知识库 Nacos注册中心 Nacos是阿里巴巴的产品&#xff0c;现在是SpringCloud中的一个组件。相比Eureka功能更加丰富&#xff0c;在国内受欢迎程度较高。 官方入门手册 Nacos 快速开始这个快速开始手册是帮忙您快速在您的电脑上&#xff0c;下载…

Python:使用Selenium和requests爬取文章

01需求描述 在微信公众号上面&#xff0c;其实有很多很不错的文章&#xff0c;但是微信官方给我提供的方式只有几种&#xff1a;点赞、收藏、在看。 或者有时候&#xff0c;有人通过转发到自己的朋友圈的方式&#xff0c;做文章的留存。 因此&#xff0c;爬取与存储微信公众…

PHPCMSv9.6.0前端任意文件上传漏洞分析

一、路径 漏洞分析&#xff1a;/index.php?mmember&cindex&aregister&siteid1 前台注册页面处 路径&#xff1a; /phpcms/modules/member/index.php注册处抓包&#xff1a; POST /phpcms/install_package/index.php?mmember&cindex&aregister&site…

JVM是如何解决跨代引用问题的?

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 不知道自己的无知&#xff0c;乃是双倍的无知。——柏拉图 文章目录跨代引用问题记忆集卡表写屏障写屏障的伪共享问题跨代引用问题 跨代引用是指新生代中存在对老年代对象的引用&#xff0c;或者老年代中存在…