您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
Laputa自动化测试框架介绍
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
Laputa自动化测试框架介绍
自猿其说Tech
2022-03-24
IP归属:未知
657240浏览
测试
### 1 前言 Laputa自动化框架(以下简称Laputa)由运力平台技术部测试团队自主开发,基于 Pytest 集成了对API接口自动化, 以及对 Web应用, 移动端应用和 Windows 桌面应用等 UI 自动化的能力。框架本身聚焦于提供自动化测试能力,目前已应用到3个四级敏捷团队和8个三级敏捷团队的测试流程。本文意在介绍框架的设计架构和实践分享。 ### 2 框架介绍 **Laputa Web** Laputa提供Web界面工具, 便于配置执行规则,关联执行脚本, 触发用例执行,查看执行结果。 **Laputa CI** 提供CI集成服务,调用Jenkins API跟踪持续集成结果,开放接口,实现流水线自动化测试。 **Laputa 功能框架** Laputa提供自动化测试能力,各个业务脚本以模块的形式集成到框架下,支持已有python脚本无缝对接。 框架结构 ![](//img1.jcloudcs.com/developer.jdcloud.com/17b0dc4c-8f24-474e-bf8d-4ca2d25a645120220324111853.png) 框架模块拆解 ![](//img1.jcloudcs.com/developer.jdcloud.com/f26eac42-1b0f-41e4-b6dd-d597f504473e20220324111911.png) ### 3 框架特点 #### 3.1 优势分析 - 支持多种敏捷开发模式(TDD、BDD) - 无缝对接京东集团持续集成平台(行云、Bamboo) - 支持多端自动化测试(UI、接口、APP、Win桌面) - 支持多种形式结果展示(Excel、HTML、Allure、邮件) #### 3.2 设计分析 **框架设计核心模块,包括公共服务层和业务脚本层。** 公共服务层基于pytest,集成selenium/appnium和requests,提供Web/APP的UI自动化和API自动化测试能力。同时框架封装pymysql/cx_Oracle读取数据源,logger日志监控服务,Executor场景执行器,apscheduler定时调度器等,便于支撑更加复杂的测试场景。 业务脚本层作为底层支柱,直接利用框架本身公共服务,完成满足业务逻辑用例编写。运行时只需通过公共服务层的统一run.py入口,区分执行范围批量执行脚本。 ### 4 应用实践 #### 4.1 UI实践 UI 自动化测试常见的测试模型 Page Object Model 和 Screenplay Pattern, 可以根据业务需要自行选择合适的测试模型。Laputa 使用二者相结合的方式实现UI自动化。 以登录页面为例, 首先定义登录页面的 Page Object: ```python class LoginPage: """登录页面模型(Login Page Object) 承载登录页面元素(Element)及元素所支持的动作(Action) """ def __init__(self): """初始化 WebUI 自动化能力""" self.web_ui = LaputaWebUI() @property def txt_username(self): """用户名文本框""" return self.web_ui.find_element(id_='username') @property def txt_password(self): """密码文本框""" return self.web_ui.find_element(id_='password') @property def btn_login(self): """登录按钮""" return self.web_ui.find_element(class_name='submit_btn') def input_username(self, username): """输入用户名""" self.txt_username.send_keys(username) log.info(f"输入用户名: {username}") def input_password(self, password): """输入密码""" self.txt_password.send_keys(password) log.info("输入密码: ********") def click_login_button(self): """点击登录按钮""" self.btn_login.click() log.info("有效的用户可以正常登录系统 通过") ``` 然后定义对应的 Task: ```python class LoginTask: def __init__(self): self.loginPage = LoginPage() def login(self, url, username, password): """登录系统""" self.loginPage.web_ui.driver.get(url) self.loginPage.input_username(username) self.loginPage.input_password(password) self.loginPage.click_login_button() self.loginPage.web_ui.wait(5).until_title_is("欢迎页面") log.info(f"用户 {username} 成功登录 {url} 系统") return True def reset(self): """重置用户名和密码文本框""" self.loginPage.txt_username.clear() self.loginPage.txt_password.clear() log.info("重置用户名和密码") ``` 根据用户行为设计测试用例 ```python def test_login_as_valid_user(): """有效的用户可以正常登录系统""" url = 'http://example.com/app/sign-in/' login_task = LoginTask() login_successfully = login_task.login(url, "valid_user", "valid_pwd") assert login_successfully log.info("有效的用户可以正常登录系统 通过") ``` #### 4.2 API实践 **JSF调用** 目前使用JSF发布jsf协议的接口。在支持tcp长连接的同时,也支持http短连接调用。 采用的序列化是 **JSON 序列化**。 传参格式参考文档:https://cf.jd.com/pages/viewpage.action?pageId=321653139 ```python def test_jsf_get_carrier_price_list(): """获取结算运价""" payload = """ [ { "@type":"com.jd.tms.basic.dto.CarrierPriceParamDto", "carrierCode": "C171109000030", "businessType": 14, "time": "2020-10-22 11:10:15" } ] """ res = laputa_api.post( url='http://10.170.220.22:22000/com.jd.tms.basic.ws.CarrierQueryWS/TMS-BASIC-TEST/getCarrierPriceList/', data=payload, timeout=10 ) assert res.status_code == 200 assert res.json().get('data').get('carrierCode') == 'C171109000030' log.info(f'验证返回结果包含承运商编码通过') ``` **HTTP调用** ```python def http_get_options_from_tms_dict(**kwargs): """查询基础配置--车型""" params = kwargs['params'] cookies = get_cookie() res = laputa_api.post( url=f"{rfq_http_url}/basic-data/getOptionsFromTmsDict", data=params, timeout=10, cookies=cookies , headers={"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} ) assert res.status_code == 200 log.info(f'查询基础配置的车型列表{res.json()}') return res.json ``` #### 4.3 结果展示 邮件展示 ![](//img1.jcloudcs.com/developer.jdcloud.com/66dbcca5-d510-49c5-b080-ebd40cf6306f20220324112336.png) HTML展示 ![](//img1.jcloudcs.com/developer.jdcloud.com/795fa73f-f964-462a-af94-de85bd69a30c20220324112413.png) Allure展示 ![](//img1.jcloudcs.com/developer.jdcloud.com/94b7f668-dd73-445e-b4e2-6020972efc8720220324112431.png) #### 4.4 持续集成 通过行云/Bamboo流水线触发执行任务 通过行云-->CI/CD-->pipeline-->创建空间--创建流水线的配置,自定义sh脚本,通过UUID指定触发laputa自动化执行 ![](//img1.jcloudcs.com/developer.jdcloud.com/ef473bcb-7829-4144-a3d7-80e612a7e79c20220324112503.png) Jenkins持续集成Allure报告 ![](//img1.jcloudcs.com/developer.jdcloud.com/41ece72d-27ad-432d-83e4-2aa5b242012b20220324112534.png) 项目执行结果汇总 ![](//img1.jcloudcs.com/developer.jdcloud.com/1fd488d5-b8d2-4b1d-b492-54ec68d45e5920220324112552.png) ### 5 合作业务 目前框架支持10个三级部门共42个项目包含web UI、Windows UI和接口脚本,保证400+天、4200+任务的稳定执行。 ![](//img1.jcloudcs.com/developer.jdcloud.com/30261157-aea3-4f09-b505-0eecd58fa8fa20220324112632.png) ![](//img1.jcloudcs.com/developer.jdcloud.com/03ed09e4-1b19-4805-88a7-377a8810852d20220324112648.png) ### 6 总结 目前集团现有较多自动化测试平台,很多团队也会根据自己业务定制化框架,但大多数集中在脚本执行阶段。未来Laputa框架会增加对执行过程数据的度量和分析的开源服务,便于用户和非本框架用户通过度量服务,从整体上了解自动化测试的运行现状及其所带来的价值。期待大家随时与我们沟通交流,一起碰撞出适合更多敏捷团队的自动化平台。 ------------ **自猿其说Tech-京东物流技术与数据智能部 作者:刘红妍**
原创文章,需联系作者,授权转载
上一篇:搜索中常见数据结构与算法探究(二)
下一篇:Docker与虚拟化技术浅析第一弹之docker与Kubernetes
相关文章
安全测试之探索windows游戏扫雷
Jmeter压测实战:Jmeter二次开发之JSF采样器实现
Laputa自动化测试框架介绍
自猿其说Tech
文章数
426
阅读量
2149963
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
自猿其说Tech
文章数
426
阅读量
2149963
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号