ultraedit26 运行的是试用模式_如何并行运行你的自动化测试?

09a940072c2eb1e8edcc8c83739738a7.gif点击上方蓝色字关注我们~

41071b039ad63bb9fee23ab7f435b852.png

    在自动化测试过程中的某些时刻,你将遇到一个共同的问题,那就是:需要花费很长时间去执行大量的UI自动化测试用例。最为有效地加速用例执行的方式就是并行地运行自动化测试。不幸地是,使各个自动化测试用例并行地执行并非一件容易的事情。典型地,线程安全就没有融入到自动化测试中去。线程安全可以确保代码编写完成后,程序可以运行并操作各种数据结构而不产生意想不到的结果。

  为了测试可以并行地运行,需要满足一些强制性的要求。这些要求同我们的一些客户每天用来帮助运行五万条自动化测试用例所需的条件相同。四个强制要求如下:

1.测试必须是原子的

  你的自动化测试用例应该形成一个单一的不能简化的单元。这就意味着你的测试必须极其集中并且每个测试用例只做一件事。一个单独的自动化测试用例应该不能测试端到端的功能。

  在我的团队中使用的一个比较好的经验办法就是:自动化验收测试在你本地资源上运行的时间不能超过一分钟,实际上当然是运行越快越好,但是也不要太着急、慢慢来,可以逐步改进运行时间。如果你的测试用例运行时间超过一分钟,那将是很危险的事。

  有一个例子,在这个存储库中可用的非原子测试(NAT)。本篇文章将自始至终地引用此测试库中的内容。

0eb82c247fb8dd09c72c2a786414151a.png

  原子测试可以快速失败

  为什么要使用原子测试?首先,它让你尽早地快速地失败。这就意味着你将得到及其快速的有针对性的反馈。如果你想检查一个特征功能的状态,原子测试只会花费你不到一分钟的时间就能让你拿到结果。

  原子测试可以降低薄片行为

  第二,写原子测试用例减少了薄片,因为它降低了测试过程中可能出现的断点数量。薄片是自动化测试领域的一个概念,它是指测试展示出一种无效的测试结果,例如原本失败的用例结果显示通过了或者原本通过的用例结果显示失败了。一个没有薄片的自动化测试是一个可以正确传达系统状态的测试---无论被测系统是否正常运行。

  原子测试考虑到了更好的测试

  原子测试第三点好处就是一旦一个原子用例失败了,它不会阻止你进行其他功能的测试。比如,一个普通测试在第25行失败了,假如你不手动执行测试用例去验证剩余的功能话,那么在25行之后的功能点都不会被测试到。所造成的结果就是,如果你正进行大范围的测试,由于有一些特性没有被测试到,实际上就降低了测试覆盖率。

  下图是一个从上面的测试集中摘取的原子测试用例,如果这个用例失败了,你仍然可以接着测试其他功能点,这样整个测试过程不会中断,自然也不会影响到测试覆盖率。

63a9216e59739bd43a84995d1ef91cf8.png

2.测试必须是自主的

  一个自主的自动化测试是指测试本身并不依赖其他测试的结果。一种常见的反面模式就是将所有的用例连接到一起执行以避免重复执行一些测试步骤,这种反面模式是从加速执行测试集演变而来的。

  例如,你要先执行登陆测试、再执行搜索测试、最后执行结算测试。为了进行结算场景的测试,所有的测试项目都应该按照正确的顺序进行。

  这对于平行化来说就是一个很大的挑战了,因为它意味着你的测试永远不可能失序的进行。如果不按顺序执行第一步到第三步,那测试结果将失---但是这种失败并不是因为应用系统里有BUG,而是设计逻辑本该如此,是因为结算的场景里需要一个已登录的用户,而具体测试时由于打乱了三步的顺序致使登陆操作是失败的。

3.正确管理你的测试数据

  测试数据的管理对完成并行测试来说是非常关键的。管理测试数据最为有效的方式就是使用实时数据。这就意味着你在测试过程中有很多种方式来创造和销毁数据。一个RESTFUL风格的API接口可以实现这一功能,并且这是最优的方法。

  遗憾的是:在我的WEB应用里没有现成的RESTFUL风格的API可供使用。因此,我和开发人员一起合作,容许JavaScript注入来控制应用程序的状态和数据。这样我们测试团队就可以解决如何在不需要事先登陆、搜索商品、添加商品到购物车的情况下进行购物车结算了。

  通过适当的测试数据管理,我可以直接打开购物车页面。结果就是我可以旁路掉/忽略掉登陆页面和搜索商品页面。如下图所示我注入了一个用户和一个商品到购物车里:

