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

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

架构是什么

软件架构(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自动化测试进阶资料和零基础教学,欢迎进阶中和对测试感兴趣的小伙伴加入!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/635192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4D毫米波雷达 OCULII 雷达 购买以及售后技术支持

雷达是找国内代理买的 深圳路达 想买的朋友看完聊天记录再自行决定 第一次体会到买东西的是孙子的感觉,2.5w的售后就这样 另外,有研究雷达的朋友可以一起交流 1. 与销售的沟通记录 2. 与技术沟通记录 Oculii 的 EAGLE 77 GHz 成像雷达可在双芯片平台…

Elasticsearch 分布式架构剖析及扩展性优化

1. 背景 Elasticsearch 是一个实时的分布式搜索分析引擎,简称 ES。一个集群由多个节点组成,节点的角色可以根据用户的使用场景自由配置,集群可以以节点为单位自由扩缩容,数据以索引、分片的形式散列在各个节点上。本文介绍 ES 分布…

【android】 android 里写jni

目录 (1) 环境准备 (2) 关联c文件到gradle文件 (3) 生成了 (4) 书写 (5) 使用 (6)业务调用 参考文档 (1) 环境准备 ndk, cmake (2) 关联c文件到gr…

【AI的未来 - AI Agent系列】【MetaGPT】5. 更复杂的Agent实战 - 实现技术文档助手

在 【AI的未来 - AI Agent系列】【MetaGPT】2. 实现自己的第一个Agent 中,我们已经实现了一个简单的Agent,实现的功能就是顺序打印数字。 文章目录 0. 本文实现内容1. 实现思路2. 完整代码及细节注释 0. 本文实现内容 今天我们来实现一个有实际意义的Ag…

【华为 ICT HCIA eNSP 习题汇总】——题目集4

1、(多选)网络中出现故障后,管理员通过排查发现某台路由器的配置被修改了,那么管理员应该采取哪些措施来避免这种状况再次发生? A、管理员应该通过配置 ACL 来扩展只有管理员能够登录设备 B、管理员应该在路由的管理端…

宋仕强论道之再混华强北(三十五)

我是2012年重新回到华强北的,宋仕强说来深圳市第一份工作就在华强北担任一名工程师,和华强北有深厚的感情。我回来后经常混华强北的上层圈子跟老板老板娘们吹牛逼,最初大家看我穿的衣冠楚楚人模狗样的但态度吊儿郎当,理论一套一套…

File 类的用法和 InputStream, OutputStream 的用法

1.File类的用法 下面就用几个简单的代码案例来熟悉File类里面函数的用法: public class IODemo1 {public static void main(String[] args) throws IOException {File f new File("./test2.txt");//File f new File("C:/User/1/test.txt");S…

新手也能看懂的【前端自动化测试入门】!

前言 最近在网上搜索前端自动化测试相关的文档,但是发现网上的文章都是偏使用,没有把一些基础概念说清楚,导致后续一口气遇到一些karma、Jasmine、jest、Mocha、Chai、BDD等词汇的时候很容易一头雾水,这次一方面整理一下收获的知…

SOCKET编程和TCP通信案例三次握手四次挥手

文章目录 一、SOCKET1、网络套接字SOCKET2、网络字节序2.1、小端法2.2、大端法2.3、字节序转换3、IP地址转换函数3.1、本地字节序转网络字节序3.1.1、函数原型:3.1.2、返回值3.2、网络字节序转本地字节序3.2.1、函数原型3.2.2、返回值4、sockaddr地址结构&#xff0…

【蓝桥杯EDA设计与开发】立创开源社区分享的关于蓝桥被EDA真题与仿真题的项目分析

立创开源社区内有几个项目分享了往年 EDA 设计题目与仿真题,对此展开了学习。 【本人非科班出身,以下对项目的学习仅在我的眼界范围内发表意见,如有错误,请指正。】 项目一 来源:第十四届蓝桥杯EDA赛模拟题一 - 嘉立…

网络爬虫采集工具

在当今数字化的时代,获取海量数据对于企业、学术界和个人都至关重要。网络爬虫成为一种强大的工具,能够从互联网上抓取并提取所需的信息。本文将专心分享关于网络爬虫采集数据的全面指南,深入探讨其原理、应用场景以及使用过程中可能遇到的挑…

C++无锁队列的原理与实现

目录 1.无锁队列原理 1.1.队列操作模型 1.2.无锁队列简介 1.3.CAS操作 2.无锁队列方案 2.1.boost方案 2.2.ConcurrentQueue 2.3.Disruptor 3.无锁队列实现 3.1.环形缓冲区 3.2.单生产者单消费者 3.3.多生产者单消费者 3.4.RingBuffer实现 3.5.LockFreeQueue实现 …

实现仿ChatGPT光标跟随效果

先看效果 实现效果 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>光标闪烁效果</title>…

网络安全需要对网络风险有独特的理解

迷失在翻译中&#xff1a;网络风险解释的脱节现实 在古印度的一个经典故事中&#xff0c;几个蒙住眼睛的人接近一头大象&#xff0c;每个人检查不同的部位。有人触摸树干&#xff0c;认为它像一条蛇。另一个摸到了一条腿&#xff0c;认为它是一棵树。还有一个拿着象牙的人&…

Java中打印图案最常用的25个图案程序

Java是公认的最流行的编程语言&#xff0c;因为它的简单性和多功能性。还可以使用它开发各种应用程序&#xff0c;包括Web、移动和桌面应用程序。此外&#xff0c;Java为开发人员提供了强大的工具来轻松高效地创建复杂的程序。Java最有前途的特性之一是它能够创建可以以特定格式…

《向量数据库指南》——为什么说向量数据库是更适合AI体质的“硬盘”

其“AI原生”的体质,具体表现在几个方面: 1.更高的效率。 AI算法,要从图像、音频和文本等海量的非结构化数据中学习,提取出以向量为表示形式的“特征”,以便模型能够理解和处理。因此,向量数据库比传统基于索引的数据库有明显优势。 2.更低的成本。 大模型要从一种新…

【stm32】hal库学习笔记-GPIO按键控制LED和蜂鸣器(超详细!)

【stm32】hal库学习笔记-GPIO按键控制LED和蜂鸣器 注&#xff1a;本学习笔记基于stm32f4系列 使用的开发板为正点原子stmf407ZGT6探索者开发板 GPIO引脚使用时&#xff0c;可输入或输出数字信号 例如: 检测按键输入信号&#xff08;Read_Pin&#xff09;输出信号&#xff08;W…

flink operator 拉取阿里云私有镜像(其他私有类似)

创建 k8s secret kubectl --namespace flink create secret docker-registry aliyun-docker-registry --docker-serverregistry.cn-shenzhen.aliyuncs.com --docker-usernameops_acr1060896234 --docker-passwordpasswd --docker-emailDOCKER_EMAIL注意命名空间指定你使用的 我…

Linux:多线程

目录 1.线程的概念 1.1线程的理解 1.2进程的理解 1.3线程如何看待进程内部的资源? 1.4进程 VS 线程 2.线程的控制 2.1线程的创建 2.2线程的等待 2.3线程的终止 2.4线程ID 2.5线程的分离 3.线程的互斥与同步 3.1相关概念 3.2互斥锁 3.2.1概念理解 3.2.2操作理解…

分类预测 | Matlab实现WOA(海象)-XGboost分类【24年新算法】基于海象优化算法(WOA)优化XGBoost的数据分类预测

分类预测 | Matlab实现WOA(海象)-XGboost分类【24年新算法】基于海象优化算法(WOA)优化XGBoost的数据分类预测 目录 分类预测 | Matlab实现WOA(海象)-XGboost分类【24年新算法】基于海象优化算法(WOA)优化XGBoost的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本…