深入浅出聊一聊自动化架构!

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 深入浅出聊一聊自动化架构!

面试官:小鱼,你来说说自动化测试架构是啥,怎么理解自动化测试架构?

小鱼心想:挖草~ ~ 你这个坑,你这一个问题,我都能写一篇文章了。奈何心里这样想的,也不能就这样表达出来,于是乎,

小鱼就说:嗯,这问题,我可以从以下几点来慢慢说。


架构是个啥东西


软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。

----->>>>官方解释的比较模糊,可能没涉及到架构的大佬,对这还是有一些模糊,

----->>>>小鱼直接大白话说一下:软件架构就是软件的基本结构,架构的本质是管理复杂性。由各个组件及其接口、元素构成的一些能够完成特定行为的组合。

扩展一下:

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

①分层架构

②事件驱动架构

③微核架构(又称插件架构)

④微服务架构

⑤云架构

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


架构的设计思想


1.高复用性:

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

2.易维护性

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

3.人员分离,专一性

业务人员只关注业务代码的脚本编写,不需要去专注框架技术上的问题;

架构人员只针对框架技术的实现,不需要对业务线的具体业务知识进行学习。

4.架构师考虑点:

①编码的选择

>> java ,python,ruby等

②核心技术的选择

>> Web: selenium

>>APP: Appium

③编码规范

>>类、方法、变量的命名方式

④用例设计规范

⑤代码管理方式

>> git or svn


为啥要使用架构


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


1.把架构人员、脚本编写人员、用例执行人员分开;

>>架构大佬:精通代码设计

>>脚本编写大佬:了解代码

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

2.把UI对象通过自定义变量的方式赋值,增强了脚本的易读性;

3.通过封装Webdriver的API,使其更加健壮;

4.把常用的业务场景封装成业务方法,便于常用业务的复用;

5.把共通脚本单独封装,避免了脚本执行人员对测试脚本代码的修改;

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

>> 关于log的级别,可以阅读这篇文章,Python的logging模块。

7.生成回归级别的测试报告,便于不懂脚本的人员查看测试结果;

8.引用Suite执行多个脚本,进行运行脚本的管理;


类库的设计结构


1.Web UI 自动化测试结构


config 配置文件:

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


common 公共方法

提供与Webdriver无关,但与自动化测试相关的API,包括:

①读取文件信息

②启动浏览器

③获取当前系统时间等


report

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

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


objectView

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


Corelib

1.封装webdriver的api,使其更加健壮,形成自动化项目的api

2.提供断言的相关方法

3.自动化api提供详细的输出消息,便于调试

4.自动化api提供向测试报告中写入消息的方法


businessView

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


data

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


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

|--------|-------------|--------自动化测试用例执行入口

|--------|-------------|--------生成测试报告


如果觉得不太直观,可以参照小鱼写过的这篇文章:

《Appium自动化框架从0到1之 框架结构组成》

注:

因为不同的项目,可能封装的结构有区别,但是,万变不离其中,只要掌握了其中的思想,无非就是,如: log文件是单独拉出来,还是归于repor文件夹下。

就是这么简单。。


使用架构遇到的坑


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

1.页面元素变化,那么怎么更新ui的变量呢

>>只要更新objectView 即可

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

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

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

>>这个问题,小鱼问过求职者,回答啥样子的都有,咱就不说了,咱直接说从哪里验证吧: 出现问题,无非就两点:

①先查看fail的原因,怎么查,看log;

②手工验证此功能;

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

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

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

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

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

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


大佬之所以叫大佬,都是踩着坑过来的;

不要去羡慕那些大佬,因为他们曾经也是菜鸟;


俗话说:

你不采坑,怎么成为大佬;

你不背锅,怎么成为老大。


