软件测试 | K&S批量运行测试用例 - 综合 -

当前位置:首页  >  综合  > 正文

软件测试 | K&S批量运行测试用例

软件测试 | K&S批量运行测试用例
2023-05-29 17:24:28 来源:哔哩哔哩

通过前面文章已经了解了 K8S 大概的运行机制,接下来看一下在测试领域中如何用 K8S 来高效的 解决分布式运行测试用例的场景。 在企业中运行 UI 自动化与学习中是不一样的,最大的不同之处就在 于企业的场景中测试用例的量级非常的恐怖, 通常一款超过 2 年的 TO B 类型的产品都会拥有数以千 计的 UI 自动化测试用例。 这个时候测试的运行效率会成为最大的瓶颈。 在这个时候企业会寻求并发 执行测试用例的能力。 一般每种语言的测试框架都会提供相应的并发测试机制, 但是这种机制通常都 是单机的并发能力,而这种并发模型都会存在单机的性能瓶颈, 无法在一台服务器中启动太多的浏览器 执行测试。 所以在测试用例的规模达到一定量级后,寻求多机的分布式执行测试的能力成为了必须的测 试架构。 目前各种领域都提供了一些可用的分布式执行能力,这其中以 Selenium 官方团队的 Grid, 移动端的 STF 和 Cypress 的用例文件分割模式比较流行。下面来介绍一下 selenium 的 Grid 是如何在 K8S 中进行部署的。


(资料图片)

SELENIUM GRID

Gird 的理念是将浏览器单独提取出来并进行集群化管理, 在以前测试程序和浏览器通常是绑定在一台 机器的,而 Grid 的出现把浏览器单独部署成为一个集群,而测试程序通过 remote Webdriver 来代替之 前的 Webdriver 与远程浏览器进行通信并执行测试用例。 而接收测试请求的角色就是 Grid 架构中的 Master 节点,有时候它也被称为 Hub 节点。 作为浏览器集群的 Master 节点,它主要的工作是负责接 收测试程序的请求并把测试任务平均分发到在它下面注册的多个 Node 节点上去, Node 节点作为 Gird架构的 worker 节点,是真正启动浏览器并执行测试的地方。 所以在这套架构下需要做的事情有以下 3 点:

测试程序从之前的 Webdriver 变成 remotewebdriver 以跟 Gird 的 Master 节点通信。

在 K8S 中 1 台节点上部署 Grid 浏览器集群中的 Master 服务

在 K8S 中的多台几点上部署 Grid 浏览器集群中的 Node 服务

首先看一下如何在 K8S 集群中部署 Master 节点

apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: selenium-hub labels: name: selenium-hubspec: replicas: 1 template: metadata: labels: name: selenium-hub spec: containers: - name: selenium-hub image: selenium/hub:3.7.1-beryllium imagePullPolicy: IfNotPresent ports: - containerPort: 4444 env: - name: GRID_TIMEOUTvalue: '0' - name: GRID_THROW_ON_CAPABILITY_NOT_PRESENT value: 'true' - name: GRID_NEW_SESSION_WAIT_TIMEOUT value: '-1' - name: GRID_BROWSER_TIMEOUT value: '15000'- name: GRID_TIMEOUT value: '30000' - name: GRID_CLEAN_UP_CYCLE value: '30000' - name: JAVA_OPTS value: '-Xmx512m' - name: GRID_MAX_SESSION value: '30'---apiVersion: v1kind: Servicemetadata: name: selenium-hub labels: name: selenium-hubspec: type: NodePort ports: - port: 4444 targetPort: 4444 name: port0 nodePort: 30000 selector:name: selenium-hub sessionAffinity: None

上面是 Grid master 节点部署在 K8S 中的配置文件,这里又接触到了一个新的资源对象也就是 Deployment,这个对象的作用和使用方法都很容易理解。它的目的是维持 POD 的数量,在 spec 字段 下有一个非常关键的字段是 replicas,代表着 Deployment 对象要维护的 POD 的数量, 如果用户把这 个值设置为 3 那么 Deployment 会保证在 K8S 集群中一定会有这 3 个 POD 存在,如果其中任何一个 POD 出现故障,Deployment 都会创建新的 POD 来补充进去, 而创建什么样的 POD 由配置文件中的 template 字段决定,它是 POD 的模板,是指导 Deployment 创建什么样的 POD 的模板。 K8S 正是通 过 Deployment+Service 模式来完成通用的负载均衡+高可用的架构设计的:Deployment 会保证 K8S 集 群中一定有多个业务 POD 处于运行状态而 Service 在接管 POD 网络后能保证流量是通过负载均衡的机 制平均分发到每个 POD 中的。 当然在目前的场景下 replicas 设置为 1 即可。 然后再看一下作为 worker 角色的 Node 节点如何在 K8S 中进行部署:

apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: selenium-node-chrome labels: name: selenium-node-chromespec: replicas: 6 template: metadata: labels: name: selenium-node-chrome spec: containers: - name: selenium-node-chrome image: selenium/node-chrome-debug:3.7.1-beryllium imagePullPolicy: IfNotPresent ports: - containerPort: 5900 env: - name: HUB_PORT_4444_TCP_ADDR value: 'selenium-hub' - name: HUB_PORT_4444_TCP_PORT value: '4444' - name: NODE_MAX_INSTANCES value: '60' - name: NODE_MAX_SESSION value: '60' - name: NODE_REGISTER_CYCLE value: '5000' - name: DBUS_SESSION_BUS_ADDRESS value: '/dev/null' resources: requests: memory: '500Mi' volumeMounts: - mountPath: '/dev/shm' name: 'dshm' volumes: - name: 'dshm' hostPath: path: '/dev/shm'---apiVersion: v1kind: Servicemetadata: name: selenium-node-chrome labels: name: selenium-node-chromespec: type: NodePort ports: - port: 5900 targetPort: 5900 name: port0 nodePort: 8900 selector: name: selenium-node-chrome sessionAffinity: None

在 Node 的配置文件中需要注意 2 点:

由于 Node 节点需要到 Master 节点上注册自己的信息,所以需要让 Node 节点知道 Master 节点 的 IP 地址。 这里是通过环境变量的形式注入到容器中的,所以需要记住这两个固定的环境变量。 同时 K8S 为了解决服务发现的问题,在集群中内部部署了 DNS 服务器,曾在 K8S 的安装章节提 到过。 而任何 Service 在创建的时候都会将自己的名字也就是 name 这个字段作为域名注册到 DNS 服务器中, 这样在 K8S 内部寻址方式统一使用域名寻址即可。 所以在 Node 的配置中指定 Master 服务的 ip 地址为 selenium-hub, 因为在创建 Master 服务的 Service 时候为 name 字段填 写值正是 selenium-hub。

在上面的配置文件中,仍然使用 Deployment 来维护 POD 的数量,replicas 字段填写的值是 6,也 就是每个 Node 服务注册 60 个浏览器(Node 服务的 NODE_MAX_INSTANCES 和 NODE_MAX_SESSION 两个环境变量填写的都是 60) 一共 360 个浏览器。 但是这种部署方式 有一个缺点是 Deployment 并不保证这 6 个 POD 是分布在不同的节点上的,也就是说可能存在两 个或多个 POD 是部署在同一台节点上导致浏览器的分布并不均匀, 失去了分布式运行的优势。所 以为了解决这个问题可以换用 Daemonset 这个资源对象来代替 Deployment,这两个资源类型很 像,目的都是在集群中维护多个 POD。Daemonset 不同的是它没有 replicas 字段,取而代之的是 它保证 K8S 集群中每个节点上都有且只有一个 POD 存在,它十分适合本次的部署场景,能够保证 每个节点上的浏览器绝对的平均分布。

部署完毕后可以通过 Master 服务暴露的端口号来访问图形界面:

如果能看到上面的图就说明部署已经成功了, 接下来只需要在测试代码中使用 remote webdriver 连接 Master 节点即可。

WebDriverContainer webDriverContainer = newWebDriverThreadLocalContainer(); Configuration.screenshots = false; webDriverContainer.clearBrowserCache(); Configuration.browser = "chrome"; Configuration.remote = "http://k8s.testing-studio.com:30000/wd/hub"; String baseURL = "http://k8s.testing-studio.com:8999/"; com.codeborne.selenide.Selenide.open(baseURL); $(byText("Welcome Gaofei!")).should(Condition.visible);

上面我使用 Java 的 Selenide 框架来执行自动化测试, 它封装了很多 Webdirver 的细节所以配置上更为 简单,只需要 Configuration.remote 指定好 Grid 的地址即可。

