要做自动化测试,得了解一下自动化架构是什么

自动化测试架构是啥,怎么理解自动化测试架构?这个问题,我们可以从以下几点来慢慢说。

架构是什么

软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。

软件架构是一个系统的草图,软件架构描述的对象是直接构成系统的抽象组件,各个组件之间的连接则明确和相对细致地描述组件之间的通讯。

在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。

官方解释的比较模糊,可能没涉及到架构的大佬,对这部分还是有一些模糊,我直接大白话说一下:软件架构就是软件的基本结构,架构的本质是管理复杂性,由各个组件及其接口、元素构成的一些能够完成特定行为的组合。

扩展一下,架构模式虽然有很多种,但是常用的也就是这几种:

  • 分层架构
  • 事件驱动架构
  • 微核架构(又称插件架构)
  • 微服务架构
  • 云架构

关于这些架构模式的构成及思想,我们就不在这里讨论了,不然就跑题了。

架构的设计思想

高复用性

用一套框架来解决不同产品线的基础服务构建工作,通过引用框架方便公司对不同产品线的自动化实施进行整合。

易维护性

如果对框架的技术进行扩展,则只需要维护这一套框架即可,不需要根据产品线的不同,维护多套框架,节省时间、节省成本。

人员分离,专一性

业务人员只关注业务代码的脚本编写,不需要去专注框架技术上的问题。架构人员只针对框架技术的实现,不需要对业务线的具体业务知识进行学习。

架构师考虑点

1、编码的选择:Java、Python、Ruby等。

2、核心技术的选择:

Web:Selenium

APP:Appium

3、编码规范:类、方法、变量的命名方式。

4、用例设计规范。

5、代码管理方式:git or svn。

为什么要使用架构

核心:解决脚本录制的常见问题,使得自动化稳定。

同时可以把架构人员、脚本编写人员、用例执行人员分开:

架构大佬:精通代码设计

脚本编写大佬:了解代码

用例执行大佬:可以不懂代码

把UI对象通过自定义变量的方式赋值,增强了脚本的易读性,通过封装WebDriver的API,使其更加健壮。

把常用的业务场景封装成业务方法,便于常用业务的复用,把共通的脚本单独封装,避免了脚本执行人员对测试脚本代码的修改。

生成Debug级别的log,使自动化脚本调试人员方便调试程序。

生成回归级别的测试报告,便于不懂脚本的人员查看测试结果,引用Suite执行多个脚本,进行运行脚本的管理。

类库的设计结构

Web UI 自动化测试结构

config 配置文件:把经常需要修改的信息(例如用户名、密码、环境)保留在配置文件中,以便经常调用。

common 公共方法:提供与WebDriver无关,但与自动化测试相关的API,包括:

  • 读取文件信息
  • 启动浏览器
  • 获取当前系统时间等

report:

  • 测试报告:向项目经理、产品经理和老板汇报
  • 调试日志:便于自动化脚本编写人员调试代码

objectView:保存页面中的元素,当UI变化时修改对应变量即可,将可读性差的UI元素按照统一规则命名

Corelib:封装WebDriver的API,使其更加健壮,形成自动化项目的API。提供断言的相关方法,自动化API提供详细的输出消息,便于调试,自动化API提供向测试报告中写入消息的方法。

businessView:业务方法的封装,根据Corelib中的提供的API,把常用的业务场景封装成方法便于复用。

data:保存输入的数据信息,作为架构与外部文件的接口。

Appium自动化测试结构

其实和Web UI的差不多,因为都是基于Pageobject 设计模式,这里就直接copy我之前写的框架结构就好。

APP:测试包管理:

复制代码
|--------|-------如xx.apk

|-------baseView:一些基本类的封装:

复制代码
|--------|-------find_element()
|--------|--------find_elements()
|--------|--------get_window_size()

public:公共方法的封装:

复制代码
|--------|----------common_fun.py
|--------|-------------|--------check_cancel_Btn()
|--------|-------------|--------check_ship_Btn()
|--------|-------------|--------get_screenSize()
|--------|----------desired_caps.py
|--------|-------------|--------driver驱动封装
|--------|-------------|--------日志配置文件封装
|--------|-------------|--------启动APP配置参数
|--------|----------myunit.py
|--------|-------------|--------测试用例启动、关闭的封装

businessView:业务逻辑封装:

复制代码
|--------|----------loginView.py
|--------|-------------|--------登录相关的操作和方法
|--------|----------registerView.py
|--------|-------------|--------注册相关操作和方法

config:存放配置文件:

复制代码
|--------|----------caps.py
|--------|-------------|--------capability数据配置
|--------|----------log_conf.py
|--------|-------------|--------日志配置文件

data:存放数据驱动:

复制代码
|--------|----------account.csv
|--------|-------------|--------用户名、密码

log:存放生成日志:

复制代码
|--------|----------runlog.log

report:存放测试报告:

复制代码
|--------|----------report.html

screenshots:存放截图。

test_case:存放测试类的模块:

复制代码
|--------|----------test_login.py
|--------|-------------|--------登录测试类封装:LoginTest
|--------|-------------|--------调用LoginView类的方法来编写用例
|--------|----------test_register.py
|--------|-------------|--------注册测试类封装:RegisterTest
|--------|-------------|-------调用RegisterView类的方法来编写用例

test_run:执行测试脚本:

复制代码
|--------|----------run.py
|--------|-------------|--------自动化测试用例执行入口
|--------|-------------|--------生成测试报告

使用架构遇到的坑

接下来,我就简单说几个,在项目中出现的遇到的坑。

页面元素变化,那么怎么更新UI的变量呢?

只要更新objectView 即可。

框架已封装的方法,编写脚本大佬不调用,怎么办?

这是我在check脚本的时候发现的,遇到这种问题,就要及时通知、及时提醒、及时修正。这就是不怕一万就怕万一啊!

脚本执行fail,怎么确定是架构API的问题,还是程序本身的缺陷?

这个问题,我问过求职者,回答啥的都有,咱就不说了,直接说从哪里验证吧。

出现问题,无非就两点:

先查看fail的原因,至于怎么查,要看log;

手工验证此功能。

当前架构的API无法满足当前项目的需要,怎么扩展?

直接重写架构的API或者添加API(看无法满足情况,再根据实际情况,一般添加API即可);

写一个新类继承架构中的Corelib,在这个类中完善API。

注:一般情况架构师就搞定了。

当架构需要添加新功能时需要如何接入?

写一些类完成所需功能,然后提供调用接口在架构中使用。

在这里还是要推荐下我自己建的软件测试学习Q群:1150305204,群里都是学测试的,如果你想学或者正在学习测试,欢迎你加入,大家都是测试党,不定期分享干货(只有软件测试相关的),包括我自己整理的一份2024最新的Python自动化测试进阶资料和零基础教学,欢迎进阶中和对测试感兴趣的小伙伴加入!

相关推荐
七夜zippoe1 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
yunteng5212 小时前
通用架构(同城双活)(单点接入)
架构·同城双活·单点接入
湘-枫叶情缘2 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
麦聪聊数据3 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
Fcy6483 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满3 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠3 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
程序员侠客行3 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
Harvey9033 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技5 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市