5e2f9803445bcb53c4ac4f338248f5a5.png

  现在我就可以使用应有程序的UI界面来完成结算过程并且测试这一功能是否OK,如下图:

74ac40172e6bed5307608061fbb598bc.png

  最后,这种方式能够让你有能力旁路掉/忽略掉应用系统中任何与测试无关的UI界面。在你使用API或者JavaScript操作应用程序的状态后,你就可以使用任意的UI自动化工具执行相关的测试步骤。

4.不能使用静态关键字

  这里有一个一般性的经验法则:在你的自动化代码里不要使用静态关键字。这既是最简单的需要遵循的规则,同时也是最危险的。

  在面向对象的程序设计语言中一个静态关键字会要求程序在代码运行期间内给一个变量分配一个单独的内存空间,这就意味代码运行期间这个空间的内容不能改变。任何使用静态变量的程序都将信息存储在单独的内存空间里。

  一个单一的错位的静态关键字实例会毁掉你所有并行测试的希望。也许这个经验法则(指“不要使用静态关键字”)会有很多例外情况,但是确保安全总比意外发生后懊悔不已好得多。

  例如,在你的浏览器中创建一个静态的浏览器驱动关键字,当你尝试并行地运行所有测试用例时,这些用例都将尝试使用唯一的浏览器驱动。就会造成一种局面:一个用例正在准备键入账号密码时,另一个用例尝试打开一个不同的页面等等,结果这些用例会将浏览器驱动实例带到不同的方向上去,最终造成各种稀奇古怪的错误。 

使测试又快又准确

  自动化需要快速地进行才能发挥它的作用,同时并行测试是快速执行完测试用例的一种最好的方式。但是并行运行自动化测试的时候,你需要原子的、非依赖性的用例,并且这些用例里不能包含任何静态关键字,并且你需要正确地管理测试数据集。

24fbcb74b3a56509502c9ab7b5057b9a.gif推荐阅读

点击阅读☞“肉瘾”女孩从软件测试工程师到主管的成长感悟

点击阅读☞2019年前5大Java自动化测试框架

点击阅读☞使用TestCafe进行Web自动化测试

点击阅读☞自动化测试和手工测试结果汇总小实践

点击阅读☞2019年你不得不知的测试自动化新趋势……

d090239425ebf03681c64d9845cd9aed.png

68e89b988e326280c0b026959ec6246d.giffd480e3f4fa28ad3c8109f716c585248.gif3d8bca0662d55ee7523e58298e55ee57.png爱我请给我好看!fd480e3f4fa28ad3c8109f716c585248.gif

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

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

相关文章

在统计学中参数的含义是指_期刊论文中科研统计学缺陷分析及解决路径

中华医学科研管理杂志, 2018,31(5) 张策, 陈淑良, 王晓桐, 等摘要目的从期刊论文统计方法缺陷方面进行分析,并提出解决方案。方法资料采用中国知网文献数据库中的"基础科学"及"医药卫生科技"数据库的全部文献作为抽样源,限定时间为…

【转载】在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库

在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库 SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象)封装了Microsoft SQL Server数据库中的对象。SQLDMO是Microsoft SQL Server中企业管理器所使用的应用程序接口,所以它可以执行很多…

雨棚板弹性法计算简图_钢结构工程量计算、报价要点

第一部分图纸一、图纸:根据图纸目录,清理核对图纸数量,检查是否有遗漏。二、建筑施工图1. 设计总说明(1) 建筑面积、结构形式、柱距、跨度、结构布置情况;(2) 工程量计算的范围&…

ubuntu制作usb启动盘

准备: u盘iso镜像文件--ubuntu-12.04.2-desktop-amd64.iso烧盘软件--unetbootin-linux-583步骤: 格式化u盘 查看u盘信息 #mount/dev/sdb1 on /media/KINGSTON type vfat (rw,nosuid,nodev,uid1000,gid1000,shortnamemixed,dmask0077,utf81,showexec,flus…

十分钟理解线性代数的本质_数学对于编程来说到底有多重要?来看看编程大佬眼里的线性代数!...

本文提出了一种观点:从应用的角度,我们可以把线性代数视为一门特定领域的程序语言。我们一起来看看!文章有点偏理论讨论,可能比较枯燥,对于一名程序员,你如果看下去,你将会有不一样的收获&#…

Linux Socket学习--套接口的类型和协议

我们首先来说一下PF_INET和AF_INET,虽然标准提倡在指定demain参数的时候,优先使用PF_INET,但是大量已经编写的c代码遵循旧的协议。目前情况是AF_UNIXPF_UNIX,AF_INETPF_INET。但是将来是不是这样不好说啊。 不同于socketpari函数的…

