大家好,我是Kisel,我的工作是为英雄联盟客户端更新做测试,构建和部署团队。在这里,我们要谈论的是项目的自动化测试。

如果您曾经使用过当前的联盟客户端(“AIR“客户端),您可能已经遇到了一些奇怪的错误。即使那些问题是罕见的,你仍然可能会想到“wtf Rito,这怎么可能存在,“你这么做是完全有道理的——因为体验不符合我们想提供给玩家的质量。之前一篇关于在客户端更新架构的文章提到了我们在发展原始客户端时使用AIR的决定——它支持丰富的多媒体效果,但是不可能在HTML中使用。然而,遗憾的是,AIR客户端自动化测试覆盖面有限。开发和发布更新是一个缓慢而危险的过程,因为要想变更一些内容就必须要手动测试——这是一个耗时和不连贯的进程。理想情况下,我们会让机器测试枯燥的,重复的东西,让人类做更有创意的测试工作(在吉姆最近的文章中有更多的相关内容)。

联盟客户端更新的核心目标之一是让简单粗暴的测试自动化,那么我们就可以给玩家提供他们应该得到的优质体验。客户端更新的架构包括一个基于谷歌浏览器的前端和一个C++的后端,这些为进行交流提供了REST api和websockets 。此体系结构为我们提供了两个方便的自动化接口:对于前端来说,我们可以使用ChromeDriver,这是行业标准Selenium WebDriver协议的具体实施。对于后端来说,我们使用开源的HTTP请求和websocket库。这些都是地球上最常见的自动化接口,所以我们没有必要实现自定义的自动化测试驱动程序。我们已经实现了功能测试和运行使用Cucumber.js。

这些都是具有丰富文档的常见工具,所以,在本文中,我将关注我们的流程和渠道,而不是我们的工具。我希望这将有助于任何想要接近一个类似于自动化挑战的人。

联盟客户更新验证系统架构

文化

成功的测试自动化在很大程度上是一种文化和心理学。技术在其中只是起到次要的作用。

无论我们有多少技术,我们仍然需要鼓励正确的人类行为,致使自动化测试成功。每一次测试失败,人们必须正视它并判断这个失败是否是正在测试项目中一个真正的失败、还是一个行为不端的编写差的测试,或是某种其他环境或基础设施问题,比如网络故障。

传统的自动化测试策略是先有一个有质量保证的团队为开发和运行测试来维护负责。这种方法有一定的优点,你最终会得到完全拥有测试系统的主题专家。它通常适合长发布周期的项目,如果你的团队一周之内对一个新的构建只测试一次,那么即时反馈并不是那么重要。

此外,这对专业的测试工程师有好处,工程师们能花时间设计复杂的测试用例,充分锻炼每个构建。我让我们的艺术家来想象这个过程:

然而,这也有明显的缺点。当开发团队不运行测试,或者只关注结果时,他们就会倾向于采用“各管一摊”的心态。开发者自己失败的代码学习反馈循环往往是缓慢的,这并不是可接受的。联盟客户端更新动作极快,从早上到晚上,卖QQ账号基本的开发环境每15分钟会接受一个新的构建。以那样的速度,即时反馈是至关重要的。即使测试本身迅速执行,我们也不能等开发人员等待测试工程来解释结果。团队效率是我们的核心目标之一,所以传统的自动化测试就不会为我们工作。我们的方法是这样的:

我们的信条是使测试和自动化成为整个团队最关心的问题。每个开发人员都有参与其中。我们的标准项目新员工培训过程包括详细的如何编写文档和运行测试,我们会让开发人员弄清楚,我们期望他们完全拥有自己代码的单元测试、功能测试、性能测试和负载测试。测试、构建和部署团队专注于建立和维护测试工具和基础设施,但这个团队并不自己编写测试——这是个别特殊团队的责任。

我们现在能达到一个高度,联盟客户端更新测试失败时团队能快速反应和调查。然而,很难达到这一点。学习如何应对片状测试由始至终都是难题。

原来的工作流程是这样的:

1、注意到一个测试是偶然性失败;

2、只是偶尔失败,所以它可能不如其他坏掉的东西紧要,可以忽略它几个小时或几天;

3、最终开始调查,如果测试确实是错了就检查修复。

结果就是:团队开始假设,任何失败都可能只是一个片状测试,所有的结果将被忽略。如果团队在测试系统时没有信心,该系统就是一文不值的。如果你的汽车检查引擎灯随机打开时,你可能会开始忽略它。为了防止这种类型的习惯,我们目前的工作流程是立即调查失败的测试,以确定该测试已经跑偏还是我们发现一个合法的bug。

将被破坏的测试移动到我们阶段测试套件,是以尽可能高地保持完整测试套件的信噪比。为了测试,阶段套件在正常的构建渠道之外运行。新的或重构的测试被放在某一阶段几天,确保在我们将其放到全套之前它们是健康的,在那里他们可以通知开发人员失败和block部署。

我们不断强化通过面对面讨论的方式、发布会议公告的方式、或团队间邮件的方式来保持我们的测试和构建健康的重要性。关于bug或测试的任何讨论都是一个宣传自动化福音的很好的机会(礼貌地)。每一个团队都会定期地进入“必须停船”的心态,然后开始不重视测试的重要性,这是很自然的,有时会为测试要求感到沮丧。当然,我们必须小心地找到没有提醒和太多提醒之间的适当平衡,在这两种极端的情况下,没有人能得到消息。当有远程团队参与其中时这可能需要特别注意。

