以并发自动化框架为例,随着业务的增长,自动化测试用例的数量也会随之增加,最明显的问题就是自动化测试执行的时间会越来越长,这个是自动化测试中遇到的一个很普遍的痛点,为了解决这个痛点,当时提出要做并发自动化测试,当然,东西要落地,还是需要论证的:
提高执行效率和收益:
但同时也会带来成本:
好了,结合我们的业务,满足做自动化测试的条件的项目有两个移动端和一个网页端,于是,我们就罗列出测试需求:
结合分析上述的需求,我们提出了这次测试工程的目标:用一句命令将整个并发自动化测试的过程执行起来,有了目标之后,下一步就可以进行测试设计了
1、技术选型:
项目 | 作用 |
---|---|
Appium | 移动端支撑 |
Selenium | Web 端支撑 |
Python | 跨平台,实现支撑 |
RobotFramework | 易用性,测试执行支撑 |
Docker | 测试环境支撑 |
Xterm | Mac 上多窗口服务支撑 |
2、设计方案:
方案 | 描述 |
---|---|
并发方案 | 1、按测试套件分配,使用 RF 中的 tag 作为区分标记 2、为同时满足 mac 和 win 上的并发执行,采用多进程的方式,按测试套件 tag 分配并发 |
环境方案 | 1、Web 端环境:Docker 的浏览器镜像 +Selenium-Grid 镜像集群 2、移动端环境:多台真机或模拟器(Android 的无线调试,iOS 也支持) |
分配方案 | 1、移动端:一个 tag 对应一台设备和一个 appium 服务 2、Web 端:一个 tag 的对应一个浏览器 |
3、难点解决方案:
难点 | 解决方案 |
---|---|
设备 udid 获取 | 获取 udid 构造成设备列表: 1、Android:adb devices 2、iOS:idevice_id –l 输入参数获取对应类型的设备 udid |
Appium 启动方式 | 1、根据设备数量或输入的参数值自启动对应的数量的 Appium 服务 2、自动根据参数和系统识别以 sh 或 bat 的形式启动 3、用到的端口:服务端口,bootstrap 端口,wda 端口 范围: Android:默认 4723,5723 开始加一启动 iOS:默认 14723,8101 开始加一启动 |
设备和 appium 对应的方式 | 1、默认接入的第一台设备对应第一个启动的 appium 服务,以此类推 2、可选择以第 N 台接入的设备开始来执行自动化测试 |
环境和测试类型 | 1、自动识别是 Mac OS 还是其他操作系统,以执行不同的命令类型 2、参数化要支持测试设备的类型 |
当然,对于方案自身还有其他亮点我们也可以一一攻破:
有了上面的方案设计,能够清晰地指引我们如何去实现一个测试框架来满足我们对并发自动化测试的需求
通过设计以后,我们能够清晰地得到框架的架构图,这也是我们要实现的东西
对于移动端
对于 Web 端
这两幅图在帖子 1:Web 应用并发自动化测试和帖子 2:两句命令实现移动端并发自动化测试也有,具体的实现在文章中也有详细的讲到,其实帖子 1 就是帖子 2 的雏形,帖子 2 将移动端和 Web 端都整合起来得以实现(具体可以看帖子 2 下的更新评论),其落地的效果在帖子中也提到过,套路基本上是这样子,以工程化的模式,带点产品的思维来实现测试工具和测试方案