8266串口调试助手_200行Python代码实现串口调试助手(2) 界面构建

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是串口调试工具pzh-py-com诞生之界面构建。一个软件的UI界面是非常重要的,这是软件与用户交互的接口,软件功能即使再强大,但如果没有清晰的UI界面&#…

权限访问控制设计

一、前言 之前的博客一直都还没写到框架的实现及权限系统,今天开始写我的权限系统,我以前做过的项目基本上都有权限管理这个模块,但各个系统都会有一些不太一样,有些简单点,有些稍微复杂一点,一句话&#x…

卸载失败_Windows 10可能的新功能-自动卸载失败的补丁更新

Windows 10作为Windows最新报告,微软正在向Windows 10添加一项新的恢复功能,该功能旨在自动检测更新安装后启动失败的时间。在用户不必做任何事情的情况下,将卸载违规更新,这个操作可以引导系统再次运行。根据在线发布的支持文档&…

iOS开发CoreAnimation解读之三——几种常用Layer的使用解析

iOS开发CoreAnimation解读之三——几种常用Layer的使用解析 一、CAEmitterLayer CAEmitterLayer是CoreAnimation框架中的粒子发射层,在以前的一片博客中有详细的介绍和范例,这里不再重复,地址如下: 粒子效果的应用和火焰范例&…

中文格式_常见中文编码格式

中文编码主要有以下四种:GB2312简体中文编码,一个汉字占用2个字节,在大陆是主要的编码方式。当文章/网页中包含繁体中文、日文、韩文等时,这些内容可能无法被正确编码。BIG5繁体中文编码,主要在台湾地区使用。GBK支持简…

SQLite数据库常用语句及MAC上的SQLite可视化工具MeasSQLlite使用

SQLite数据库常用语句及MAC上的SQLite可视化工具MeasSQLlite使用 一、引言 在移动开发中,通常会用到一些小型的数据库进行数据管理。SQLite是一款十分小巧便捷的数据库,在iOS开发中,原生框架也对其有很好的支持。 二、SQLite常用语句 数据库…

SQL Server之字符串函数

以下所有例子均Studnet表为例: 计算字符串长度len()用来计算字符串的长度 select sname ,len(sname) from student字符串转换为大、小写lower() 用来将一个字符串转换为小写,upper() 用来将一个字符串转换为大写 select lower(I …

Android通用流行框架大全

Android通用流行框架大全 1. 缓存 名称描述DiskLruCacheJava实现基于LRU的磁盘缓存2.图片加载 名称描述Android Universal Image Loader一个强大的加载,缓存,展示图片的库Picasso一个强大的图片下载与缓存的库Fresco一个用于管理图像和他们使用的内存的库…

Windows Shell 编程 第六章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987951】...

第六章 快捷方式的最短路径 Windows Shell允许存储任何对象的引用到系统范围内的任何地点。例如,当你从一个文件夹拖拽可执行程序到另一个文件夹时,鼠标自动改变形状给出除拷贝和移动文件之外的第三种选择。 除非你确定,否则可执行文件是不能…

ShowMsg函数妙用

为什么80%的码农都做不了架构师?>>> 在对DedeCMS做2次开发的时候可能提示信息会经常用到,为了方便在此将ShowMsg方法提取出来,使用方法:ShowMsg(“提示信息”,“进行跳转的页面URL”&#xff0…

二进制文件比较

一 工具 使用Araxis Merge类似的工具来比较两个文件夹是否相同,比较两个二进制文件是否相同。1) 比较两个文件夹是否相同,只要有文件的名字不同就认为两个文件夹不相同2) 文件修改为新的名字后,二进制比较时仍与原文件…

土压力图怎么画_电气系统图怎么画?

电气系统图,又称为电气系统控制图,是通过使用国家规定的图形符号和文字代号代表各种电器、电机及元件,根据生产机械的要求和各种电器的原理,用线条代表导线连接起来,用于展示供电线路与各设备工作原理及其相互关系的一…

考勤助手——数据库3.0版本

基于数据库1.0及2.0版本,我们将细节的地方逐一进行讨论,设计出了数据库3.0版本。 根据ER图,进行基本表的设计如下: 转载于:https://www.cnblogs.com/GG-TEN/p/5471019.html

幽灵交易策略_幽灵交易者策略(附源代码)

NO1 . 前言正如幽灵交易者的名字,该策略的核心思路是,在真实下单交易之前,先虚拟出一个交易,如果这个虚拟的交易是亏损的,那么下一次才启动真实的交易。NO2 . 策略简介该策略思路源自于交易者的观察,交易者…