CYPRESS 的分布式执行测试用例

Cypress 作为最近两年流行起来的 UI 自动化测试框架,它在并发执行上并没有像 Selenium Grid 的设计 一样去虚拟化一个浏览器集群, 相反的它用一种非常简单的设计方式,就是把任务的调度交给用户自己 来做,用户只需要运行如下命令:

cypress run --record --key=281554e5-9eee-41bf-9f4c-e9cb405ed5a3 --ci-build-id $BUILD_TAG --parallel --spec "cypress/integration/cases/test1.js" --browser chrome

如果使用 Cypress 的数据控制 Dashboard 完成并发运行的话,那需要去官方网站注册并创建对应的 project, 在运行的时候指定 --key 和--ci-build-id $BUILD_TAG --parallel 来完成并发能力, 只要用户 在不同的机器上运行 cypress 命令的时候使用同样的 key 和--ci-build-id 那么 dashboard 就会认为他们 属于同一个测试任务将他们的测试结果整合成一个测试报告。同时想要完成 cypress 的并发测试需要将测试用例拆分成多个测试文件, 因为 Cypress 的调度粒度是控制在文件级别的, 比如用户希望有用 10 个并发的能力那就需要将测试用例拆分成 10 个文件保存,然后分别在不同的机器上运行这 10 次 命令完成这 10 个测试文件的测试。 不得不说这种分布式测试的能力比起 Selenium Grid 来说差了至少 一个等级。 这样需要用户每一次更改并发数量就对测试文件进行重新拆分,如果拆分的不够均匀还容易 造成长尾现象, 最痛苦的是用户需要自己来编写任务分发工具将测试程序调度到不同的机器上运行 Cypress 命令。 为了解决这个任务分发问题需要利用 K8S 的调度能力来完成。 常用的做法是使用 K8S 的 job 对象来将任务提交到 K8S 中运行, 由于 K8S 本身就是集群架构,有自己的负载均衡调度 策略,所以它能够保证 Cypress 的任务调度到不同的节点上分摊压力。可以利用在 K8S 容器编排介绍 的那一章中针对 job 的配置文件

apiVersion: batch/v1kind: Jobmetadata: name: cypress-testspec: template: spec: containers: - name: stable image: registry.gaofei.com/cypress_test imagePullPolicy: Always env: - name: cypress_file value: 'cypress/integration/cases/test1.js' restartPolicy: Never backoffLimit: 0 parallelism: 1 completions: 1

如上述配置文件中编写的配置,如果希望有 10 个浏览器的并发度,那在拆分完测试文件后,只需要提 交 10 次 job 来运行 Cypress 的测试任务,通过环境变量来指定每一次测试任务需要执行哪一个测试文 件。 这样就完成了 Cypress 中最难以完成的任务分发工作了,因为 K8S 会帮将任务分发到集群上不同 的节点上去以完成任务的分布式执行。

标签:

(责任编辑:news01)
世界球精选!小S15岁二女儿再创收!拍新广告嘟嘴wink好成熟,曾自称要养妈妈

世界球精选!小S15岁二女儿再创收!拍新广告嘟嘴wink好成熟,曾自称要养妈妈

小S15岁二女儿再创收!拍新广告嘟嘴wink好成熟,曾自称要养妈妈,小s,广告,许老三,许雅钧,娱乐圈,lily,wink,社交平台
05-26 19:36:59
环球观焦点:AI造假频发行业治理迫在眉睫 上市公司积极布局网络安全业务

环球观焦点:AI造假频发行业治理迫在眉睫 上市公司积极布局网络安全业务

一方面,监管部门需尽快建立健全人工智能研发与应用相关法律法规和标准体系,加强对科技企业、媒体平台等的
05-26 19:05:07
天津中源邦达热力有限公司供热缴费线上入口+流程

天津中源邦达热力有限公司供热缴费线上入口+流程

➤➤天津中源邦达热力有限公司供热缴费线上入口+流程缴费入口:缴费流程【微信公众号】扫码关注→业务办理
05-26 17:30:08
就业夜市荐工作 公益岗位兜底线

就业夜市荐工作 公益岗位兜底线

