测试方案
1. End-to-End Testing(端到端测试)
端到端(E2E)测试的主要目的是通过模拟真实的用户场景,验证被测系统及其组件的集成性和数据完整性,从最终用户的体验进行测试。
不需要知道业务代码,只需要模拟用户在真实环境的操作。
1.1 目前方案介绍
cypress
使用业务:官网下载业务
运行流程:本地代码commit后,自动执行cypress run打开浏览器,按照测试用例模拟用户操作,测试出现错误会自动截图/录屏。
测试代码和业务代码在同一个库。需要本地提供mock数据。在发布部署前进行测试。
matman
matman(测试框架)+mockstar(mock服务器)+whistle(代理)
使用业务:
- 词典管理-列表
- 寒暄库
- 单轮问答列表、创建
- 基础设置
运行流程:启动mock服务器,执行测试命令打开浏览器,将请求接口代理到mock服务器,按照测试用例模拟用户操作。自动化测试每天在蓝盾上运行,每次运行会通过企业微信通知测试通过率。
测试代码和业务代码在同一个库。需要提供mock数据。在发布部署前进行测试。
CodeceptJS
使用业务:
- 词典管理-列表
- 寒暄库
- 单轮问答列表、创建
- 基础设置
运行流程:业务代码发布后,执行测试命令打开浏览器,按照用户操作先登录账户中心,然后执行测试用例,测试出现错误会自动截图。
测试代码和业务代码不在同一个库,不需要接触到业务代码,在真实环境中执行测试。在发布部署后进行测试。
1.2. cypress、matman、CodeceptJS对比
CodeceptJS
https://codecept.io/
CodeceptJS是一个针对Nodejs,开源的前端自动化测试框架,它对其他运行测试工具做了一层封装,提供简洁的api。
cypress
https://www.cypress.io/
Cypress 是为现代网络构建的下一代前端测试工具。对在浏览器中运行的任何东西进行快速、简单和可靠的测试。
matman
matman 是一个可用于做 web 端对端测试(E2E,End-to-End Testing)的框架,十分适合 web 前端开发人员来编写端对端测试。
用 puppeteer
做浏览器驱动,用 jQuery
来写爬虫脚本,用 Jest
或者 Mocha
来做断言判断
1.3 方案对比
功能 | CodeceptJS | cypress | matman |
---|---|---|---|
上手难度 | 对非前端用户友好、api简单非常容易上手、all in one | api容易上手、代码编写有一定难度、all in one | 不易上手、需要自己集成多个插件 |
学习成本 | 只需要学习CodeceptJS语法、少量js基础 | cypress语法、需要有js基础、Mocha | puppeteer、jQuery、Mocha/Jest |
代码理解 | 从用户的角度编写验收测试。使测试可读且易于遵循。 | 基于js/MochaJS,代码逻辑简单 | 基于js/断言库chai,实现比较复杂 |
UI测试 | 支持 | 支持 | 不支持 |
开源 | 开源 | 开源,Cypress Dashboard服务收费 | 开源 |
重试能力 | 支持 | 支持 | 不支持 |
多浏览器控制 | 支持 | 不支持 | ? |
跨浏览器支持 | 支持 | 支持 | 不支持,基于chrome |
多标签控制 | 支持 | 不支持 | ? |
iFrame | 支持 | 不支持 | 不支持 |
幻灯片截图 | 支持 | 不支持 | 不支持 |
代码自动完成 | 支持 | 支持 | 支持 |
生成测试报告 | 支持 | 支持 | 支持 |
持续集成 | 支持 | 支持 | 支持 |
网络流量控制 | 不支持 | 支持 | 不支持 |
时间旅行 | 不支持 | 支持 | 不支持 |
失败自动截图 | 支持 | 支持 | 支持 |
录屏 | 支持 | 支持 | 默认不支持 |
1.4. 推荐方案
使用测试目前的CodeceptJS方案
1.5 开发流程
首先开发同学完成业务代码开发并部署到oa环境后。在提测阶段,测试同学根据业务需求在oa环境手动进行功能测试与编写测试用例同时进行。完成后,在灰度、正式环境部署业务代码后也执行测试用例。后期将执行测试用例集成在流水线上每几天运行生成运行报告,企微通知。
1.6 注意的点
优点
- 业务代码库和测试用例代码库分离,减少代码量,提高开发效率
- 开发和测试只需要关注自己领域
缺点
- 测试用例的编写最好的时间点是提测阶段,否则dom定位不一定正确
- 需求变更后,测试同学需要重新修改测试用例,维护成本大
- 业务代码库和测试用例代码库分离,执行测试用例后,输出结果没代码覆盖率
- 业务代码部署前执行自动化测试成本太高,最好在部署后,主要起到监控作用
难点
流水线上如何持续集成测试用例,定时自动执行并企微通知。
2. 自动化测试再研究
2.1. 目前业界方案
UI自动化的难点来源于元素识别的困难、执行的不一致行以及不稳定的产品和环境。
业界正在做的方向有几个方面:
1、自动化脚本编写的低代码化:适合无计算机学科基础的人来使用,包括有界面元素的智能识别(无需通过Inspector来确认,内部隐含了这些识别因素),实现无脚本语言的用例组织形式(如通过json语言来描述操作步骤和流程,而用户仅需要组织预定义好的步骤流程),或者仅定义用例场景和该场景下的操作(场景的切换由后端程序自动控制),testin、阿里、网易和我司都有类似的产品或工具在使用。
Testin:AI在自动化测试中的创新机会点:自然语言脚本、OCR识别、以图找图
文章:https://baijiahao.baidu.com/s?id=1654671532811739200&wfr=spider&for=pc
阿里:SmartX:解决场景分类等问题
文章:https://developer.aliyun.com/article/747741
2、无脚本语言的自动测试:它比低代码更进一步,无需编写任何脚本,自动启动程序,然后自己执行操作,由monkey概念衍生而来,但是比monkey更智能,会通过ai模型训练(包括轮廓和文字)识别元素,在随机执行过程中去规划下一次的执行步骤,并通过一定的技术手段去掉重复执行的路径,避免进入局部死循环。在业界也有不少的工具,国内如字节跳动(fastbot)和携程公司。
Trip.com 智能自动化探索测试
文章:https://tech.ctrip.com/articles/a_qa/3680/
Fastbot:行进中的智能 Monkey
文章:https://www.toutiao.com/i6877076132886217227
3、局内游戏的自动化:这个专项应用做得很多,比如王者荣耀的智能机器人,可以获得比较高的段位,还有国外的星际争霸2的智能机器人的例子。这种技术的未来在于如何快速的得到训练模型并应用于某个项目。
2.2 涉及到的工具介绍
iTestin在线录制
自动化录制工具,基于类自然语言的输入进行自动化用例的描述,通过加入AI强化学习和NLP语义解析能力,完成录制,生成NLP脚本。
操作流程:在线录制,输入中文,浏览器同时执行相应的中文操作,录制完成,生成NLP脚本。后面可以通过NLP脚本进行回放。
Smatch
Smatch,基于类自然语言的输入进行自动化用例的描述,基于机器视觉的能力和底层引擎驱动完成用例的执行。
Smartbot
基于深度学习和强化学习的智能深度遍历测试框架,自动识别场景,构建测试意图,从而达到对业务的高度覆盖,高效多端执行,并借助异常检测和定位的能力,以完成缺陷和问题的快速自动发现。
UiAutomator
是谷歌推出的,用于UI自动化测试的工具,也就是模拟普通的手工测试,点击每个控件元素看看输出的结果是否符合预期。
可以通过集成UiAutomator来达到深度遍历测试的目的。
通过Uiautomator API获取页面上所有元素,然后遍历执行每种操作,自动化探索获取到所有可执行路径。
深度遍历算法制定探索策略。策略如下:
- 页面事件随机触发,触发过的事件不再触发
- 若跳转到新页面,则优先触发新页面探索
- 新页面事件触发完毕返回上一个页面
- 新页面事件未触发完毕返回上一个页面,则重新回到新页面。
xpath是一种结合父元素、元素类型、元素id以及元素坐标的表示方法,能够精准定位一个元素。
自动化探索提供的其实是一种基础服务能力,为性能测试、Crash检测或者页面内容检测等不同的测试目的提供测试基础。
Fastbot
fastbot是字节团队基于monkey的二次开发的app稳定性测试工具,目前已经开源,此工具有比较深入的算法探索,目前已经更新了多个版本,相对稳定的支持了移动端app、H5页面的自动化遍历,支持定制测试、当发生crash、anr时会有比较全的log可导出供分析。
我们将测试任务转换为对 App 进行遍历搜索和构建有向有环图模型的搜索任务。执行动作保存在服务端,客户端获取动作后执行得到状态。
2.3 工具对比及推荐
iTestin | Smatch | Smartbot | Uiautomator | fastbot | |
---|---|---|---|---|---|
是否开源 | 不开源 | 不开源 | 不开源 | 不开源 | 开源 |
学习成本 | 低 | 高 | 低 | ||
使用成本 | 成熟的产品,收费 | 无法使用 | 无法使用 | 基础移动端操作api,免费 | 免费 |
录制 | 支持 | 不支持 | 不支持 | 不支持 | 不支持 |
回放 | 支持 | 不支持 | 不支持 | 不支持 | 不支持 |
实现 | 低代码测试 | 低代码测试 | 无脚本自动化测试 | 无脚本自动化测试 | 无脚本自动化测试 |
支持的端 | 移动端/PC端 | 移动端 | 移动端 | 移动端 | 移动端 |
以上大部分工具都是针对移动端的,可能是因为移动端有现成可以控制app操作的基础sdk能力吧。移动端比web端简单点,还有就是移动端按钮可以轻松识别出来。
以上几种方案中推荐的方案是使用iTestin成熟的产品。
优点:
- 是成熟的产品,不需要二次开发。
- 适合无代码经验基础的人使用。
缺点:
- 不开源,无法自己定制。
- 需要按功能付费。
2.4 web端常用自动化测试工具介绍
Katalon Studio
https://katalon.com/katalon-studio
https://cloud.tencent.com/developer/article/1523924
Katalon Studio 是一款免费的自动化测试工具,可以安装在windows、macOS、linux操作系统上,基于selenium 和 Appium 测试框架,支持不同层次的人员使用。具体使用流程是:打开浏览器进行业务操作,程序记录操作步骤,生成具体的脚本,可以回放,生成测试报告。
Ranorex Studio
https://blog.csdn.net/kowayee/article/details/107022134
Ranorex Studio是一个商业化的Windows GUI测试自动化工具,全球有4000多家公司使用它来测试桌面、web和移动应用程序。具体使用流程是:打开浏览器/应用程序/手机程序进行业务操作,程序通过动作表编辑器捕获和重播动作,然后将这些动作转换为可读的语言,生成测试报告。
testsigma
https://testsigma.com/
https://blog.csdn.net/weixin_42727710/article/details/122712267
Testsigma是 一款基于云端的、以AI驱动测试的自动化平台, 为Web、移动应用以及RESTful服务等各种应用的测试服务。 程序通过自然语言编写/录制,执行自动化测试,生成测试报告。
Mabl
https://www.mabl.com/product
https://www.cxyzjd.com/article/zjuxsl/79493010
Mabl是一个统一的DevTestOps平台,使开发人员和非开发人员都可以轻松快捷地大规模生成和执行自动化功能性UI测试。软件测试的全过程自动化,不再需要人工参与。自动创建和执行测试,自动分析测试结果,同时还能根据需求的变化自动适配和维护测试。
Selenium
https://blog.csdn.net/wanglian2017/article/details/72843984
https://blog.csdn.net/liudinglong1989/article/details/107740061
能够记录用户执行的操作,并可以导出为可重复使用的脚本。Selenium IDE 可以通过使用chrome、firefox插件进行扩展,可以与第三方服务集成。
2.5 katalon studio、Ranorex Studio、testsigma、Mabl、Selenium工具对比及推荐
katalon studio | Ranorex Studio | testsigma | Mabl | Selenium | |
---|---|---|---|---|---|
是否免费 | 基础使用免费,集成其他功能收费 | 定制收费 | 收费 | 定制收费 | 免费 |
录制 | 支持 | 支持 | 支持 | 支持 | 支持 |
回放 | 支持 | 支持 | 支持 | 支持 | 支持 |
可测试 | Web、桌面程序、以及移动app | Web、桌面程序、以及移动app | Web、移动app | web | web |
生成测试报告 | 支持 | 支持 | 支持 | 支持 | 不支持 |
支持集成 | 支持,但收费 | ? | 支持 | 支持 | 支持 |
适用对象 | 同时适用于技术和非技术的测试人员 | 同时适用于技术和非技术的测试人员 | 同时适用于技术和非技术的测试人员 | 非技术的测试人员 | 适用于技术的测试人员 |
支持扩展 | 支持 | ? | 支持 | 支持 | 不支持 |
运行于 | windows、macOS、linux | windows | 云端 | 云端 | chrome、firefox插件 |
其中最为推荐的产品是katalon studio,优点是功能强大,基础功能免费,操作简单,可以运行在本地不同操作系统下。如果要运行在云端,推荐testsigma,但是它不是免费的。
2.6 推荐方案
共包括几种方案:
- 通过使用现成成熟的产品,包括iTestin、katalon studio、Ranorex Studio、testsigma、Mabl、Selenium。缺点是大部分都不是开源的,需要按功能付费。
- 用自然语言编写测试流程,低代码自动化测试,现有产品挺少的,而且基本都收费。
- 采用selenium ide或chrome recorder功能录制操作流程,可导出js mocha/puppeteer js测试脚本,只有基础录制能力,可以在这个基础上再开发。现有这种测试模式的产品最多,少部分免费。
- 采用可视化流程图的形式创建测试用例,不用编写测试代码。基于workflow,现有免费产品挺多,也可以自己开发。https://www.automa.site/
- 无脚本自动化测试,测试程序自动搜索所有可执行路径,找到有用的路径,现有这种测试模式的产品很少,而且基本都收费。比如:Mabl
使用端到端测试框架 | 使用成熟的产品 | 基于低代码模式自行开发 | 基于录制脚本的模式自行开发 | 可视化流程图的模式自行开发 | 基于无代码模式自行开发 | |
---|---|---|---|---|---|---|
是否开源 | 基本都开源 | 基本都不开源,需要付费 | 无 | 开源 | 开源 | 无 |
目前流行程度 | 最流行 | 流行 | 不流行 | 比较流行 | 一般 | 最不流行 |
开发难度 | 一般 | 无 | 比较难 | 比较难 | 比较难 | 最难 |
使用难度 | 高,需要有代码经验 | 最低,有代码经验和无代码经验的人都行 | 低,只需要熟悉流程规则即可编写测试用例 | 低,只需要执行业务步骤录制脚本 | 较高,需要可视化编写流程步骤 | 最低,程序自动测试 |
目前比较流行的产品自动化测试的模式基本都是一样的,使用selenium操作记录录制的能力,然后集成一些第三方插件,完成一条可执行的测试用例,在云端或本地执行。
推荐方案:
采用selenium ide步骤录制的方式生成mocha/puppeteer js测试脚本,然后在这个基础上再开发生成测试报告、回放等功能。
优点:
- 无代码经验的人也可以使用。
- 不需要写测试用例,可以录制生成测试脚本。
缺点:
- 测试只能在联调发布后进行。
- 业务变更后,测试同学需要重新录制脚本,有一定维护成本。
- 业务覆盖率不全,只能靠自己手动录制。