打造测试框架实战-参数化与数据驱动

参考资料

  • jackson
  • yaml
  • 切换为6.0版本的模拟器
  • app使用雪球

参数化

数据驱动

价值

  • 简化自动化测试技术
  • 规范领域测试模型
  • 数据驱动与API可以结合
  • 自动生成用例:分析的结构化数据,生成代码格式的用例非常复杂,直接保存为数据格式更好的
  • 与云平台对接:数据保存到了数据库的表结构里,数据的传输转换也更适合使用数据。

TDD风格的测试体系:基于api的测试框架已经可以满足绝大多数人的需要了。 junit+testng+po+param,适合测试开发
DDT风格的测试体系:非测试开发人员(业务测试、产品,研发、甲方),平台(与其他框架对接,自动生成、框架切换、平台调度)

TDD风格优点是IDE的智能操作,比如重构,自动提示很强。DDT会缺失IDEd强大支持。
通常是建议做DDT也要结合TDD,同时提供api风格的框架。

模型(Model)

把领域知识用class+method 进行表达(OOP理念)

  • PO的模型需要独立的:restful、资源对象+行为+状态
  • 自动化领域模型:web app service
  • 测试用例的模型会引用其他的模型定义:xUnit
2 Likes

占楼

Windows环境下使用getpath取出来的路径前面多一个/,要如何处理一下?

1 Like

封装的UI自动化测试框架中,哪些代码需要写到 src/main 下,哪些需要写到 src/test 下呢?
我理解 PageObject 这些根据被测系统抽象出来的内容,就是被测系统的代码形式,需要写到 src/main 下。咱们可以在 src/test 下写 dataProvider(parameter)这些内容,因为跟测试用例关联密切,并且 Junit 5 这些测试框架里的一些注解默认都是识别 src/test 下的路径。
封装的webdriver、对页面行为的代码描述、以及对 selenium api的封装都是需要写在 src/main 下,需要通过 src/test 里的代码去测试的。

RF这样的测试关键字驱动框架:
1 .感觉把各种关键字拆的太细了,又得学习新的一套关键字而且还不够好用
2. 一旦用例用各种封装的关键字去完成了,层次太多用例太重了,数据和业务都混在一起组织,调试起来很痛苦
3. 不同人封装的步骤差异化太大,互相看不懂为什么那样去做

咱们封装的基于 yaml 的测试用例,可以看成是 BDD(基于行为的测试)吗?是不是类似于 cucumber 呢?

测试框架里可以使用 spring 的依赖注入、AOP、自动配置这些方法来封装吗?

与springboot结合,利用springboot的自动配置和依赖注入,将webdriver的创建和关闭以及其它page类的创建依赖管理交给spring,测试人员可以专注编写测试用例。

这几天在用 spring boot 2 + selenium-jupiter(支持 selenide) + allure 来封装 UI自动化测试框架框架,觉得结合起来很强大,就是要想办法让这些框架、工具整合好,用正确的方式打开~

顺便问下,大家觉得 selenide 怎么样(对web测试支持较好)?

关于PO封装,有什么比较好的方式来决定一个子页面是否应该建对应的PO(或者直接挂在父PO下);
做练习的时候发现每跳转到一个页面都封装一个PO的话,会有很多重复工作,而且测试用例中链式调用时会比较长

1 Like

用getResource+资源定位符,这样就不用处理路径了。

你说的selenide是录脚本的那个,还是封装了selenium那个工具
后者我觉得可以直接用,它把selenium封装得很简单;如果想自己封装,也可以参考它的源码~

你的理解是正确的。

测试用例放到test下。其他的封装都要放到main下。这样也方便后面自动生成对应的单测用例。
测试用例需要分2个体系

  • 同包名下存放的是自己封装框架的单元测试用例
  • 使用自己封装的框架做的业务测试用例可以放到其他的包下面

可以理解为一个为ut,一个it

2 Likes

恩,总结的也很好,封装、调试,问题定位也都很麻烦。

可以这么封装的。aop与自动配置就是一种简化设计的方法。appium自带的po支持就是使用的这个模式。spring boot太重,各种注解满天飞,不利于入门的,不过用来做基础应该也会不错,你可以试试,分头分享下。

selenide没有本质的改变,只是在selenium上累加语法糖和改进,不会太流行。至少是比不过cypress那样有突破。

1 Like

好的,公司(国内老牌证券公司)的测试团队成立半年多,UI自动化也是刚开始搞,我按这个思路搞一两周出一版,然后跟大家分享交流下,后续使用过程中再慢慢打磨。

今天完成了Jenkins的Linux服务器搭建,并且使用Jenkins自动从SVN更新UI自动化项目代码,使用Selenium的RemoteWebDriver请求远程windows server的浏览器运行测试用例,使用Jenkins的allure插件生成测试报告并发送邮件通知。

这周梳理下,分享出来,大家交流交流~

1 Like

昨天晚上课上看到了,谢谢

占楼

关闭