核心阅读福州深入实施就业优先政策:举办就业夜市,利用重点商圈周末夜晚人流量大、氛围轻松等特点,将企业
05-26 16:54:47
地奈德乳膏婴儿能用吗_尤卓尔软膏婴儿能用吗

地奈德乳膏婴儿能用吗_尤卓尔软膏婴儿能用吗

1、病情分析:优得乐又名丁酸氢化可的松乳膏,是一种弱的外用皮质类固醇软膏,浓度较低,所以治疗效果也是
05-26 16:48:45
商务部答上海证券报记者提问:推动贸易新业态发展 鼓励企业在中亚建海外仓

商务部答上海证券报记者提问:推动贸易新业态发展 鼓励企业在中亚建海外仓

商务部答上海证券报记者提问:推动贸易新业态发展鼓励企业在中亚建海外仓
05-26 16:30:23
当前时讯:明新旭腾(605068)5月26日主力资金净卖出49.40万元

当前时讯:明新旭腾(605068)5月26日主力资金净卖出49.40万元

截至2023年5月26日收盘,明新旭腾(605068)报收于22 21元,上涨2 4%,换手率1 74%,成交量9185 0手,成交额2025 27万元。
05-26 15:13:54
环球速讯:国乒单打全部晋级八强,王楚钦/孙颖莎混双力争卫冕

环球速讯:国乒单打全部晋级八强,王楚钦/孙颖莎混双力争卫冕

当地时间5月25日,2023年世乒赛在南非德班进行了男、女单打1 8决赛,男、女双打1 4决赛和混双半决赛的争夺
05-26 14:10:00
痛心!13岁男孩抢救无效死亡!警方通报 每日关注

痛心!13岁男孩抢救无效死亡!警方通报 每日关注

5月24日有网友发视频称,四川广安武胜中学有学生打架,致一名学生身亡。事发后受害者家长发朋友圈称:“...
05-26 13:46:08
索尼 α 6700 将发布?

索尼 α 6700 将发布?

根据SonyRumors爆料,索尼将在接下来的两个月内发布APS-C画幅新机身α6700和FE70-200GMarco镜头。相关规格
05-26 12:58:09
word文档怎么设置页眉页脚页码 word文档怎么设置页眉页脚

word文档怎么设置页眉页脚页码 word文档怎么设置页眉页脚

今天来聊聊关于word文档怎么设置页眉页脚页码,word文档怎么设置页眉页脚的文章,现在就为大家来简单介绍下
05-26 12:06:06
【手慢无】冲刺限时抢购 2022款 iPad Pro 超值优惠

【手慢无】冲刺限时抢购 2022款 iPad Pro 超值优惠

限时好价iPadPro2022款抢购进行中本次活动优惠价格为6196元,iPadPro2022款搭载AppleM2芯片,性能大幅提升
05-26 11:16:26
中国驻瑞典大使馆:请广大旅瑞侨胞谨防虚假恶意电话

中国驻瑞典大使馆:请广大旅瑞侨胞谨防虚假恶意电话

近日,有人冒充中国驻瑞典使领馆人员,通知手机机主到使领馆接受询问。还有人声称为了办案,要将电话转至国
05-26 10:42:12
奥运五环各个颜色分别代表什么意思(奥运五环各个颜色分别代表什么)

奥运五环各个颜色分别代表什么意思(奥运五环各个颜色分别代表什么)

1、奥运五环有蓝、黄、黑、绿、红5种颜色,黄色代表亚洲,黑色代表非洲,蓝色代表欧洲,红色代表美洲,绿色
05-26 09:23:49
环球视讯!黄鱼怎样做好吃又简单?

环球视讯!黄鱼怎样做好吃又简单?

原料:黄鱼1条(黄花鱼)、葱10克、姜5克、蒜3瓣、花生油500克(实耗80克)、料酒20克、酱油15克、盐2克、醋20克
05-26 09:03:14
夏天的夜晚十分美妙,不什么不什么造句_夏天的夜晚十分美妙不不好像造句 焦点速递

夏天的夜晚十分美妙,不什么不什么造句_夏天的夜晚十分美妙不不好像造句 焦点速递

夏天的夜晚十分美妙,不什么不什么造句,夏天的夜晚十分美妙不不好像造句这个很多人还不知道,现在让我们一起
05-26 08:03:33
冰糖雪梨的正确煮法_冰糖雪梨-当前视点

