问题

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

  • 精确。自动化测试用例应该测试一件事,只有一件事。与测试用例无关的应用程序的某个部分中的错误不应导致测试用例失败。
  • 独立。自动化测试用例不应该受测试套件中任何其他测试用例影响。
  • 快速。这不需要太多的解释。自动化测试用例套件运行得越快,它就越有用。

这些标准在Selenium测试套件中可能特别具有挑战性。原因在于,Selenium的UI自动化测试通常涉及可能包括注册,登录,某些导航,表单提交或与网站的其他交互的设置。只有在做完这些事情之后,你才可以在网站的某些方面做出断言。但是这样就会引入一些和原本的测试用例无关的错误导致自动化脚本运行失败。解决方法
现在很多新的网站的后端都采用REST API。如果能够在脚本中通过访问REST API来完成一些基础的必要操作,而不是在UI上,这样将提高我们测试的执行效率。
REST API基于HTTP协议,这是基本上支持整个互联网的协议。 几乎所有现代编程语言都有可用于发出HTTP请求的库,因此,我们可以将调用REST API的支持添加到几乎任何测试套件中。实例
很多测试中都会遇到新建账号的问题。需要测试新的账号在登陆之后的行为。如果能够使用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}@http://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

end

end

$driver = Selenium::WebDriver.for :firefox

user = 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总结
这里只是给出了一个如何把API访问和UI自动化结合的思路。在这个思路的引导下,可以对UI自动化测试进行很多扩展,例如校验界面数据元素的数据和API中数据的一致性等等。
软件测试、接口测试、自动化测试、面试经验交流。感兴趣可以加我们的软件测试技术交流群,有不定期的发放免费的资料链接,还有同行一起技术交流。

element ui input视图没刷新_[Selenium自动化测试实战] 如何在UI自动化测试中加入REST API的操作...相关推荐

  1. element ui input视图没刷新_聊聊前端 UI 组件:组件体系

    本文是文章系列「聊聊前端 UI 组件」的第三篇. 在本系列的上篇文章<聊聊前端 UI 组件:组件特征>中,通过从关注点分离的角度进行前端 UI 组件的构成分析,并以较为抽象的视角对 UI ...

  2. mobx中跟新了数据视图没变化_【第1781期】MobX 简明教程

    前言 SEEConf,2020年1月4号杭州见,C位抢票见文章末尾.今日早读文章由腾讯@whinc投稿分享. 正文从这开始-- 导读:MobX 是一个优秀的响应式状态管理库,在流行的状态管理库 Red ...

  3. 在java中添加源_关于Java:如何在Android Studio中添加链接的源文件夹?

    在Eclipse中,我可以将源文件夹作为"链接的源文件夹"添加到我的android项目中. 如何在Android Studio中实现同一目的? 或者是否可以添加外部文件夹以构建gr ...

  4. input内容右对齐_向右打方向倒库过程中,如何判断后车距离?光线较暗车库倒库技巧...

    现在进入泉城广场的地下停车场,根据上方导向箭头提示,车位和出口都在右转方向. 现在大家从画面中可能觉得光线还可以,其实这个停车场光线比较差,从后视镜中可以看到相对真实的光线状态. 很多朋友曾经问过我, ...

  5. 很想去的地方面试没过_我们研究了学生在技术面试中的表现。 他们上学的地方没关系。...

    很想去的地方面试没过 by Sam Jordan 通过山姆·乔丹 我们研究了学生在技术面试中的表现. 他们上学的地方没关系. (We studied how students performed in ...

  6. 不做ui了 转行做什么_哪些人适合转行学UI设计?

    每年都有很多不同行业的小伙伴转行学习UI设计,也有一些在观望的小伙伴会问老师,什么行业比较适合转行来学UI设计?誉财教育结合了多年的设计教育经验,为下面几个行业的同学一点小建议,希望能帮到大家. 一. ...

  7. 小程序中input标签没有反应_解决微信小程序弹出层中input无法聚焦的问题

    此处使用的是vant框架 解决聚焦问题 这里遇到的问题是,在点击搜索框后,设置了弹起的弹出层中van-search的foucs值为true 但是没有起到聚焦效果 原因在于弹出框带有一个动画效果,需要在 ...

  8. vue中如何返回历史路由_产品分析丨VUE如何在Vlog大潮中稳步发展

    作者:Ansley 职景学员 我是从17年年底开始使用VUE的,当时它仅仅是个视频剪辑工具,最出色的始终还是颇具质感的滤镜,朋友圈很多人都在用它拍视频.去年年底,它以脱胎换骨的3.0版本,搭上Vlog ...

  9. python processpoolexector 释放内存_关于python:如何在multiprocessing.queue中从Process中释放内存?...

    我有一个程序试图预测一周内发送的每封电子邮件的电子邮件转换(因此,通常是7封). 输出是7个不同的文件,每个客户的预测得分. 串行运行这些可能需要8个小时,因此我尝试使用multiprocessing ...

最新文章

  1. 用python画烟花-过年了,用Python放一场浪漫烟花秀!
  2. AXI4-Lite协议详解
  3. Python会干掉Java, 一统天下?
  4. 域控制器的强制卸载,Active Directory系列之十四
  5. 吸烟打电话检测、车道线识别等,2020中国华录杯·数据湖算法大赛火热进行中!...
  6. win10安装CUDA和cuDNN详解
  7. 学习使用常用的windbg命令(u、dt、ln、x)
  8. 自制有保鲜功能的金字塔
  9. DS3400 RDAC for RedHat5.3安装文档-sunleii@DC
  10. 初识 Powershell 5.0 class
  11. MATLAB矩阵合并
  12. 做电脑技术员几年的心得
  13. Mac读写NTFS硬盘
  14. 上海车展6大热门车型自动驾驶配置梳理
  15. 1167_ARM CORTEX-M0了解
  16. 项目管理之道——软件能力成熟度模型五大等级详解!
  17. linux防火墙 3306端口,Linux配置防火墙 开启80端口、3306端口的方法
  18. 在线副业教程之 01 如何通过编码赚钱的 6 种方法
  19. mysql limit会扫描全表_为什么用了limit还会进行全表扫描?
  20. 【Day7.1】张掖七彩丹霞看日出

热门文章

  1. python指定范围内加法代码解析
  2. Spark资源调度分配
  3. laravel 判断字符串包含_laravel 字符串操作大全
  4. 指标波动多大才算是异常?
  5. 文本数据增强+NER
  6. 数据结构中基本查找算法总结
  7. Android官方开发文档Training系列课程中文版:分享文件之请求一个共享文件
  8. DGL实现同构/异构图卷积模型
  9. Tensorflow实现LSTM详解
  10. [ACL2020]Generalizing Natural Language Analysis through Span-relation Representations