现在的 IT 公司会为了进入不同的市场开发相应的 App,来自同一家公司的 App 总会具有相似的 UI 逻辑,但 UI 的细节、风格又各有区分。随着产品的发展,抑或是在产品应用于新市场的过程中产生了旧 UI 逻辑的变种,用于测试所有 UI 逻辑的时间会与新 UI 的数量呈正比例关系增长。即使有 UI 的自动化框架可以用来减少测试所需的时间(例如 Calabash Android),使得每天只需要2个小时就能完成对 UI 的测试,但在这套 UI 衍生出四套“变种 UI”后,却要花费8个小时才能完成测试。
这篇博文将利用 Continuous Integration (CI) 服务,同时在不同的设备中执行 UI 测试,并介绍一种从根源上减少这种实际场景下自动化测试所需时间的方法。此外,我们的测试都是在真机上运行,而不是虚拟机。
更贴近现实的自动化测试:有很多东西只能通过真机来反映,像内存消耗,CPU 消耗:虚拟机通常都是消耗电脑的资源,而真机基本不会消耗电脑资源。
而且用真机进行测试性价比较高!Android 设备都很便宜,所以你可以在需要设备进行测试的时候毫不犹豫地买买买,如果用虚拟机测试的话,由于虚拟机会消耗很多电脑资源而且拓展电脑硬件很烧钱,这无疑会限制测试设备的数量。
虽说博文里同时使用了 Calabash Android 自动化框架 和 Jenkins CI,但我提到的大部分方法可以通过运行在任意 CI 服务上的 Android Debug Bridge (ADB) 应用于其他的自动化测试框架里。
完成分布式构建的第一步就是创建 Jenkins slave,授权它管理多个“奴隶”。我们可以通过 Jenkins -> Manage Jenkins -> Manage Nodes 导航到 Jenkins slaves/nodes 的配置界面。
根据定义,Jenkins slave 用于完成 Jenkins 主机分发下来的任务。在我们的使用场景中,需要完成的任务则是运行在 Android 设备上的自动化测试。为了完成这项任务,所有奴隶都可以运行在相同的机器上,也就是通过 USB 连接在电脑上的,具有执行 ADB 命令的 Android 设备。
下面是一个与 Samsung S3 关联的奴隶的安装细节:
当所有奴隶都运行在同一台机器上时,我建议为不同的奴隶结点提供不同的系统 roots 文件,因为它们很可能会在测试结果处被存储,如果它们指向同一个 root 文件,可能会让测试结果被不同的结点重写。我们可以通过 Remote FS root 进行这样的设置。
Remote FS root
每个奴隶都需要拥有 Jenkins 中的一个专用目录,我们在奴隶中为其指定绝对路径,如:'/var/jenkins' 或 'c:\jenkins',而且该路径应该是奴隶设备中的本地路径。但是该路径不需要对 Jenkins 可见,怎么正常怎么来就行。
奴隶不会持有重要数据(不同于最后创建于其上的项目的活跃工作区),所以你可以将奴隶的工作区设置到一个临时目录。这样做的唯一缺点在于:你可能会在奴隶设备关机后失去最新的工作区。
当 separate FS roots 和多处理器允许 Calabash 的并行操作时,ADB_DEVICE_ARG 环境变量需要用于通知 Calabash,因为 Calabash 运行的设备应该向其发送 ADB 命令,防止设备的多重连接。底层中,Calabash 通过 ADB 设备命令自动化 UI,当一个设备匹配于另一个奴隶结点,ADB_DEVICE_ARG 应该通过环境变量的配置应用到 node 结点层中,并在其后在任务层变为可用。
环境变量
这些键值对将会应用于结点上的每一个构建,并重写任意全局值,所以他们能在 Jenkins 的配置中被使用(如 $key 或 ${key}),而且将会被添加到构建上启动的进程。
在 Nexus 4 中设置奴隶的方式如上
如果你留心注意一些细节你会发现,所有奴隶结点都被配置了相同的 android-group 标签。这样做的目的主要是将奴隶分组,使得当我们需要使用奴隶时,方便我们调用特定分组里的所有奴隶。
标签
标签(AKA 标签)用于将多个奴隶分到一个逻辑组中,而每一个标签都会消耗空间。例如 'regression java6' 将为为结点分配 'regression' 和 'java6' 标签。
举例来说吧,如果你有多个窗口奴隶,而且你要完成的任务需要窗口,那么你可以让你的所有窗口奴隶持有 'windows' 标签,然后将需要执行的任务与 'windows' 标签绑定。这使得你的任务在所有窗口奴隶中被执行,而不是被随意执行。
现在如果我们检查 android-group,我们会得到一个所有结点都带着 android-group 标签的列表,把其他设备添加到这个组里就像拷贝一个已存在的结点和更新 ADB_DEVICE_ARG 环境变量一样简单。
在进行了上面的配置以后,我们现在可以创建一个 Jenkins 任务使用连接到电脑的设备,通过各自的奴隶和具有 android-group 的奴隶群执行 Calabash Android。
通过选中“如果必要的话,执行并行构建”和“限制项目运行位置”两个配置选项,使得任务可以被并行执行,主题对结点可用,仅使用标有“android-group”标签的结点。但其中的限制是:需要确保只有与已连接的设备关联的结点才能用于自动化测试,因为我们有用于完成其他任务的其他与未连接设备关联的结点。
如果必要的话,执行并行构建
如果需要并行执行构建,Jenkins 会安排并并行执行多个构建(假设你有足够的执行器和传入的构建请求),这对于耗时长的构建和测试任务来说非常有用……此外,参数化构建也是非常实用的,因为每一个执行器的执行任务与其他执行器的执行任务相互独立。
现在假设我们有4个自动化测试的请求和三个已连接的设备,处理完所有请求将需要两轮操作(第一轮三个设备将会被使用,剩下一个请求在队列中等待处理,当某个设备变为空闲状态则会处理该请求)。这就意味着我们可以使4个产品风格自动化测试的时间从8小时减少为4小时,如果我们再买一台或者多台设备的话,时间甚至会更少。
写到这里,我们已经能够随心所欲地对我们想要的设备(连接在 USB 端口处可用的设备!)手动地触发并行的自动化测试。但是,我们为什么要手动地完成这些工作呢?我们可以用 Jenkins Parameterized Trigger Plugin 设置上游任务,通过相应的参数触发多个下游任务。
例如,如果我们想要使用所有可用设备并行地测试多个应用 UI,那么我们可以设置一个这样的上游任务,并执行它:
上面的配置完成后,我们可以触发三个并行的 MOBILE_TEST 下游任务(必须进行了“如果必要的话,执行并行构建”的配置),每一个下游任务将会测试一个指定的 App 风格“cherry”,“tomato”,“rasberry”,并通过一个叫作风格的参数发送到下游任务。上游任务将会被阻塞,等待所有下游任务完成任务并因此设置构建状态。
我建议大家把上游任务运行在不同的奴隶结点/奴隶组中,而不是运行在和下游任务相同的奴隶结点/奴隶组中,否则它将占着设备不处理,浪费了资源
所以从今天开始,让我们一起回收这些被淘汰的设备,让它为我们贡献最后一丝价值吧!
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。