冰糖雪梨的正确煮法_冰糖雪梨-当前视点

1、冰糖炖梨的做法1梨洗净,去皮,切去顶部当做盖子。2、再挖除中间的核2把冰糖放入中间,盖上盖子,把处理
05-26 07:34:24
盈通发布 RX 7600 游戏高手显卡:三风扇 / 蓝白配色,2149 元 世界新资讯

盈通发布 RX 7600 游戏高手显卡:三风扇 / 蓝白配色,2149 元 世界新资讯

盈通发布RX7600游戏高手显卡:三风扇 蓝白配色,2149元,显卡,盈通,gd,rx,amd,三风扇,游戏高手
05-26 06:14:03
小两口演员表_关于小两口演员表的介绍

小两口演员表_关于小两口演员表的介绍

1、《小两口》由北京东方阳光盛通文化艺术公司出品。2、郑晓龙担任总导演,蓝志伟执导,费明、杨丝丝担纲编
05-26 05:24:29
完颜奈剌忽_关于完颜奈剌忽介绍

完颜奈剌忽_关于完颜奈剌忽介绍

1、海陵王不顾辈分和年纪大小,被召之入宫,得到厚宠。2、可见海陵王完颜亮十分淫乱,海陵王比较喜欢奈剌忽
05-26 04:21:37
实时焦点:the mid autumn festival falls(the mid autumn festival作文)

实时焦点:the mid autumn festival falls(the mid autumn festival作文)

1、TheMid-AutumnFestivalisaveryimportantChinesefestival It’sonthefift
05-26 03:23:07
日本限制半导体设备出口必遭反噬|信息

日本限制半导体设备出口必遭反噬|信息

5月23日,日本经济产业省宣布修正了所谓强化高性能半导体制造装置出口管制措施的省令,并明确将于7月23日实
05-26 02:18:03
望岳片组管理案例分享活动在北京御园幼儿园举行 世界新要闻

望岳片组管理案例分享活动在北京御园幼儿园举行 世界新要闻

华声在线5月25日讯(通讯员朱锦)5月25日下午,2023上半年望岳片组管理案例分享活动在长沙市岳麓幼儿教育集团
05-26 01:34:29
打秋风是什么意思呢_打秋风是什么意思

打秋风是什么意思呢_打秋风是什么意思

1、“打秋风”,意谓“因人丰富而抽索之”,故而也叫“打抽丰”,即指假借名义、利用关系向人索取财物或...
05-26 00:53:31
快讯 | Guess 2024财年Q1销售额下滑4%,亚洲收入增长26%

快讯 | Guess 2024财年Q1销售额下滑4%,亚洲收入增长26%

财经网生活讯近日,Guess发布2024财年第一季度业绩报告,披露在截至4月29日的三个月内,Guess销售额下滑4%
05-26 00:48:13
天天热议:马士提夫獒犬图片_马士提夫獒犬

天天热议:马士提夫獒犬图片_马士提夫獒犬

当前大家对于马士提夫獒犬都是颇为感兴趣的,大家都想要了解一下马士提夫獒犬,那么小美也是在网络上收集了
05-25 23:57:21
无公害农产品标志管理办法_关于无公害农产品标志管理办法介绍-焦点日报

无公害农产品标志管理办法_关于无公害农产品标志管理办法介绍-焦点日报

无公害农产品标志管理办法,关于无公害农产品标志管理办法介绍这个很多人还不知道,现在让我们一起来看看吧
05-25 22:35:47
总投资约10亿元!云谷中理光电元宇宙产业园落户云梦|世界快播

总投资约10亿元!云谷中理光电元宇宙产业园落户云梦|世界快播

5月24日,云梦县人民政府与利亚德光电集团举行云谷中理光电元宇宙产业园签约仪式。县委书记高文峰、县长方
05-25 21:58:19
求男主塞女主道具小说_热讯

求男主塞女主道具小说_热讯

1、媚骨香,弃后戏冷皇,。2、应该是这个没错的。本文就为大家分享到这里,希望小伙伴们会喜欢。
05-25 20:47:07
巴林首次直接接入全球有线电视系统

巴林首次直接接入全球有线电视系统

中国商务新闻网是商务部国际商报社主办,国家互联网信息办公室批准的国家一类新闻网站,是全国商务系统网络
05-25 19:41:36

为您推荐

精彩推送