点击上方蓝色字关注我们~

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

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

1.测试必须是原子的

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

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

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

  原子测试可以快速失败

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

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

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

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

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

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

2.测试必须是自主的

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

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

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

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

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

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

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

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

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

4.不能使用静态关键字

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

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

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

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

使测试又快又准确

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

推荐阅读

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

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

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

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

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

爱我请给我好看!

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

  1. ultraedit 运行的是试用模式_单元测试 —— 前后端分离开发模式下后端质量的保证...

    概述 在今天, 前后端分离已经是首选的一个开发模式.这对于后端团队来说其实是一个好消息,减轻任务并且更专注.在测试方面,就更加依赖于单元测试对于API以及后端业务逻辑的较验.当然单元测试并非在前后端分 ...

  2. 服务器运行bat文件闪退,win10运行bat文件一闪而过怎么办_网站服务器运行维护

    c盘无法格式化的原因是什么_网站服务器运行维护 c盘无法格式化的原因:因为C盘是Windows系统所在的磁盘,在Windows系统下要直接格式化C盘肯定是不行的,想格式化C盘可以用Windows的系统 ...

  3. ultraedit 运行的是试用模式_Wings面向企业级的单元测试用例自动编码引擎

    点击上方"蓝字"关注我们吧! 2020年7月30日,星云测试在TiD2020质量竞争力大会正式发布最新产品"Wings-企业级单元用例自动编码引擎".这是国际首 ...

  4. 运行返回签名不正确_不正确运行废气治理RTO设备容易引起爆炸,注意事项有哪些?...

    与传统的废气处理设备相比,RTO具有处理效率高.运行成本低等优点,目前RTO蓄热式燃烧分解技术已经广泛用于大风量.低浓度的废气治理项目当中,在国内化工行业的废气治理中占据主导地位.但是RTO设备质量不 ...

  5. notepad运行python不能显示输出_用Notepad++运行python怎么什么都没有呢

    展开全部 简答: 是的. 详解: 本来就是要在cmd中运行Python程序.e5a48de588b662616964757a686964616f31333332636363 (当然,你要非要额外继承一 ...

  6. 笔记本玩逆水寒服务器未响应,逆水寒游戏运行时电脑崩溃怎么办_逆水寒运行游戏是笔记本崩溃问题解决办法介绍_游戏吧...

    近日有玩家表示在逆水寒运行时,部分笔记本会出现崩溃的现象.那么逆水寒游戏运行时电脑崩溃是怎么造成的,又该怎么解决呢?下面游戏吧小编就为大家带来运行游戏时电脑崩溃问题的解决建议. 运行游戏时电脑崩溃问题 ...

  7. centos mysql权限不够_centos执行文件时权限不够怎么解决_网站服务器运行维护,centos...

    centos怎么实现开机进入命令行模式_网站服务器运行维护 centos实现开机进入命令行模式的方法是:1.查看系统当前的运行级别:2.执行命令[systemctl set-default multi ...

  8. 服务器删除系统痕迹,win10怎么清除使用痕迹_网站服务器运行维护

    win10系统变量path被误删了怎么办_网站服务器运行维护 win10系统变量path被误删了的解决方法:1.右键"此电脑",选择属性:2.在打开的窗口中选择"高级系统 ...

  9. 一劳永逸解决开始菜单运行总以管理员模式进行(cmd总是管理员模式)

    目的 正常来说使用 win + R 调出运行窗口的时候,总是不以管理员模式运行的,还要去找文件或者搜索选择以管理员方式运行,这对很多操作十分不方便. 我们的目的就是保证运行窗口执行的命令总是管理员方式 ...

最新文章

  1. 如何使用TensorFlow中的Dataset API
  2. android 父控件的背景_android控件拖动,移动、解决父布局重绘时控件回到原点
  3. MIGO时没发料不允许入库
  4. Spring Boot配置文件加载顺序
  5. windows下使用svn命令行
  6. 串口读写flash_老司机带路:LPC82x 存储器及读写保护 手到擒来!
  7. [C++] pair
  8. IOS基础学习日志(七)利用dispatch_once创建单例及使用
  9. JMeter压力测试教程(超详细小白版)
  10. html登录页面验证码代码怎么写,js实现登录验证码
  11. 好玩Spring之TransactionSynchronization相关的几个类
  12. 前端实习工作找不到,怎么增长实战经验
  13. [转]ModSecurity for Apache 1.8.7 用户手册
  14. 解决uni-app微信小程序底部input输入框,键盘弹起时页面整体上移问题
  15. Android连接多个usb,Android实现USB连接
  16. 高中计算机应用基础试题及答案,春学期职业高中计算机应用基础试卷
  17. 隔夜利率再现过山车 央行或加码回笼力度
  18. 经验分享:使用Python3处理excel-案例1
  19. java体育管理系统6,基于JAVA的体育场馆预约管理系统的设计与实现.docx
  20. 哪款蓝牙耳机音质好?佩戴舒适的蓝牙耳机测评

热门文章

  1. windows 添加开始菜单
  2. webstorm卡顿问题
  3. Android之 Fragment
  4. 栈(顺序存储)C++模板实现
  5. 寻路基本工具类定义 AIDefine.cpp
  6. 分享45套2011年和2012年的高质量免费网站模板
  7. [转]C++的坑真的多吗?
  8. 获取Dataset前几条数据的两种方法
  9. 初始Zookeeper
  10. vue --- vue中的几个钩子属性