愿每个人都能成为大佬中的老大

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
运维 监控 Cloud Native
自动化运维的魔法书云原生之旅:从容器化到微服务架构的演变
【8月更文挑战第29天】本文将带你领略自动化运维的魅力,从脚本编写到工具应用,我们将一起探索如何通过技术提升效率和稳定性。你将学会如何让服务器自主完成更新、监控和故障修复,仿佛拥有了一本能够自动翻页的魔法书。
|
6天前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
1月前
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。
|
1月前
|
运维 Devops 应用服务中间件
自动化运维的利剑:Ansible在现代IT架构中的应用
【10月更文挑战第42天】本文旨在揭示自动化运维工具Ansible如何革新现代IT架构,通过简化配置管理和部署流程,提升效率和可靠性。我们将探索Ansible的核心功能、语言特性以及其在DevOps文化中的角色。文章还将展示如何借助Ansible构建模块化和可重用的配置代码,实现快速迭代与部署,并确保系统一致性。通过阅读本文,运维人员将了解如何利用Ansible优化日常任务,加速产品上线速度,同时提高系统的稳健性。
41 5
|
5月前
|
机器学习/深度学习 人工智能 运维
自动化运维在现代IT架构中的关键角色
【7月更文挑战第8天】随着技术的快速发展,自动化运维成为企业追求高效、稳定IT服务的重要策略。本文将探讨自动化运维如何优化工作流程、提升系统稳定性和安全性,以及它在现代IT架构中不可或缺的地位。
56 1
|
2月前
|
Kubernetes 持续交付 Docker
探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
【10月更文挑战第18天】探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
104 2
|
2月前
|
存储 运维 监控
高效运维:从基础架构到自动化管理的全面指南
【10月更文挑战第11天】 本文将深入探讨如何通过优化基础架构和引入自动化管理来提升企业IT运维效率。我们将从服务器的选择与配置、存储解决方案的评估,到网络的设计与监控,逐一解析每个环节的关键技术点。同时,重点讨论自动化工具在现代运维中的应用,包括配置管理、持续集成与部署(CI/CD)、自动化测试及故障排除等方面。通过实际案例分析,展示这些技术如何协同工作,实现高效的运维管理。无论是IT初学者还是经验丰富的专业人员,都能从中获得有价值的见解和实操经验。
103 1
|
7月前
|
运维 监控 Docker
构建高效微服务架构:从理论到实践构建高效自动化运维体系:Ansible与Docker的完美融合
【5月更文挑战第31天】 在当今软件开发的世界中,微服务架构已经成为了实现可伸缩、灵活且容错的系统的关键策略。本文将深入探讨如何从零开始构建一个高效的微服务系统,涵盖从概念理解、设计原则到具体实施步骤。我们将重点讨论微服务设计的最佳实践、常用的技术栈选择、以及如何克服常见的挑战,包括服务划分、数据一致性、服务发现和网络通信等。通过实际案例分析,本文旨在为开发者提供一套实用的指南,帮助他们构建出既健壮又易于维护的微服务系统。
|
2月前
|
存储 运维 监控
高效运维管理:从基础架构优化到自动化实践
在当今数字化时代,高效运维管理已成为企业IT部门的重要任务。本文将探讨如何通过基础架构优化和自动化实践来提升运维效率,确保系统的稳定性和可靠性。我们将从服务器选型、存储优化、网络配置等方面入手,逐步引导读者了解运维管理的核心内容。同时,我们还将介绍自动化工具的使用,帮助运维人员提高工作效率,降低人为错误的发生。通过本文的学习,您将掌握高效运维管理的关键技巧,为企业的发展提供有力支持。
|
2月前
|
存储 消息中间件 运维
架构升级的救星!流量回放自动化测试的必备指南
大家好,我是小米,一名29岁的技术宅。今天分享一个物联网领域的实用技能——流量回放自动化测试。系统重构后,测试工作量巨大,本文介绍如何通过日志收集和数据回放进行自动化测试,包括离线、实时和并行回放模式,帮助快速定位Bug,提升测试效率和系统稳定性。欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
61 3