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

Posted 软件测试呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了要做自动化测试,得了解一下自动化架构是什么相关的知识,希望对你有一定的参考价值。

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

架构是什么

软件架构(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:测试包管理:

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



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

读取文件信息

启动浏览器

获取当前系统时间等



report:

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



调试日志:便于自动化脚本编写人员调试代码



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



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



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



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



Appium自动化测试结构



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



APP:测试包管理:

|-------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

|--------|----------runlog.log


|--------|----------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。

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

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

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

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击加入我们 1/0/3-3/4/8-2/9/8/4,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

以上是关于要做自动化测试,得了解一下自动化架构是什么的主要内容,如果未能解决你的问题,请参考以下文章

接口自动化测试要做什么?

什么是接口测试?为什么要做接口测试?

什么是接口测试?为什么要做接口测试?

软件测试工程师如何从功能测试转成自动化测试?

什么是接口测试?为什么要做接口测试?建议收藏

pytest接口自动化测试框架 | 为什么要做pytest插件的二次开发