背景

最近手头上需要新接一个UI测试的工作,抽空研究了一下,发现现在网上所有流传的方式都是用Selenium来执行,这个本身我觉得没什么毛病,但是测试思想还是太陈旧了,依然是使用findElementById等方法来执行,这种情况下,前端的维护成本高,稳定性差等问题都非常明显,因此有了著名的测试三角形。

历史

说明这个问题的时候,需要了解整个前端技术的发展过程。

  • Web1.0时代

那个时候压根没有JS什么事,基本上都是静态页面,数据交互以表单的形式为主。

  • Web2.0时代

出现了Ajax技术,整个前端的发展有了一个质的飞跃,异步加载的机制让前端衍生了非常多的场景,js逐渐进入大家的视线,产生了神器jQuery,整个前端的交互变得丰富多彩。

  • Web3.0时代

出现了Angular,React,Vue等数据驱动的框架,前端开始向后端看齐。

测试现状

按照现有的测试方式,都是使用Selenium进行测试,而Selenium的产生时间,是在Web2.0时代,那个时代,大部分网页的编写方式都是靠jQuery来处理,而jQuery的开发思维是操作DOM结构,因此使用Selenium来测试非常的方便,因为开发要实现某个元素的变化,就必须用jQuery的选择器来选中这个元素,然后再进行对应的操作,比如下面的代码:

$('#id').on('click', function({alert('hello')}))

那么测试的时候用Selenium来操作也没有问题,因为开发要选中某个元素,开发的时候必定会留下方便选中的方式,比如写一个id,或者某些其他的标记,那么这些标记测试也是可以用的。

但是近几年来,用Selenium来测试为什么越来越麻烦和困难了呢?原因就是开发已经不使用jQuery来开发了,他们已经变为数据驱动了,不需要留标记来让代码选中元素了,那么自然的,使用Selenium来测试,就有缺陷了,选中元素变得特别的困难,而且通过Xpath来选择特别不稳定,再加上前端的元素变动频繁,导致UI测试的成本特别大。

而基于数据驱动开发则与以前的开发方式完全是两个维度。数据驱动开发的时候只需要关心数据,比如有一个表格,那么只要在html中定义好表格的元素,数据定一个一个空列表就行了,需要加载的数据的时候,只要赋值给列表,前端的框架会自动把数据渲染成表格,比如这样的代码:

