现在到了我们的测试需求在测试仪的桌面上变得拥挤的时候了。 灵魂向云问。 不完全是 不完全是
我们的目标
(赶紧阅读,您可以转到下一节)
我们正在开发面向国外市场的金融应用程序,该应用程序有不同的格式:用于桌面浏览器(用于Google Chrome的网站和扩展程序),用于移动浏览器以及用于电话的混合应用程序。 由于应用程序的特殊性,我们特别注意在各种配置和设备上测试应用程序。 对于我们来说,应用程序的稳定和安全运行对于我们客户的桌面浏览器及其任何设备都非常重要。
找到一个用于测试的基于云的设备场的原因是,工作形式从办公室更改为完全远程和分布式(在城市和国家之间)。 也就是说,如果更早地进行测试,我们可以一堆(字面意义上)收集不同的设备,并同时在一个表中手动测试下一个组件,那么现在就不可能做到这一点。 此外,随着功能的增长,为了减少人工工作,我们将重要测试的回归集自动化,这意味着组装后我们需要能够在所需的配置和设备上调用测试,并且最好在组装滚动到暂存阶段进行。
在这种情况下,最简单,最明显的解决方案是在我们的DevOps管道中使用Android模拟器和iOS设备模拟器。 但是,由于在开发人员的工作计算机上相对容易实现,因此在云中使用变得困难而昂贵。 为了使同一Android模拟器快速运行,需要具有HAXVM支持的x86服务器,而对于iOS模拟器,则仅需要具有xcode的MacOS设备。 但是,不幸的是,即使解决了这个问题,问题仍然存在于仿真器和真实设备上的软件行为之间。 例如,在第二个版本中,我们会在三星设备上捕获无法在模拟器上播放的奇怪错误。 好吧,当然,还有罕见的异国情调的“中国”“愉悦”,它在开发阶段我也想捕捉到一些独特的错误。
结果,我们了解了使用移动设备云服务器场的必要性,我们可以在该服务器场上快速运行测试,并在必要时手动进行调试。 而且我们的整个团队都可以从世界上任何地方访问(即使旅行,我们也喜欢工作)。
我们的测试是用Python 3.7编写的(以后将很重要),因为堆栈使用的是tox + pytest + Selenium + Appium,当然还有一小套有用的python库。 我们肯定会在Windows和MacOS上使用Edge,Firefox,Chrome,Safari浏览器以及带有浏览器和应用程序的Android和iOS设备上的计算机进行测试。 对于每个设备,我们没有很多测试(少于一千个),但是在设备上的单个线程中进行测试时,全套测试需要花费几个小时。 因此,为我们选择服务的标准将是:
- API测试(硒/鸦片)
- iOS,Android设备
- 支持移动浏览器测试
- 支持下载和测试应用程序
- 参考设备(GooglePixel(Android 9)和iPhone X(iOS 12+))
- 手动调试
- 记录(加上屏幕截图,记录视频运行)
- 设备寄存和可用性
- 平均测试准备时间
- 价钱
理想的,但不是必需的:
- 服务级别python支持(无论如何)
- 支持桌面设备\浏览器
市场调查结果
一个星期,我上网冲浪,尝试了十二种不同的服务。 它们中的大多数为测试机会提供了空闲时间。 我的研究结果,更多的结论是主观的。 您的意见和结果可能与我的不同。
在Habré上,我发现2017年有一篇文章专门针对同一主题,但此后出现了新服务,我们的任务更加严格。 因此,例如,三星远程测试实验室,Firebase测试实验室,Xamarin测试云之类的“美味”服务不适合我们。
退出游戏
三星远程测试实验室
友情链接
该服务提供了一个免费的机会来尝试使用各种三星设备,包括最新的设备,包括Tizen上的电视或智能手表(每天最多限制10个小时,每天免费提供10积分,相当于每天2.5个小时) ,最小会话时间为半小时(2个学分)。 这对于调试和查找某些设备上的错误的根本原因非常好,该服务甚至提供了对远程调试的访问(远程调试桥,对控制台和系统日志的访问),但是不幸的是,该服务不提供对设备的API访问。 “自动化”的唯一方法是记录用户操作,然后在本地自动化工具中回放它们。
Firebase测试实验室
友情链接
Google提供的一项服务可让您免费(不太完全)在运行Android和iOS的设备上测试您的应用程序。 但有一个警告-服务需要使用本机自动化工具(对于Android为UIAtomator2和Espresso,对于iOS为XCTest),或者对于Android使用自动蜘蛛网(爬网程序)-Robo Test和Game Loop Test。 也就是说,使用UIAutomator和Selenium las将不起作用。 至于免费-免费软件包每天最多只能在模拟器上进行10次测试,在真实设备上进行5次测试。 如果您需要更多,则每增加一小时,您将分别需要另外支付1美元和5美元。 通常,对于我们的任务,如果我们从头开始编写测试,这将是一个不错的选择,但是我真的根本不想处理数百个测试-这简直太昂贵了。 事实证明,在台式机版本和移动版本之间的测试中,我们将不得不大相径庭,这将大大增加支持的难度。
Visual Studio应用中心
友情链接
前Xamarin测试云。 该服务最终支持Appium,并允许在数千种不同的设备上进行测试。 但是,与其他Microsoft产品一样,它牢牢地固定在本机堆栈上,这意味着要使用此服务,您不仅需要Visual Studio的存在,还需要专门用Java编写项目和测试。 但是,如果您突然有了Java堆栈(带有MS VS),则价格为每个设备插槽每月99美元,这是相对自由的。
服务选择
AWS设备场
友情链接
也许是当今用于在虚拟和真实设备(超过2500台设备)上进行测试的最强大的服务器场。 对我们来说,这是一项优先服务,因为我们的服务仅部署在AWS云中,此外,设备时间的每分钟价格为17美分起。 AWS允许您使用本机框架以及Appium,Calabash和其他自动化测试框架。 除了自动测试之外,该服务还提供了手动调试的功能。 好吧,“尝试” 1000分钟非常诱人。 但是,细节仍然像往常一样是魔鬼。 在测试方面,AWS具有多个功能。
正如我已经提到的,我们使用Python 3.7,但是AWS Device Farm仍然可以使用Python 2.7.6(请参阅此处的手册)。 开箱即用对毒素一无所知。 对我们来说,这意味着缺少许多功能,并且需要处理部分测试以确保向后兼容性,并创建绕过毒素的环境。 此外,用于下载测试包(存档)的相当奇怪的机制还意味着下载用于测试的应用程序。 就我们而言,如果我们通过移动浏览器测试我们的服务,那么下载应用程序是一个额外的步骤。 但是,您可以将应用程序替换为“存根”,并在Python 2.7环境中使用Python 3.7创建venv,然后在其中创建具有tox的环境,从而...
如果一切都基于旧版本,则Amazon不会成为Amazon。 作为一种替代方法(下面没有服务将没有这样的机会),AWS建议通过AWS CLI(命令行界面)使用AWS Device Farm(请参阅此处的手册)。 也就是说,我们可以在远程调试模式下将设备作为真正的设备从云连接到我们的计算机,但是,以前已经用修补的adb替换了adb(二进制列表中没有linux的二进制文件,但是我确定它是自然存在的)。 也就是说,设置了AWS CLI后,为了进行测试,我们只需要执行一些命令(因为我们不会将GUI用作AWS Device Farm App)。
如果我们要测试该应用程序,也可以通过AWS开发工具包下载。
但是我没有在这里讲一个关键的细微差别。 我们再次详细地发现了魔鬼。 事实是,仅当我们对AWS使用私有设备计划时,远程调试选项才可用。 首先,此功能仅应要求提供(您需要写一封信给亚马逊),其次,该选项适用于us-west-2区域,其次,实际上,此选项使我们返回到拥有服务器的服务器使用一组(或至少一个)与其连接的设备进行测试。 优势显而易见-我们可以单独使用此设备,这显然更安全,更快捷,另一方面,我们失去了主要优势-设备的选择和种类。
我总体上喜欢这项服务,但是对我们的团队而言,其中有太多“ buts”。
位列
友情链接
这个基于云的移动服务器场是第一个使用搜索引擎的服务器。 并没有白费。 展望未来,我要说的是,与一项测试相比,这项服务在一项测试中拥有最佳的设备选择(仅实际设备),并且具有最佳的性能。 Bitbar提供了远程手动和自动测试服务(使用Appium和其他框架),并且,如果需要的话,还允许您使用类似于Firebase Test Lab(机器人测试)的AI爬虫-AI TestBot。 通过预先选择所需的设备池,BitBar的主要优点是测试线程的数量不受限制(也就是说,您可以立即在数百个设备上测试应用程序)。 如果设备忙,则将选择另一个设备,否则会话将排队。 在测试运行结束时,将生成日志,测试记录,保存结果,并将通知发送到邮件。 尽管有机会配置与不同CI / CD工具的交互。 该服务还提供了以不同分辨率测试桌面浏览器的功能,并且可以根据需要在AWS中创建您的私有设备。 确实,您需要支付所有这些芯片的费用-每分钟测试将花费0.29美元。
设置过程很简单,就像两个手指与沥青的相互作用一样:
代码示例 from appium import webdriver """ ... """ com_executor = 'https://appium.bitbar.com/wd/hub' desired_capabilities = { 'deviceName': 'Motorola Google Nexus 6', 'deviceId': 'FA7AN1A00253', 'newCommandTimeout': 12000, 'browserName': 'Chrome',
科比顿
友情链接
在真实设备上提供测试服务的另一项服务。 设备的选择比Bitbar(350+)更适中,设备的可用性也更少。 通常,它的基本功能与BitBar非常相似,它允许手动和自动测试(使用Appium-在此无需选择框架)。 无法在桌面浏览器上进行测试。 该服务还允许您使用无限数量的会话和设备来组织测试,但是您不能在此处创建设备池。 服务的价格非常宽松-每增加一分钟测试$ 0.10,但是在试用期间,我提请注意服务的某些不稳定-设备挂起后,Internet经常在设备上掉线。 另外,如果设备忙或预留,则所有正在运行的测试都将失败。 也就是说,与Bitbar不同,会话中没有队列。 没错,它可以低成本组织。 Kobiton有自己的小型API。
设置也非常简单,与位栏不同,几乎是原始的Appium。
代码示例 import base64 from time import sleep from appium import webdriver import requests """ ... """
浏览器堆栈
友情链接
好旧的BrowserStack。 关于他以及许多使用它的人写了很多东西。 是的,它不仅允许在不同的浏览器上进行测试,而且还可以在不同的设备上进行测试。 既可以在手动模式下使用,也可以使用Selenium / Appium。 根据您的需要-在移动浏览器上或使用您的应用程序。 在功能方面,所有功能都与顶部的两个服务相同,但是与它们不同的是,同时会话的数量已经受到限制。 的确,相反,每月支付199美元,可以无限时间测试。 有针对Jenkins,Travis CI,TeamCity的插件,其丰富的API,出色的日志以及各种配置不同的设备和桌面浏览器。 的确,根据您要测试的内容,设置将有所不同-对于测试浏览器(甚至是移动浏览器),将使用Selenium集线器;对于应用程序,将使用Appium集线器。 此外,要测试该应用程序,您将需要单独付费。 也就是说,为了同时测试移动浏览器和应用程序,您需要支付199美元和另外的159美元(一台设备同时进行测试的价格)。
应用示例代码 from appium import webdriver """ ... """ com_executor = 'https://USERNAME:API_KEY@hub-cloud.browserstack.com/wd/hub' desired_capabilities = {'device': 'Google Pixel', 'deviceName': 'Google Pixel', 'app': app_name, 'realMobile': 'true', 'os_version': '8.0', 'name': 'Bstack-[Python] Sample Test' } driver = webdriver.Remote(com_executor, desired_capabilities) """ ... """
移动浏览器的示例代码 from selenium import webdriver """ ... """ com_executor = 'http://USERNAME:API_KEY@hub.browserstack.com:80/wd/hub' desired_capabilities = {'device': 'Google Pixel', 'deviceName': 'Google Pixel', 'browserName': 'Chrome', 'realMobile': 'true', 'os_version': '8.0', 'name': 'Bstack-[Python] Sample Test' } driver = webdriver.Remote(com_executor, desired_capabilities) """ ... """
实验性

友情链接
另一项服务可以使用Appium,Selenium和其他框架同时手动和自动测试移动设备和桌面浏览器。 与BrowserStack一样,同时进行的会话数是有限的,但价格略有不同-测试移动应用程序时,该服务每月收费199美元,而跨浏览器测试仅需39美元(同时进行一次会话)。 此外,就像使用AWS的Bitbar一样,您可以使用设备构建自己的私人实验室,但是如果需要,可以将其与成千上万个设备,模拟器和不同版本和平台(MacOS,Windows)的浏览器的公共云混合使用。 在有趣的功能中-IntelliJ和Eclipse的扩展功能及其Appium Studio工具的可用性使您可以使用设备的高级功能,例如与FaceID交互,语音控制,扫描条形码,设置通信质量,地理位置等。 在这些缺点中,我可以为试用期命名一组奇怪的设备,为试用期命名严格的关税,以及使用公司邮件的要求(gmail无法使用)。
代码示例 from appium import webdriver """ ... """ com_executor = 'https://Uhttps://cloud.seetest.io/wd/hub' desired_capabilities = {"deviceName": "iPhone X", "accessKey": API_KEY, "platformName": "ios", "deviceQuery": "'@os='ios' and @version='12.1.3' and @category='PHONE'", } driver = webdriver.Remote(com_executor, desired_capabilities) """ ... """
实验室
友情链接
最古老的云测试服务之一。 几乎有400种不同的实际设备,各种各样的仿真器和仿真器,包括Samsung设备的非典型仿真器,还有针对不同操作系统(包括Linux)的桌面浏览器。 Appium / Selenium和本机框架上的自动化。 该服务的主要优势是存在大量的配置,包括旧的OS,浏览器,设备。 SauceLabs还限制了同时会话的数量,但是在这里,最便宜的选项不是一个,而是两个同时会话。 不寻常的是:实际设备和仿真器上的资费计划是不同的。 因此,最便宜的选择包括两个会话,每个月在模拟器上进行2000分钟的测试,价格为149美元,而在实际设备上已经为349美元。 与CI / CD集成,Slack。不幸的是,我无法实时试用SauceLabs,因为because,注册失败,可能是由于地区原因所致,但我不确定。
完美
友情链接
最新的云测试提供商在视觉上与Experitest最相似,但没有高级功能。 有一种简单的脚本语言。 这很奇怪,但是在针对非企业(企业)资费的服务中,没有针对在桌面浏览器上进行测试的建议,也不可能实时监视测试的执行情况(仅当这不是手动测试时)。 大约有一百种不同的设备可供测试。 它与Jenkins集成,并且有趣的是,与诸如HP ALM,IBM Rational,TFS之类的测试管理工具集成在一起。 还有非常奇怪的收费计划,例如每月5小时的测试(以分钟为单位,最高为0.33美元(这是最昂贵的服务)),尽管可以购买额外的小时套餐,但同样令人感到奇怪的是,每分钟或至少每小时计费一次。 为了便于使用,在试用期内,只有手动测试以及一个公共实验室可用,因此来自不同用户的所有发射都归为一堆。 因此,无法准确判断服务的便利性和速度。 可以看出,该服务主要针对大型公司客户,而至少根据现有信息,该提供程序的功能是我测试过的最不起眼的。
摘要结果
根据所有选择标准,服务非常相似,服务的性能和价格之间存在差异(例如,如果没有功能,例如AWS)。 因此,为了方便起见,我们将在表格中汇总研究数据,着眼于服务的速度(考虑通过美国VPN的连接)以及价格,以比较设备上的平均每月测试时间(每月5个版本,在Android和iOS设备上进行2小时的测试) = 20小时)。 作为参考值,我将本地计算机上的数据与仿真器一起使用,并再次通过美国VPN将其连接以确保实验的纯度。
结论
对我来说,研究和选择适合我们团队的服务非常有趣。 通常,针对每种口味和任何任务都有解决方案,事实证明这些服务在特性和实现方面非常相似。 因此,根据您的任务,我建议以下选择:
选项A :如果验证速度对您很重要,并且您需要一次检查数十种不同的设备,则选择Bitbar 。
选项B :如果您优先考虑参考设备的结果,并且配置测试是次要的(但有必要),那么您选择的是BrowserStack 。 这只是我们的情况,因为从统计上讲-所有错误中有90%是来自参考平台和设备的错误(大多数情况下,错误是一次同时出现在所有参考平台上)。 其余的8%是MS IE错误,拒绝了IE支持-2%的MS Edge错误,以及特定配置的0.5%的错误。
选项B :如果您有兴趣检查特殊条件,例如质量差的通信,地理位置或Touch / FaceID,则选择Experitest 。
但是从长远来看,如果您的公司占用一个大办公室,那么您的工作是全职的,那么通常来说,甚至使用带有服务器的微型实验室来组织自己的微型实验室,用于连接2-3台设备的仿真器,比使用专业设备花费的成本越来越少,而且更加方便服务。