自动化架构是啥,怎么理解自动化测试架构?(一)

什么是自动化测试架构,您如何理解它?我们可以从以下几点慢慢讨论这个问题。

什么是架构

软件架构是一组相关的抽象模式自动化测试脚本编写,它们指导大型软件系统的各个方面的设计。

软件架构是一个系统的草图,软件架构所描述的对象是直接构成系统的抽象组件,各个组件之间的联系以清晰和相对详细的方式描述了组件之间的通信。

在实现阶段,这些抽象组件被提炼成实际的组件,例如特定的类或对象。在面向对象领域,组件之间的连接通常通过接口来实现。

官方的解释比较模糊,可能不涉及架构大佬。这部分仍然存在一些歧义。说白了:软件架构是软件的基本结构,而架构的本质是管理复杂性。可以完成特定行为的界面和元素的一些组合。

展开来说,虽然有很多架构模式,但这些是最常用的:

分层架构

事件驱动架构

微内核架构(又名插件架构)

微服务架构

云架构

关于这些架构模式的构成和思路,这里就不展开讨论了,否则就跑题了。

该架构的设计思想是高度可重用的

一套框架用于解决不同产品线的基础服务建设工作,方便企业通过参考框架整合不同产品线的自动化实现。

易于维护

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

人员分离、专一性

业务人员只关注业务代码的脚本,不需要关注框架技术问题。架构师只关注框架技术的实现,不需要学习业务线的具体业务知识。

建筑师的考虑

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

2、核心技术的选择:

网页:硒

应用程序:Appium

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

4、用例设计规范。

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

为什么使用模式

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

同时,架构师、脚本编写者和用例执行者可以分开:

架构老大:精通代码设计

脚本专家:理解代码

用例执行老大:你看不懂代码

将 UI 对象分配给自定义变量可增强脚本的可读性,并通过封装 WebDriver API 使其更加健壮。

将常用的业务场景封装成业务方法,方便常用业务的复用,将常用脚本单独封装,避免脚本执行者修改测试脚本代码。

生成调试级别的日志,使自动化脚本调试器更容易调试程序。

生成回归级别的测试报告,让不懂脚本的人可以查看测试结果,参考Suite执行多个脚本,管理正在运行的脚本。

类库Web UI自动化测试结构设计结构

config配置文件:将经常需要修改的信息(如用户名、密码、环境等)保存在配置文件中,以供频繁调用。

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

读取文件信息

启动浏览器

获取当前系统时间等

报告:

测试报告:向项目经理、产品经理和老板汇报

调试日志:让自动化脚本编写者轻松调试代码

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

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

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

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

Appium自动化测试结构

其实和Web UI类似,因为是基于Pageobject设计模式,所以照搬我之前写的框架结构就好了。

APP:测试包管理:

1config 配置文件:把经常需要修改的信息(例如用户名、密码、环境)保留在配置文件中,以便经常调用。 2 3 4 5common 公共方法:提供与WebDriver无关,但与自动化测试相关的API,包括: 6 7读取文件信息 8 9启动浏览器 10 11获取当前系统时间等 12 13 14 15report: 16 17测试报告:向项目经理、产品经理和老板汇报 18 19 20 21调试日志:便于自动化脚本编写人员调试代码 22 23 24 25objectView:保存页面中的元素,当UI变化时修改对应变量即可,将可读性差的UI元素按照统一规则命名 26 27 28 29Corelib:封装WebDriver的API,使其更加健壮,形成自动化项目的API。提供断言的相关方法,自动化API提供详细的输出消息,便于调试,自动化API提供向测试报告中写入消息的方法。 30 31 32 33businessView:业务方法的封装,根据Corelib中的提供的API,把常用的业务场景封装成方法便于复用。 34 35 36 37data:保存输入的数据信息,作为架构与外部文件的接口。 38 39 40 41Appium自动化测试结构 42 43 44 45其实和Web UI的差不多,因为都是基于Pageobject 设计模式,这里就直接copy我之前写的框架结构就好。 46 47 48 49APP:测试包管理: 50 51

|——-baseView:一些基础类的封装:

1|--------|-------find_element() 2|--------|--------find_elements() 3|--------|--------get_window_size() 4 5

public:公共方法的封装:

1 2|--------|----------common_fun.py 3|--------|-------------|--------check_cancel_Btn() 4|--------|-------------|--------check_ship_Btn() 5|--------|-------------|--------get_screenSize() 6|--------|----------desired_caps.py 7|--------|-------------|--------driver驱动封装 8|--------|-------------|--------日志配置文件封装 9|--------|-------------|--------启动APP配置参数 10|--------|----------myunit.py 11|--------|-------------|--------测试用例启动、关闭的封装 12 13

businessView:业务逻辑封装:

1 2|--------|----------loginView.py 3|--------|-------------|--------登录相关的操作和方法 4|--------|----------registerView.py 5|--------|-------------|--------注册相关操作和方法 6 7

config:存放配置文件:

1 2|--------|----------caps.py 3|--------|-------------|--------capability数据配置 4|--------|----------log_conf.py 5|--------|-------------|--------日志配置文件 6 7

数据:存储数据驱动器:

1 2|--------|----------account.csv 3|--------|-------------|--------用户名、密码 4 5

log:存储生成的日志:

1 2|--------|----------runlog.log 3 4

|———|———runlog.log

1 2|--------|----------report.html 3 4

截图:保存截图。

test_case:存储测试类的模块:

1 2|--------|----------test_login.py 3|--------|-------------|--------登录测试类封装:LoginTest 4|--------|-------------|--------调用LoginView类的方法来编写用例 5|--------|----------test_register.py 6|--------|-------------|--------注册测试类封装:RegisterTest 7|--------|-------------|-------调用RegisterView类的方法来编写用例 8 9

test_run:执行测试脚本:

1 2|--------|----------run.py 3|--------|-------------|--------自动化测试用例执行入口 4|--------|-------------|--------生成测试报告 5 6

使用架构遇到的坑

接下来简单说一下项目中遇到的几个坑。

页面元素发生变化,那么如何更新 UI 变量呢?

只需更新objectView。

框架已经封装的方法,但是脚本作者没有调用,怎么办?

这是我检查脚本时发现的。遇到此类问题,必须及时通知、提醒、纠正。这不是怕一万,而是以防万一!

脚本执行失败,如何判断是架构API的问题还是程序本身的缺陷?

这个问题我问过求职者,答案五花八门,就不多说了。

有两个问题:

首先检查失败的原因,至于如何检查,看日志;

手动验证此功能。

当前架构的API无法满足当前项目的需求,如何扩展?

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

在架构中编写一个继承Corelib的新类,并在该类中完成API。

注意:通常,架构师会这样做。

当架构需要添加新功能时,它需要如何连接?

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

如果你不想自己野蛮成长,找不到系统信息自动化测试脚本编写,遇到问题得不到帮助,坚持几天就放弃了,可以点击加入我们1/0/3-3 /4/8-2/9/ 8/4,大家可以一起讨论交流,会有各种软件测试资料和技术交流。

打字不容易。如果这篇文章对你有帮助,请点赞和订阅,给作者一个鼓励。也方便你下次快速找到。

© 版权声明
THE END
喜欢就支持一下吧
点赞281 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片