<template><el-table
      :data="tableData"style="width: 100%"><el-table-column
        prop="date"label="日期"width="180"></el-table-column><el-table-column
        prop="name"label="姓名"width="180"></el-table-column><el-table-column
        prop="address"label="地址"></el-table-column></el-table></template><script>export default {data() {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1517 弄'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀区金沙江路 1519 弄'}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄'}]}}}</script>

要改变表格里面的内容,只需要修改tableData的数据就行,而不需要选中表格的某一行某一列的某个值进行替换。

改善方法

既然前端框架已经让开发者可以忽略html的结构,只需要玩转数据。那么我们测试也应该跟着开发的框架走,只关心数据即可,其他的渲染交给框架处理,我们校验数据。

举个例子,业务场景是这样的:点击一个按钮,程序会向后台请求数据,请求数据成功后显示一个提示框,提示框中显示后台返回的数据,如果请求失败,则提示请求失败。我们的测试方式则是关注提示框的选项的显示属性是否为true,提示框的类型是否为successerror,提示文案是否正确即可,无需关注页面的展示,因为那是框架做的事。

测试代码

下面是我自己写的一个简单的测试代码,前端框架用的是基于Vue.jsElement

<!DOCTYPE html>
<html><head><title>标题</title><meta charset="UTF-8"><script src="https://unpkg.com/vue/dist/vue.js"></script><link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"><script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head><body><div id="test"><el-alert :title=wenan :type=alert_style v-show=alert></el-alert><el-input v-model="input" placeholder="请输入内容"></el-input><el-button @click='clicktest'>成功按钮</el-button><el-button @click='clickfail'>失败按钮</el-button></div><script type="text/javascript">var app = new Vue({el: '#test',data: {input: '',wenan: '123',alert_style: "",alert: false},methods: {clicktest: function() {this.alert = truethis.wenan = 'succeed'this.alert_style = 'success'},clickfail: function() {this.alert = truethis.wenan = 'failed'this.alert_style = 'error'}}})</script>
</body></html>

下面是对应的测试代码,只是一个非常简单的示例:

# ecoding=utf-8
# Author: Sven_Weng
# Email : sven_weng@wengyb.com
# Web   : http://wybblog.applinzi.com
import time
from selenium import webdriveroption = webdriver.ChromeOptions()
option.add_argument('disable-infobars')
browser = webdriver.Chrome(chrome_options=option)
browser.get("file:///Users/SvenWeng/Desktop/demo.html")
js = 'app.input = "ceshiwenan"'
js1 = 'app.clicktest()'
js2 = 'return app.alert_style'
js3 = 'return app.alert'
js4 = 'return app.wenan'
time.sleep(1)
browser.execute_script(js)
time.sleep(1)
browser.execute_script(js1)
time.sleep(1)
rs2 = browser.execute_script(js2)
time.sleep(1)
rs3 = browser.execute_script(js3)
time.sleep(1)
rs4 = browser.execute_script(js4)
time.sleep(1)
print rs2, rs3, rs4
assert rs2 == 'success'
assert rs3 == True
assert rs4 == 'succeed'
browser.quit()

最后

这是我个人一个大胆的想法,还没有具体应用到实际的项目中,所以我只称他为方法论,写出来的目的也就是希望大家在测试的时候,不要被已有的技术或者框架局限了,测试代码的结构和思维方式应该跟开发同步,这样才能最大效率的进行测试。

这个想法不仅仅应用在WEB端,移动端的H5页面如果也是基于数据驱动开发的框架写的话,依然可以用这个思想进行测试。

测试方法论——数据驱动测试相关推荐

  1. 【CyberSecurityLearning 51】渗透测试方法论+渗透测试流程

    目录 渗透测试方法论 渗透测试(penetration testing,pentest) 渗透测试种类 * 黑盒测试 * 白盒测试 * 脆弱性评估与渗透测试 安全测试方法论 * 开放式web 应用程序 ...

  2. 网站测试自动化系统—数据驱动测试

    在前面的文章网站测试自动化系统-基于Selenium和VSTT当中,我简单介绍了使用selenium录制测试步骤,以及优化生成的C#代码,对代码使用面向对象的编程理念进行一些封装,以便规避网站界面更动 ...

  3. TestComplete使用关键字测试的数据驱动测试(上)

    TestComplete是一款具有开放灵活架构的自动化功能测试平台,可以方便快捷的在桌面.网络.移动应用中创建.维护和执行自动化测试.数据驱动测试的主要思想是将测试命令与用于测试的数据分开,并使用不同 ...

  4. 好代码是管出来的——.Net Core集成测试与数据驱动测试

    软件的单元测试关注是的软件最小可执行单元是否能够正常执行,但是软件是由一个个最小执行单元组成的集合体,单元与单元之间存在着种种依赖或联系,所以在软件开发时仅仅确保最小单元的正确往往是不够的,为了保证软 ...

  5. 什么是数据驱动测试?学习创建框架

    数据驱动测试 数据驱动测试是一种软件测试方法,其中测试数据以表或电子表格格式存储.数据驱动的测试允许测试人员输入单个测试脚本,该脚本可以对表中的所有测试数据执行测试,并期望测试输出在同一表中.也称为表 ...

  6. 网络安全学习(渗透测试方法论,web架构安全分析,信息收集)

    目录 一.渗透测试方法论 渗透测试种类 *黑盒测试 *白盒测试 *脆弱性评估与渗透测试 二.安全测试方法论 *开放式 Web 应用程序安全项目(Open Web Aplication Security ...

  7. 转载:渗透测试方法论(阅读)

    https://www.cnblogs.com/Sumarua/p/13521405.html @ 目录 第2章 渗透测试方法论 2.1 渗透测试的种类 2.1.1 黑盒测试 2.1.2 白盒测试 2 ...

  8. 如何快速掌握DDT数据驱动测试?

    如何快速掌握DDT数据驱动测试? 目录:导读 前言 实施数据驱动步骤 数据驱动测试环境准备 测试步骤 数据存储 数据存在当前脚本中 json文件读取测试数据进行数据驱动测试 从xml读取数据进行数据驱 ...

  9. python数据驱动读取用例_Python Selenium 之数据驱动测试

    数据驱动模式的测试好处相比普通模式的测试就显而易见了吧!使用数据驱动的模式,可以根据业务分解测试数据,只需定义变量,使用外部或者自定义的数据使其参数化,从而避免了使用之前测试脚本中固定的数据.可以将测 ...

  10. 【Web自动化测试——代码篇十二】自动化测试模型——数据驱动测试和关键字驱动测试...

    自动化测试模型可以看作自动化测试框架与工具设计的思想.随着自动化测试技术的发展,演化为以下几种模型: 线性测试 模块化驱动侧式 数据驱动测试 关键字驱动测试 数据驱动测试 前一篇所讲的模块化驱动测试能 ...

最新文章

  1. python mainloop函数_python中的mainloop()函数
  2. 429 too many requests错误出现在wordpress后台更新及官网的5种解决方法
  3. [置顶] OAuth工作原理随想——让你的系统提供的服务更加安全
  4. adams2016安装教程
  5. python join函数_一行 Python 代码能实现这么多丧心病狂的功能?
  6. 闪屏,default
  7. of_property_read_string 剖析~
  8. oracle exec编译失效,编译oracle失效的函数、存储过程、视图等
  9. hdu 3641 数论 二分求符合条件的最小值数学杂题
  10. 如何使用apiPOST进行模拟发送get、post、delete、put请求(支持文件上传)
  11. 3 年后端、4 年前端,聊聊用户认证鉴权
  12. springboot 全局捕获异常
  13. System V 共享内存区
  14. 数据可视化的定义及使用注意
  15. minist数据集下载,numpy可直接读取的npy格式
  16. 老干部活动中心计算机台数,老干部活动中心设计方案
  17. Studio 3T 使用教程 mogodb
  18. mysql全称量词_数据库基础lt;三)标准语言SQL-一团网
  19. HTML-表单table
  20. 一周总结——2020.5.31

热门文章

  1. 一个非教条式的TDD例子
  2. html页面中的快捷键设置
  3. Fastlane使用说明
  4. 远程移动测试平台对比分析
  5. 乔布斯全新采访曝光:吐槽微软,回应争议,还要把Mac扔出窗外,然而…
  6. python中的f的用法_python中f是什么
  7. 天梯赛java题解 L1-087 机工士姆斯塔迪奥分数 20
  8. 山东大学项目实训审计系统(七)数据可视化
  9. 基于GitHub的敏捷学习方法之道与术
  10. win10删除多余账户_Win10系统如何删除账户?Win10系统删除账户的方法