• 0
  • 1
分享

1、引言

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

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

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

2、架构是个啥东西

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

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

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

扩展一下:

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

    ①分层架构

    ②事件驱动架构

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

    ④微服务架构

    ⑤云架构

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

3、架构的设计思想

1.高复用性:

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

2.易维护性

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

3.人员分离,专一性

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

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

4.架构师考虑点:

    ①编码的选择

    >> java ,python,ruby等

    ②核心技术的选择

    >> Web: selenium

    >>APP: Appium

    ③编码规范

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

    ④用例设计规范

    ⑤代码管理方式

    >> git or svn

4、为啥要使用架构

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

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

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

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

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

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

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

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

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

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

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

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

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

5、类库的设计结构

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

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

5.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文件夹下。

就是这么简单。。

6、使用架构遇到的坑

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

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

>>只要更新objectView 即可

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

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

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

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

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

②手工验证此功能;

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

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

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

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

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

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

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

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

俗话说:

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

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

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

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   Apple Maps 存在一个隐私 BUG,可以在未经用户许可的情况下,允许应用收集用户位置数据。苹果在最新发布的 iOS 16.3 更新中已经修复了这个 BUG。  根据巴西记者 Rodrigo Ghedin 报道,当地外卖应用 iFood 在 iOS 16.2 系统中,即便用户关闭了该应用访问位置的权限,但该应用依然可以利用上述 BUG 来追踪用户位置。  IT之家了解到,iFood 是巴西最大的外卖应用程序,公司估值 54 亿美元。该应用在关闭访问位置的权限之后,iFood 的应用程序依然可以获取用户的位置信息。  Arstechnica 安全作家 Dan Goodin 则提出了诸多...
            0 0 765
            分享
          •   今天一看日历,才突然意识到自己毕业已经四年了。四年时间里一直在测试行业摸爬滚打,现在是时候记录一下了。  下面我来分享下我这4年软件测试经验及成长历程,或许能帮助你解决很多工作中的迷惑。  我是如何开始做测试的?  2013年开始上大学,一个不算好的小二本,专业也是被调剂的-信息与计算科学,看起来高大上的专业,实际到真正学习的时候才发现,学习的东西泛而不精,数学知识与计算机知识掺杂,导致大学学了四年后,对什么都一知半解,更找不到毕业后的方向和职业规划。  一个偶然的机会,接触到了嵌入式,听说发展前景很好。由于当时对就业的迷茫,终于没能抵挡住诱惑,就这样,大四那年基本都是在嵌入式学习中度过的...
            0 0 630
            分享
          •   近期一直在忙着上线测试,过程中也梳理下日常通用的发布测试流程。  一、计划制定阶段  产品经理:  确定需求范围,需求评审后提供PRD及原型。  研发、测试:  评估工作量,整理研发、测试计划。  产品、研发、测试:  沟通协定封版时间以及发布日期。  二、测试前的准备  需求整理确认:确保前期明确的需求均包含在版本中。  相关制品整理:主要升级包和安装包。  测试环境准备:分为安装环境和升级环境。  版本发布测试计划整理,明确具体事项,明确负责人,明确相应的日期,便于跟踪监控。  eg:  三、测试阶段  安装测试  使用安装包,在全新的测试环境上进行安装操作,验证全新安装是否OK。  ...
            0 0 341
            分享
          •   如果您正在寻找一款基于 PCIe 4.0 的 NVMe 固态硬盘,它不仅速度快,而且可靠性高,那么三星 990 PRO 可能是您的首选。这款硬盘被认为是容量为 1TB 或 2TB 的最佳旗舰固态硬盘之一。不过,这种情况又很快就会改变,因为该公司公布了其发布 4TB 配置的计划,将其当前旗舰产品的容量扩大了一倍。  三星尚未透露即将推出的升级版的全部细节。配备 2TB 的三星 990 PRO 读取和写入速度分别高达 7450MB/s 和 6900MB/s,令人印象深刻。目前的 2TB 版本售价为 219.99 美元(目前在 samsung.com 上的售价为 169.99 美元),而 4TB...
            0 0 579
            分享
          • 接口测试需要考虑的点/如何设计接口测试的用例?接口测试用例编写除了使用功能测试中最基本的等价类,边界值,因果图,错误推测,场景设计等方法外,还要考虑一些其他方面,首先我们要先进行冒烟测试,说白了就是传递正确的参数查看是否返回正确的结果然后还要考虑参数组合:因为参数有必填和非必填,参数的格式、长度,以及数据传输的业务流程中的一些限制,我们要考虑不同的参数组合的情况,以保证能够覆盖到所有的情况以及绕过验证、权限验证、参数是否加密最重要的是要考虑业务逻辑校验,请求的类型、格式,地址、参数,以及数据库的落地情况(比如测试新增更新的接口时,要看数据的返回是否完整,与数据库进行对比)。你做过接口测试吗,怎...
            9 9 2331
            分享
      • 51testing软件测试圈微信