这些文化的态度并不是放之四海而皆准的。他们必须仔细定制以满足各种项目和涉及的人员。最重要的部分是没什么是理所当然的,不做任何假设。总有改进的余地——我们时常留意系统是如何顺利工作的,并适当作出调整。

揭秘《英雄联盟》客户端更新运行自动化测试相关推荐

  1. 揭秘英雄联盟的数据服务器

    揭秘英雄联盟的数据服务器 Hey,大家好!我是 Bill "LtRandolph" Clark,一名英雄联盟的游戏工程师.许多 Rioter 工程师关注大量的内容需要直接发送给玩家 ...

  2. 英雄联盟客户端美化(一)客户端载入图美化

    养成好习惯,点个赞再走 有问题,欢迎私信.评论,我看到都会回复的 文章目录 LOL美化客户端载入界面 正常客户端载入界面 LeagueClient\Plugins\rcp-fe-lol-loading ...

  3. [译]揭秘英雄联盟的自动化测试

    原文:AUTOMATED TESTING FOR LEAGUE OF LEGENDS 作者:Jim Merrill 译者:杰微刊兼职译者缪晨 大家好,我Jim 'Anodoin' Merrill,我的 ...

  4. git.exe 启动 慢_拳头:今年将修复英雄联盟客户端 启动时间降到19秒

    <英雄联盟>新版客户端自上线以来虽然官方进行过几次修复,但仍然存在不少的BUG,客户端的启动速度和加载速度非常慢.拳头官方今天在官网发布了一篇公告,称未来六个月将会对lol客户端进行修复和 ...

  5. 英雄联盟离线更新方法

    方法一: 去英雄联盟官网上下载离线包安装 方法二: 如果有其他电脑已经是最新版本,则有两种方法. 1.全部拷贝 将    英雄联盟LCU   文件夹的所有内容拷贝到电脑上 进入 TCLS  文件夹,双 ...

  6. 【福利!】英雄联盟国服更新补丁速度极慢的解决方法

    各位撸友肯定常常遇到每当英雄联盟更新好几百兆的补丁时 本来拥有非常快下载速度的宽带,此时却给不了力. 事实上,这都是腾讯在捣乱,详细怎么捣乱,这个就不属于我们讨论范围 我们仅仅须要知道,怎样更高速的更 ...

  7. 英雄联盟客户端可以打开知道选择英雄,但是进入游戏时一直客户端无响应

    麻蛋,为了考驾照请了个假,考完回来想玩一玩撸啊撸结果,客户端可以打开,英雄可以选择,但是游戏客户端一直就无响应,进不去游戏, 具体表现如下 经过多方排查,游戏重装,网络测试,开关加速器等等操作,最后发 ...

  8. 【前端html页面练习】还原英雄联盟客户端

    对本文内容的说明: 由于该练习文章其实是笔者刚学习完 Vue 就来写的小项目,所以该文章的实现方式在现在看来,是十分复杂且繁琐的,而且代码写的也十分混乱,页面无法实现兼容性,使用了 HTML.CSS. ...

  9. linux运行国服英雄联盟,从UKUI 3.0桌面截图当中得知,Linux能运行腾讯游戏英雄联盟了...

    你没有看错,腾讯游戏英雄联盟在Linux操作系统中也能正常运行了,这一消息是从优麒麟UKUI 3.0桌面环境截图当中得知的,请看下图: 有网友评论称:在UKUI 3.0的商店中发现了腾讯游戏英雄联盟的 ...

最新文章

  1. CodeGen准备存储库
  2. Tab Bar Animation
  3. 综合布线的12大热点技术
  4. Python 常见的17个错误分析
  5. Symbian学习笔记(4)——在GUI应用中使用图像
  6. 05_通过sql操作表中的数据_插入修改删除查询
  7. 【开源项目】保存YUV420数据到本地
  8. 像程序员一样思考_如何像程序员一样思考-解决问题的经验教训
  9. 依据经纬度解析商圈scala实现
  10. 【转载文章】原 DOS命令学习(从入门到精通)_____附加自己学习笔记
  11. (PTA)数据结构(作业)5、堆栈
  12. 胆囊结石与什么因素有关
  13. 深圳python培训比较好的机构-深圳python培训哪家好
  14. フェーン現象 (Foehn Phenomena)
  15. 十六进制七段LED显示译码器 静态显示
  16. java使用grok解析日志文件
  17. 华为OJ——DNA序列
  18. 内容安全的主要场景有哪些呢?
  19. 齐博cms最新SQL注入网站漏洞 可远程执行代码提权
  20. 汽车控制器软件EMC技术(一)

热门文章

  1. 机器学习基础-一元线性回归-01
  2. ajax请求后台表格数据,商品后台表格数据的展现方式
  3. mysql web日志_mysql日志管理
  4. Docker+Redis镜像的原理以及部署安装(超详解附截图)
  5. [视频教程] ubuntu系统下安装最新版PHP7.3.X环境
  6. 深入解析MySQL分区(Partition)功能
  7. 2019-3-15 模拟赛 T1
  8. python web开发-flask中response,cookies,session对象使用详解
  9. [Leetcode Week13]Palindrome Partitioning
  10. “GIS讲堂”第二课内容的公布