精华内容
下载资源
问答
  • 2022-01-14 17:58:04

    之前文章接口自动化测试概述及流程梳理中我们介绍了接口自动化测试的流程。

    在工作中,当一个项目确定要做接口自动化测试之后,我们一般面临两种情况:

    1.公司已经在做自动化测试,自己成为其中的一员

    这种情况下,我们需要做的就是快速了解现成的自动化测试框架,多看项目代码,了解团队的业务逻辑、代码风格,快速融入进去。

    2.公司之前没有在做,需要你0-1搭建。

    这时候就需要我们去根据项目和自身技能的具体情况,去规划整个自动化测试框架。

    一、自动化测试框架规划思路

    1.选择语言

    • python

    • java

    自己擅长哪个选哪个,推荐python

    2.编程工具选型

    • pycharm

    • vscode

    自己擅长哪个选哪个

    3.测试框架选型

    • unittest ---python自带的测试框架

    • pytest ---unittest升级版,推荐

    • httprunner

    • rf框架 ---关键字

    4.报告可视化方案选型

    • htmltestrunner

    • beautifulreport

    • allure

    5.持续集成方案

    • jenkins

    6.仓库服务器选型

    • github ---服务器在国外

    • gitlab

    • gitee

    7.测试管理工具选型

    • 禅道

    • jira

    接口自动化测试框架的搭建一般有两种思路:

    1.基于工具的

    例如:Postman+Newman+Jenkins+Git/svn Jmeter+Ant+Jenkins+Git/svn

    2.基于代码的

    例如:Python+Requests+Pytest+Allure

    个人建议:如果是学习阶段,选择基于代码的模式,通过自己一步一步的规划项目、编写代码,可以更好的理解接口自动化的实现原理,之后再学习一些工具会更得心应手。

    我这里选择的是: Python+pycharm+pytest+allure+gitlab+jira

    规划好方案后就可以创建我们的项目代码工程了(可以与编写测试用例并行,需要提前约定好测试用例的格式,方便后续代码设计)。

    二、项目代码工程构建思路

    设计框架的原则:

    • 封装基类方法

      对于一些较通用的方法,可以封装,比如发送请求、增、删、改、查。

    • 高内聚低耦合

      每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。

      模块与模块之间接口的复杂程度尽量低,比如在类内部尽可能减少方法之间的调用,否则一个方法的变动会影响调用它的另一个方法。

    • 脚本分离

      业务代码、测试数据应该相互剥离、灵活调用。理念类似初识PO模式并在Selenium中简单实践中的PO设计模式。代码中应该不出现具体的数据、配置。而是调用对应的数据文件。

    三、一个比较完善的项目代码工程结构:

    - common  #包文件,公共模块,存放一些通用方法
        - baseapi.py
            - class BaseApi()#基类
                - 方法1:发送请求
                - 方法2:增
                - 方法3:删
                - 方法4:改
                - 方法5:查
    - libs  #包文件,存放业务层代码
        - login.py #登陆模块
            - class Login(BaseApi) #继承基类里的BaseApi
                - 方法1:发送登陆请求
                - 方法2:发送登出请求
        - logout.py #登出模块
            - class Logout(BaseApi)
    - configs  #包文件,存放配置
        - config.py
            - HOST='xxx'#用于切换测试环境
            - url='xxx'
    - datas #文件夹,存放数据/测试用例
        - xxx.xls
        - xxx.yaml
    - testCase #包文件,存放测试用例代码,注意符合pytest命名规范
        - test_login.py
            - class Test_login
                - 方法1:test_login01
                - 方法2:test_login02
        - test_logout.py
            - - class Test_logout
                - 方法1:test_logout01
                - 方法2:test_logout02
    - outFiles #文件夹,输出文件
        - logs #存放log文件
        - report #存放报告
        - screenShot #存放截图
    - tools #包文件,工具类
        - handle_data.py 
        - handle_excel.py
        - handle_path.py
        - handle_yaml.py
    - docs #文件夹,存放说明类文档
        - 代码规范.doc
        - 需求文档.doc
    

    框架搭建:

    四、后续代码编写思路:

    框架写好后的代码编写思路,大体上为

    1.基类封装,把一些常用的方法比如发送请求、增、删、改、查放到我们的基类里。

    2.编写业务层的接口代码

    3.编写测试用例代码,过程中发现缺什么就去写什么方法,思考这个方法应该放在具体业务内还是基类还是tools内,这个过程是对代码不断优化的过程。直到我们的用例代码写完。

    • 比如,写测试用例代码过程中需要读取yaml文件,就在tools内加一个get_yml_data的方法

    • 再比如,两个业务模块之间需要关联,需要A方法返回对象给B方法用,则去优化A方法,给出返回值。

    • 再再比如,一些关键节点需要截图,则去补充截图的方法。

      扫码关注公众号‘自动化测试研习社’

      一起变强

    更多相关内容
  • 目前通用的嵌入式自动化测试框架,四层结构:  解释几个术语:  1.测试包(testsuite):只要点一个按钮就可以完成一次测试必须用到的东西。  2.数据驱动(Datadriven):测试数据与测试执行分离,测试数据起到驱动...
  • 然后针对这个,设计了现在的UI自动化测试框架实现了简单的通用,每次只需要维护好用例就行了,维护成本降低。 大家都知道,基于selenium函数,对页面元素的操作,很多都是点击、输入参数、处理iframe、处理alert...
  • 通用UI自动化测试框架源码 2.0版本,对元素操作方法、检查点、回退操作再此进行抽象。...然后针对这个,设计了现在的UI自动化测试框架实现了简单的通用,每次只需要维护好用例就行了,维护成本降低
  • 如何搭建自动化测试框架?

    千次阅读 2021-07-23 05:51:37
    一、什么是自动化测试框架在了解什么是自动化测试框架之前,先了解一下什么叫框架?框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用...

    今天先聊聊如何搭建自动化测试框架,主要会聊聊一些思路上的东西,从一个最简单的demo到把一个框架该有的组件都搭建好。本文主要以web自动化为例子,使用的语言是js。

    一、什么是自动化测试框架

    在了解什么是自动化测试框架之前,先了解一下什么叫框架?框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面,而后者是从目的方面给出的定义。

    —百度百科

    对于自动化测试框架大致包含以下的内容

    自动化测试工具(selenium、puppeteer…)

    Runner(Jest…)

    日志(logger)

    报告(reportor)

    持续集成

    二、使用puppeteer开始写一个最小的demo

    2.1 工具选型

    目前,对于web端UI自动化比较主流的工具有selenium、webDriver。而在这里选择的是Puppeteer,先来了解下puppeteer。

    在chrome 59 chrome团队支持了headless模式,在Headless模式下,用于自动化测试和不需要可视化用户界面的服务器。例如,你想在一个网页上运行一些测试,从网页创建一个PDF,或者只是检查浏览器怎样递交URL。

    Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。

    Puppeteer 核心功能:

    利用网页生成PDF、图片

    爬取SPA应用,并生成预渲染内容(即“SSR” 服务端渲染)

    可以从网站抓取内容

    自动化表单提交、UI测试、键盘输入等

    帮你创建一个最新的自动化测试环境(chrome),可以直接在此运行测试用例

    捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题

    Puppeteer是使用node语言进行开发的,在使用中你可以使用async/await异步解决方案,async/await可能是目前为止最简单的异步方案了。

    很强大是不是,接着我们去学习下puppeteer的接口文档,接着开始写我们的demo。

    2.2 测试用例

    该用例是直接使用puppeteer,先launch一个browser然后newPage,接着开始写case。如果你想执行可以把then后的内容改成访问百度界面的。如下图,

    53470390529255b0c60cb4468dae1298.png

    7089ac7d63e97d767696370f3dd6368a.png

    我们来看下整体的框架,如下图,图中直接使用Puppeteer。

    对于以上的case,假如我要在写一条case,需要新建一个js文件,然后先launch一个browser然后newPage,接着开始写case。在这样的一个过程中我们可以看到我们每次都要launch browser,close browser,当然还有其他的问题比如怎么快速的执行多个用例等等,那么该如何解决这个问题呢?这时候考虑引入一个Runner的概念。

    三、使用Jest进行lifecycle管理

    3.1 了解Jest

    对于Jest,在并发执行可以保持最高的性能,在沙盒模式下每个测试都有一个干净的环境。Jest在做UT、AT有着很成功的应用。接着我们在框架里面加入lifecycle去管理一些资源。需要去做一些setup、teardown的工作。

    3.2 Jest+puppeteer

    在这里抽象了一个environment(下图左),去统一管理测试过程中的一些资源,在这里引入了setup、teardown,声明全局的browser、page变量。而对于case(下图右),使用Jest的case编写规则去写,首先是一个describe,类似test suite,在describe可以写多个it,一条的it代表一条的case,你就可以在一个文件里写多条的case。对比下二中的case此时我们不需要在每次执行launch了。

    6c2d7d2e32b1cfd06a5c25f93b6cb52e.png

    5b0844c7c535db4bb2f7d63b35820167.png

    接着看下整体的框架图,可以看到我们把jest给加入了

    对于上面的case我们把对页面元素的建模跟对应的操作以及测试方法都写到同个class里面了。对于这样的case,如果改动了某个元素需要改动很多个的文件,维护成本很高,这是我们不希望看到的。接下来我们引入了POM.

    四、POM

    4.1 了解POM

    POM的全称是Page Object Model。POM模型要求将一个页面上所有功能/可重用组件写到一个class文件中,它存在以下规则

    1.Page Object Model is a design pattern to create Object Repository for web UI elements.

    2.Under this model, for each web page in the application, there should be corresponding page class.

    3.This Page class will find the WebElements of that web page and also contains Page methods which perform operations on those WebElements.

    ce2f2712bbf26c6691c50a6ba32d9fbb.png

    对于三中的代码很明显没有遵循POM,接着我们进行改进。

    4.2 采用POM模型编写代码

    在这里我抽象出一个pages,把不同界面的建模以及对元素的操作放在一个文件夹下,在case层只有测试方法。

    3e610421b5233e6d741b5c4796efac22.png

    在使用POM的过程中我还做了一件事情,抽象出driver层,对puppeteer的API进行封装,封装的意义有两方面为了支撑其他的工具比如selenium,统一接口,更好的做兼容性测试,(puppeteer支持的browser类型比较少);另一方面,对于driver这类的工具在ui

    测试工程其实不会用到所有的大概能用上十几个method,我们可能对它进行封装让它更好用,比如可以在click前waitFor这个element出现,这样做就不需要在写case的时候每次click前都wait了。

    fd217ec645ed7a61031c337168fee641.png

    接着我们来看下整体的框架:

    ef2d0b2948a9ab8c94da4d29e2bbc95b.png

    对于这样的框架我们能很好的工作了,接下来需要加的是啥呢?

    五、Logger&Report&Assert

    loggger、report、assert是框架的必须部分。

    logger需要统一的管理打印到console或者某个file,logger可以帮助我们更快的定义问题对于logger可以分为两类一个应用本身的log,一个测试代码的log,根据需要收集;report是在测试结束后把结果展示出来,可以是dashboars可以是html,告诉case的整体情况,以及错误时候的信息,当然还可以是更详细信息,比如说每一步的步骤信息等;Assert这里是采用了Jest自带了,觉得Jset自带的expect已经很强大了,当然如果你需要用别的或者封装也是可以的。我们接着看下代码(如下图),对于这些我们去使用是很方便的集成的,易于集成也是衡量一个第三方library的一个重要指标。

    78c689a1fa9b0d6e24ff708c03cf8dcd.png

    f5d5bd0933ce0515d6bf4074e9cecfe5.png

    对于框架层加了两个模块进去。

    六、其他工具类

    54b91fb449d65793d82e0c2a58cc8f03.png

    对于框架而言,通常会留有一个Helper,把跟测试相关的工具放在这里。方便使用与管理。我们看下框架。

    七、持续集成

    首先,持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。自动化测试作为在持续集成中的一个重要环节,我们需要在执行UT/IT后接着执行AT,更早的发现bug。在这里可以使用docker搭建puppeter的运行环境,在jenkins上通过pipeline在docker中执行测试。

    八、总结

    以上就是本文的主要内容,希望看完这篇文章大家可以思考一些问题,对于这样的设计有何优化建议?在编写测试中可能会遇到哪些问题?我来说下,如何支持多个browser?测试太慢如何通过缓存提供web 元素的加载?面对这些该如何解决呢?

    最后的最后,该框架的源码在github上,https://github.com/summergan/EndToEnd

    目前只有文章中的demo,后续有时间会继续更新。

    版权声明:本文出自51Testing原创,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

    展开全文
  • 在我们原来的接口自动化测试框架设计之初,已经规划好(约定)如下内容: 1、本框架设计实现接口测试用例数据与脚本分离, 2、jmeter脚本通过csv数据元件获取测试用例数据, 3、excel用例设计列:url、method、params...
  • 什么是自动化测试框架? 它是由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合。以常见的前端UI测试为例,一个测试框架大概包括测试对象,测试组件,基础类和函数,工具类...

    在这里插入图片描述
    关于测试框架的好处,比如快速回归提高测试效率,提高测试覆盖率等这里就不讨论了。这里主要讨论自动化框架包含哪些内容,以及如何去设计一个测试框架。

    什么是自动化测试框架?

    它是由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合。以常见的前端UI测试为例,一个测试框架大概包括测试对象,测试组件,基础类和函数,工具类,测试数据,异常处理,测试日志,断言和测试报告等这些模块。在设计测试框架的时候,我们要尽可能的将这些模块有机的结合起来,将脚本能够有效的组织、连贯应用起来,提高测试脚本的可维护性和可读性。

    在这里插入图片描述

    好框架的定义

    由于应用系统技术五花八门,几乎没有测试框架能应用在多个项目上并体现出应有的价值,所以一般情况都需要根据项目自身情况来定制化我们的测试框架,常用的有数据驱动,关键字驱动和两种方式的混合。

    a. 数据驱动 (DDT):如果被测系统业务逻辑固定不变或变动较小,我们可以使用数据驱动,通过不同数据来保证测试覆盖率,通常数据都是保存在外面文件或数据库中,运行时自动获取。特点是数据与测试脚本分离,基于模块化的测试库,一个驱动脚本可以执行多个相似测试,这样非常容易建立新测试。

    b.关键字驱动 :将数据与关键字结合来描述如何使用数据执行测试。这种方法具备数据驱动的优势,同时非编程人员也能建立新类型测试。

    在这里插入图片描述

    设计框架的思路

    1、高内聚低耦合:

    高内聚就是每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码;低耦合就是模块与模块之间接口的复杂程度,比如在类内部尽可能减少方法之间的调用,否则一个方法的变动会影响调用它的另一个方法。
    比如,你要做两个功能:对文本文件的读写,对 word 读写,同是IO你可以放在一个类里的不同方法,高内聚。

    比如,写了一个类,“人”类,“人”有自己的名字年龄等属性,每个“人”又有一条狗做为自己的属性,你可以把“人”类的属性和“人”的狗的属性都写在“人”类里,这就成了高耦合。

    而把狗的属性剥离出来,写成“狗”类,在“人”类里只放一个对“狗”的对象做引用,这个“狗”类,即可做为“人”的属性,也可以做它用,即 低耦合。

    2、脚本分离

    对象、测试数据、业务逻辑相互剥离、灵活调用,在前端UI测试上可以得到明显的效果,我们可以使用PageObject设计模式来实现对象和业务逻辑的剥离,使用DataProvider来实现数据业务逻辑分离。

    安装相应的环境依赖:

    • 安装python3.7(要保证pip能用,一般安装python3.7会自动安装pip)
    • 安装pytest框架---- pip install pytest
    • 安装request库---- pip install request
    • 安装openpyxl库(测试数据保存在excel中,需要依赖读取excel的库)---- pip install openpyxl
    • 安装pycharm(编写python脚本工具)

    3、模块化设计用例

    如果时间充裕且项目提供支持,可以遵循以下顺序进行测试:页面对象 - 功能点 - 业务逻辑 - 业务流程。
    从实现来说就是:先测试底层的页面操作对象,通过调用操作对象、及业务逻辑实现对功能点的验证,再通过调用业务逻辑组合功能点实现对业务流程的验证。不同的业务流程,对于底层的操作组件、中间层的功能点函数是完全可以复用的,只是调用的业务逻辑的差异,或者是测试数据的差异性。这样的好处是脚本相互独立性,代码复用,易维护,如有新的业务流程可以调用已有代码来组合。

    在这里插入图片描述

    • common:存放公共方法;
    • config:存放环境配置信息;
    • lib:存放第三方库;
    • main:框架主入口;
    • report:存放allure测试报告;
    • test_case:存放测试用例;
    • test_data:存放测试数据;

    4、封装基础方法

    对于一些较通用的方法,可以封装,比如log,assert,异常处理,文件读写操作,数据库读写操作,保存页面截图等等,在需要的时候直接在测试用例里调用即可。

    在这里插入图片描述

    如何开展自动化测试

    自动化测试实施思路:

    1.项目准备:安装相应的环境依赖;

    2.设计基于pytest的测试框架结构:

    3.实现接口公共文件:封装http请求;

    4.抽离测试环境配置信息:获取不同环境的URL,放到config目录;

    5.创建conftest.py放置一些公共的fixture;

    6.将测试数据放到excel中;

    7.编写自动化测试业务代码;

    8.集成allure;

    9.自动化执行生成结果;

    10.Jenkins环境搭建;

    自动化开展建议:

    抓住业务测试工作中的痛点和领导的痛点,多沟通多交流,优先解决基层的工作痛点,相信一个好的领导会看到你的责任心和付出;

    技术选型和方案可行性调研,多投入时间和精力,有的人性子急,前期做的很快,如果一开始的方向错了,最终会得不偿失;
    如果是比较复杂的解决方案,尽量前后端分离、保证各模块的独立性、可融合性、解耦不解体,做到灵活可扩展,要有下一盘大棋的准备。

    在这里插入图片描述

    最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

    如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!喜欢我们自动化的小伙伴们,可以加入我们的技术交流扣扣群:914172719(里面有超多学习资料免费分享哟)


    好文推荐

    转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

    面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

    面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

    什么样的人适合从事软件测试工作?

    那个准点下班的人,比我先升职了…

    测试岗反复跳槽,跳着跳着就跳没了…

    展开全文
  • 自动化测试框架总结

    万次阅读 2021-12-26 15:05:36
    2. Web自动化测试框架 3. iOS自动化测试框架 4. Android自动化测试框架 1. 单元测试框架 几乎所有的主流语言,都会有其对应的单元测试框架,下面简单介绍一下python,java,C#三种语言的常见单元测试框架 1.1 ...

    目录

     1. 单元测试框架

    2. Web自动化测试框架

    3. iOS自动化测试框架

    4. Android自动化测试框架

     1. 单元测试框架

    几乎所有的主流语言,都会有其对应的单元测试框架,下面简单介绍一下python,java,C#三种语言的常见单元测试框架

    1.1 Python

    python常见单元测试框架包括unittest, pytest

    1.1.1 unittest

    • unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。
    • unittest为python内置库,不需要单独安装(好像也和版本有关系)

    1.1.2 pytest

    pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:

    • 简单灵活,容易上手
    • 支持参数化
    • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)
    • pytest不是python内置库,需要单独安装

    1.1.3 unittest与pytest对比

    • unittest提供了test cases、test suites、test fixtures、test runner相关的类,让测试更加明确、方便、可控。使用unittest编写用例,必须遵守以下规则:

    (1)测试文件必须先import unittest
    (2)测试类必须继承unittest.TestCase
    (3)测试方法必须以“test_”开头
    (4)测试类必须要有unittest.main()方法

    • pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。使用pytest编写用例,必须遵守以下规则:

    (1)测试文件名必须以“test_”开头或者"test"结尾(如:test_ab.py)
    (2)测试方法必须以“test
    ”开头。
    (3)测试类命名以"Test"开头。

    • unittest提供了setUp/tearDown,只能针对所有用例。
    • pytest提供了模块级、函数级、类级、方法级的setup/teardown,比unittest的setUp/tearDown更灵活。

    模块级(setup_module/teardown_module)开始于模块始末,全局的
    函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
    类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
    方法级(setup_method/teardown_method)开始于方法始末(在类中)
    类里面的(setup/teardown)运行在调用方法的前后

    • pytest还可以在函数前加@pytest.fixture()装饰器,在测试用例中装在fixture函数。fixture的使用范围可以是function,module,class,session。
    • fixture相对于setup和teardown来说有以下几点优势:

    (1)命名方式灵活,不局限于setup和teardown这几个命名
    (2)conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置,可供多个py文件调用。
    (3)scope="module" 可以实现多个.py跨文件共享前置
    (4)scope="session" 以实现多个.py跨文件使用一个session来完成多个用例
    (5)用yield来唤醒teardown的执行

    • 断言方面:
      unittest提供了assertEqual、assertIn、assertTrue、assertFalse.
      pytest直接使用assert 表达式,相对而言更简单且高效.

    • unittest不支持失败重跑,pytest支持

    • unittest依赖ddt库参数化,pytest直接使用@pytest.mark.parametrize装饰器

    pytest总的来说优于unittest,提供了更多的功能和可拓展性

    1.2 Java

    Java常见单元测试框架包括Junit、testNG

    1.3 C#

    C#常见单元测试框架包括NUnit

    2. Web自动化测试框架

    2.1 Selenium

    Selenium是一个用于Web应用程序测试的工具。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。Selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。Selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

    selenium 1.0 包括以下两部分:selenium server、 Client Libraries组成

    2.1.1 selenium server

    selenium server负责控制浏览器的行为。主要有launcher,Http Proxy,selenium core。selenium core使用Selenium Server嵌入到浏览器页面中。实质上,selenium core是由JS函数组成,这样我们可以实现用程序对浏览器进行操作。

    2.1.2 client Libraries

    编写测试用例时控制selenium server的库

    下图介绍了testcase的执行过程:

     

    执行过程

    (1).测试案例(Testcase)通过Client Lib的接口向Selenium Server发送Http请求,要求和Selenium Server建立连接。

    为什么要通过发送Http请求控制Selenium Server而不采用其他方式呢?从上文可以看出,Selenium Server是一个独立的中间服务器(确切地说是代理服务器),它可以架设在其他机器上!所以测试案例通过发送HTTP请求去控制Selenium Server是很正常的。

    (2).Selenium Server的Launcher启动浏览器,把Selenium Core加载入浏览器页面当中,并把浏览器的代理设置为Selenium Server的Http Proxy。

    (3).测试案例通过Client Lib的接口向Selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作。

    (4).Selenium Core接收到指令后,执行操作。

    (5).浏览器收到新的页面请求信息(因为在(4)中,Selenium Core的操作可能引发新的页面请求),于是发送Http请求,请求新的<u style="box-sizing: border-box; font-family: __SYMBOL, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif; font-variant-ligatures: none; font-variant-numeric: tabular-nums; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Web</u>页面。

    由于Selenium Server在启动浏览器时做了手脚,所以Selenium Server会接收到所有由它启动的浏览器发送的请求。

    (6).Selenium Server接收到浏览器的发送的Http请求后,自己重组Http请求,获取对应的Web页面。

    (7).Selenium Server的Http Proxy把接收的Web页面返回给浏览器。

    2.2 Selenium2(Webdriver)

    Selenium 2将浏览器原生的API封装成WebDriver API,可以直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的),所以就像真正的用户在操作一样。

    下图介绍了Selenium2的架构:

     

    Selenium2架构

    • webdriver按照server–client的经典设计模式设计

    • server端就是remote server,可以是任意的浏览器:我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应;

    • client端简单说来就是我们的测试代码:们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被server端(也就是被测浏览器)server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息;

    • the WebDriver Wire Protocol是Selenium自己设计定义的协议,这套协议非常之强大,几乎可以操作浏览器做任何事情,包括打开、关闭、最大化、最小化、元素定位、元素点击、上传文件等。

    • WebDriver Wire协议是通用的,也就是说不管FirefoxDriver还是ChromeDriver,启动之后都会在某一个端口启动基于这套协议的Web Service,例如FirefoxDriver初始化成功,默认从http://localhost:7055开始,IE则是http://localhost:52432

    webdriver的工作原理:

    (1)启动浏览器后,selenium-webdriver会将目标浏览器绑定到特定的端口,启动后的浏览器则作为webdriver的remote server。

    (2)客户端(也就是测试脚本),借助ComandExecutor发送HTTP请求给sever端(通信协议:The WebDriver Wire Protocol,在HTTP request的body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium我们希望浏览器接下来做什么事情)。

    (3)Sever端需要依赖原生的浏览器组件,转化Web Service的命令为浏览器native的调用来完成操作。

    3. iOS自动化测试框架

    3.1 XCTest

    About Testing with Xcode

    XCTest是苹果在iOS 7和Xcode5引入的一个简单而强大的测试框架,它的测试编写起来非常简单,并且遵循xUnit风格。XCTest的优点是与Xcode深度集成,有专门的Test导航栏,但因为受限于官方测试API,因此功能不是很丰富。

    3.2 UIAutomation

    https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UIAutomation.html

    UIAutomation是苹果提供的UI自动化测试框架,使用Javascript编写。基于UIAutomation有扩展型的工具框架和驱动型的框架。扩展型框架以JavaScript扩展库方法提供了很多好用js工具,注入式的框架通常会提供一些Lib或者是Framework,要求测试人员在待测应用的代码工程中导入这些内容,框架可以通过他们完成对app的驱动。驱动型UI Automation 在自动化测试底层使用了UI Automation库,通过TCP通信的方式驱动UI Automation来完成自动化测试,通过这种方式,编辑脚本的语言不再局限于JavaScript。

    3.3 Frank

    App Development Ireland - App Developers Dublin

    Frank是iOS平台一款非常受欢迎的app测试框架,它使用Cucumber语言来编写测试用例, Frank包含一个强大的“app inspector”–Symbiote,可以用它来获得运行中app的详细信息,便于开发者将来进行测试回顾。 它允许使用Cucumber编写结构化英语句子的测试场景。 Frank要求测试时在应用程序内部编译,这意味着对源代码的改变是强制性的。操作方式为使用Cucumber和JSON组合命令,将命令发送到在本地应用程序内部运行的服务器上,并利用UISpec运行命令。

    **优点: **测试场景是在Cucumber的帮助下,用可理解的英语句子写的。强大的Symbiote实时检查工具。 活跃的社区支持。 不断扩大中的库。

    缺点:对手势的支持有限。 在设备上运行测试有点难。 修改配置文件需要在实际设备上运行。 记录功能不可用。

    3.4 KIF

    iOS 中使用 KIF 测试 UI - OSCHINA - 中文开源技术交流社区

    KIF是Keep It Functional项目的缩写,是一款iOS app功能性测试框架,使用Objective-C语言编写,对苹果开发者来说非常容易上手,更是一款开发者广为推荐的测试工具。KIF tester使用私有API来了解App中的视图层级。但缺点是运行较慢。

    3.5 Calabash-ios

    详见Calabash-android 描述。

    3.6 Subliminal

    Subliminal

    Subliminal是另一款与XCTest集成的框架。与KIF不同的是,它基于UIAutomation编写,旨在对开发者隐藏UIAutomation中一些复杂的细节。

    3.7 Kiwi

    https://github.com/kiwi-bdd/Kiwi/wiki/Getting-Started-with-Kiwi-2.0

    Kiwi是对XCTest的一个完整替代,使用xSpec风格编写测试。 Kiwi带有自己的一套工具集,包括expectations、mocks、stubs,甚至还支持异步测试。它是一个适用于iOS 开发的Behavior Driven Development(BDD)库,优点在于其简洁的接口和可用性,易于设置和使用,非常适合新手开发者。Kiwi使用Objective-C语言编写,易于IOS开发人员上手。

    3.8 Appium

    Appium: Mobile App Automation Made Awesome.

    Appium是一个开源的、跨平台的自动化测试工具,支持IOS、Android和FirefoxOS平台。 通过Appium,开发者无需重新编译app或者做任何调整,就可以测试移动应用,可以使测试代码访问后端API和数据库。它是通过驱动苹果的UIAutomation和Android的UiAutomator框架来实现的双平台支持,同时绑定了Selenium WebDriver用于老的Android平台测试。开发者可以使用WebDriver兼容的任何语言编写测试脚本,如Java, OC, JS, PHP,Python, Ruby, C#,Clojure 和Perl语言。

    总结:IOS自动化测试框架继承关系如下. XCTest与 Xcode 的 IDE 直接集成,使用简单, 但其不支持stub和mock, 所以单使用XCTest框架的较少. Kiwi是一个iOS平台十分好用的行为驱动开发BDD的测试框架,有着非常漂亮的语法,可以写出结构性强,非常容易读懂的测试。UI Automation是Apple官方提供的UI自动化测试的解决方法,但接口不够丰富。

     

     iOS自动化测试框架

    • KIF、Frank、Calabash都是通过使用代码的形式来模拟事件触发,使得被测代码就像是由用户行为所触发的一样。但这样的代价是插入一个额外层的复杂度。

    • IOS测试框架中支持BDD的有calabash 和Kiwi。

    • 可选用的单元测试框架有Kiwi,Specta,Quick等,而KIF,Subliminal和calabash更适用于UI级验收测试。

    4. Android自动化测试框架

    4.1 Instrumentation

    https://developer.android.com/reference/android/app/Instrumentation.html

    Instrumentaion 是Android自带的一个测试框架,是很多其它测试框架的基础,可以在同进程中加载被测组件。它有很多丰富的高层封装,使用者可以使用基于instrumentation的其他框架,避免过多二次开发量。但Instrumentation不支持跨应用,导致基于instrumentation的框架都继承了这个缺点。

    4.2 Robotium

    https://github.com/robotiumtech/robotium

    Robotium是基于Instrumentation框架开发的一个更强的框架. 对常用的操作进行了易用性的封装. 用于开发功能性、系统和验收测试场景。它运行时绑定到GUI组件。它安装了一个测试用例套件作为在Android设备或仿真器上的应用程序,并提供用于执行测试的真实环境。

    优点: 容易在最短的时间内编写测试脚本,易用性高。自动跟随当前activity。 由于运行时绑定到GUI组件,所以相比Appium,它的测试执行更快,更强大。 不访问代码或不了解app实现,也可以工作。 支持Activities、Dialogs、Toasts、Menus、Context Menus和其他Android SDK控件。

    缺点: 不能处理flash和web组件。在旧设备上会变得很慢。 由于不支持iOS设备,当自动化测试同时覆盖 android与iOS的情况时,测试会被中断。没有内置的记录和回放功能.,使用记录功能需要 TestDroid 和 Robotium Recorder 这样的收费工具。

    4.3 UIAutomator

    https://google.github.io/android-testing-support-library/docs/uiautomator/

    UIAutomator是由谷歌提供的测试框架,它提供了原生Android app和游戏的高级UI测试。这是一个包含API的Java库,用来创建功能性UI测试,还有运行测试的执行引擎。该库自带Android SDK。

    优点:它在运行访问不同的进程时,会给JUnit测试案例特权。库由谷歌社区支持和维护。

    缺点:仅支持android4.1(API level 16)及以上。 不支持脚本记录。 支持的重点是Java。 你不能获得当前活动或仪表化。目前不支持web视图。 库仅支持使用Java,因此很难和使用Ruby的cucumber混合。如想支持BDD框架,建议使用Java自己的BDD框架,例如Jbehave。

    4.4 Espresso

    https://google.github.io/android-testing-support-library/docs/espresso/index.html

    Espresso是Google的开源自动化测试框架。相对于Robotium和UIAutomator,它的特点是规模更小、更简洁、API更加精确、编写测试代码简单、容易快速上手。因为是基于Instrumentation的,所以不能跨App。

    4.5 Calabash

    https://github.com/calabash

    Calabash是一个适用于iOS和Android开发者的跨平台app测试框架,可用来测试屏幕截图、手势和实际功能代码。Calabash开源免费并支持Cucumber语言,Cucumber能让你用自然的英语语言表述app的行为,实现BDD(Behavior Driven Development,行为驱动开发)。 Cucumber中的所有语句使用Ruby定义。

    **优点: **有大型社区支持。列表项 简单,类似英语表述的测试语句支持在屏幕上的所有动作,如滑动,缩放,旋转,敲击等。 跨平台开发支持(同样的代码在Android和iOS设备中都适用)。

    缺点:测试步骤失败后,将跳过所有的后续步骤,这可能会导致错过更严重的产品问题。测试耗费时间,因为它总是默认先安装app。 需要Calabash框架安装在ios的ipa文件中, 因此测试人员必须要有iOS的app源码。 除了Ruby,对其他语言不友好。

    4.6 Appium

    Appium: Mobile App Automation Made Awesome.

    Appium是一个开源的、跨平台的自动化测试工具,支持IOS、Android和FirefoxOS平台。 通过Appium,开发者无需重新编译app或者做任何调整,就可以测试移动应用,可以使测试代码访问后端API和数据库。它是通过驱动苹果的UIAutomation和Android的UiAutomator框架来实现的双平台支持,同时绑定了Selenium WebDriver用于老的Android平台测试。开发者可以使用WebDriver兼容的任何语言编写测试脚本,如Java, OC, JS, PHP,Python, Ruby, C#,Clojure 和Perl语言。

    4.7 Selendroid

    GitBook - Where software teams break knowledge silos.

    Selendroid 是一个基于Instrumentation的一个框架. 完全兼容Webdriver协议。 Selendroid 可以在模拟器和实际设备上使用,也可以集成网格节点作为缩放和并行测试。

    4.8 Robolectric

    Robolectric

    Robolectric 是一款Android单元测试框架,但它并不依赖于Android提供的测试功能,它通过实现一套JVM能运行的Android代码,然后在unit test运行的时候去截取android相关的代码调用,然后转到Robolectric实现的代码(shadow objects)去执行这个调用的过程。因此它不像模拟器或设备需要dexing(Android dex编译器将类文件编译成Android设备上的Dalvik VM使用的格式)、打包、部署和运行的过程,大大减少了测试执行的时间。Pivotal实验室声称使用Robolectric可以在28秒内运行1047个测试。

    除了实现Android里面的类的现有接口,Robolectric还给每个Shadow类额外增加了很多接口,可以读取对应的Android类的一些状态。比如它为ImageView提供了getImageResourceId()方法,测试者可以通过getImageResourceId()接口来确定是不是正确显示了期望的Image。

    4.9 RoboSpock

    http://robospock.org/

    RoboSpock是一个开源的Android测试框架,它提供了简单的编写BDD行为驱动开发规范的方法,使用Groovy语言,支持Google Guice库。RoboSpock合并了Robolectic和Spock的功能。

    4.10 Cafe

    项目管理iCafe_项目进度管理-百度智能云

    Cafe是百度出品的一个基于Robotium的测试框架,它提供了跨进程的测试解决方案。

    4.11 Athrun

    http://code.taobao.org/p/athrun/wiki/index/

    Athrun 是taobao出的一个移动测试框架,它支持Android和IOS。Android部分是基于Instrumentation,在Android原有的ActivityInstrumentationTestCase2类基础上进行了扩展,提供了一整套面向对象的API。 IOS上的自动化测试包括注入式自动化框架AppFramework,和基于录制的自动化框架Athrun_IOS, InstrumentDriver。

    4.12 其他

    其他自动化框架还有应用于稳定性测试的Monkey系列(Monkey, Monkeyrunner, MonkeyTalk), 其中MonkeyTalk 支持iOS 和 Android,它可以为应用进行真实的,功能性交互测试。MonkeyTalk 提供简单的 “smoke tests”,复杂数据驱动的测试套件。MonkeyTalk 支持原生,移动和混合应用,真实设备或者模拟器。MonkeyTalk 使得场景捕获非常容易,可以记录高级别,可读的测试脚本。还有适用于浏览器自动测试的Selenium WebDriver,可以真实测试用户行为,用户交互如触摸、手指滚动、长按等,还支持HTML5的一些特性,比如本地存储、session存储、应用缓存等。而CTS则是应用于兼容性测试的自动化工具, CTS大部分是基于Junit和仪表盘技术编写的。还扩展了自动化测试过程,可以自动执行用例,自动收集和汇总测试结果。CTS采用XML配置文件的方式将这些测试用例分组成多个测试计划(plan),第三方也可以创建自己的plan。

    总结:

    各个测试框架的继承关系如下,继承关系决定了有些框架的先天优势或先天不足. 在实际应用中可以集成多个框架。

     

     Android 自动化测试框架

    • 基于Instrumentation的测试框架,比如Espresso,Robotium,Selendroid等,都不能支持跨APP使用。 如自动化测试中有跨APP操作,可以结合UiAutomator实现。

    • 支持BDD的自动化框架比较少,可以在calabash 和 RoboSpock及Jbehave之间选择。

    • 若想同时支持Android和IOS,可选框架有Appium和Calabash,或AthRun。

    • 若为单元测试选择框架,可选Instrumentation或Robolectric。Robolectric实现了shadow object 类,耗时短。

    感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接免费拿走:

    ① 2000多本软件测试电子书(主流和经典的书籍应该都有了)

    ② 软件测试/自动化测试标准库资料(最全中文版)

    ③ 项目源码(四五十个有趣且经典的练手项目及源码)

    ④ Python编程语言、API接口自动化测试、web自动化测试、App自动化测试(适合小白学习)


    ⑤ Python学习路线图(告别不入流的学习)

    上图的资料 在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)

    可以自助拿走,群号953306497(备注“csdn111”)群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

    展开全文
  • 每一个测试人员都应该了解每种框架的优缺点,以帮助你的团队更好地确定最适合的测试框架,以达到事半功倍。
  • 搭建的自动化测试框架要包括API测试,UI测试,APP测试三类。以上三类其实可以简化为两类,那就是:
  • 自动化测试 —— Pytest测试框架

    千次阅读 2022-03-11 19:01:15
    支持简单的单元测试与复杂的功能测试,还可以用来做Selenium、Appium、Requests等UI、接口自动化测试 支持很多第三方插件,并且可以自定义扩展(Pytest插件下载地址) 支持测试用例的跳过与失败重试 ...
  • 5种比较常见的自动化测试框架

    千次阅读 2020-10-26 14:34:43
    自动化测试框架
  • 自动化测试框架设计思路

    千次阅读 2019-09-12 15:42:31
    1.自动化测试框架的概念 2.框架的驱动模式 2.1 数据驱动模式 2.2 关键字驱动模式 3.设计框架的原则 3.1 高内聚低耦合 3.2 脚本分离 3.3 模块化设计用例,脚本的可重用 3.4 封装基础方法
  • 如何设计一个自动化测试框架

    千次阅读 2020-03-28 22:05:57
    本文会以一个web端的UI自动化测试框架设计为例 什么是自动化测试框架 什么是框架 特指为解决一个开放性问题而设计的具有一定约束性的支撑结构。在此结构上可以根据具体问题扩展、安插更多的组成部分,从而更迅速和...
  • 【自动化测试】自动化测试框架与工具

    万次阅读 多人点赞 2021-05-06 21:01:01
    文章目录1)什么是自动化测试框架?1.1 什么是框架?1.2 什么是自动化测试框架?1.2.1 优点:1.2.2 框架的基本组件1、需要配置文件管理:2、业务逻辑代码和测试脚本分离3、报告和日志文件输出4、自定义的库的封装5、...
  • 通用UI自动化测试框架设计(web端)

    万次阅读 2019-03-10 12:27:53
    写过UI自动化测试脚本的朋友...然后针对这个,设计了现在的UI自动化测试框架实现了简单的通用,每次只需要维护好用例就行了,维护成本降低。 大家都知道,基于selenium函数,对页面元素的操作,很多都是点击、输...
  • 一、自动化测试框架 在大部分测试人员眼中只要沾上“框架”,就感觉非常神秘,非常遥远。大家之所以觉得复杂,是因为落地运用起来很复杂;每个公司,每个业务及产品线的业务流程都不一样,所以就导致了“自动化测试...
  • 随着互联网的高速发展,软件技术日新月异...本文所探讨的就是软件自动化测试框架实现,首先是对需求进行分析,然后通过对比国内外成熟的自动化测试框架技术进行技术选型,最终确定使用基于Python语言的,结合Selenium
  • 五种常见的自动化测试框架

    千次阅读 2021-10-09 16:57:06
    自动化测试框架就是用于测试自动化的框架。具体来说,它提供了自动化测试用例编写、自动化测试用例执行、自动化测试报告生成等基础功能。我们只需要基于这个框架,完成和业务高度相关的测试用例设计实现即可。另外...
  • Robot Framework自动化测试框架

    千次阅读 2022-02-18 22:29:26
    它是一个基于Python语言开发的,可扩展的,是以关键字驱动模式的自动化测试测试框架。也是一个跨平台的通用的,与应用程序和技术无关的测试框架。它有一个高度模块化的架构: 数据层、测试框架、测试库或第三方...
  • 自动化测试方案设计实现

    千次阅读 2020-10-31 16:08:05
    自动化测试方案设计实现
  • Python + selenium 自动化测试框架

    千次阅读 多人点赞 2021-12-14 16:06:59
    项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里。 写通用的代码的。 其他3层想要的话,就可以直接调用。 例如: 读取测试数据的代码,读取配置信息的代码;截图的...
  • 2019 Python接口自动化测试框架实战开发(一)

    万次阅读 多人点赞 2019-06-28 15:55:25
    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!...整个项目分为四个部分:接口基础丶接口开发丶Unittest与接口测试结合以及接口自动化框架设计到开发 接口基础包括:H...
  • Robot Framework是一个基于Python的可扩展关键字驱动的自动化框架,用于验收测试,验收测试驱动开发(ATDD),行为驱动开发(BDD)和机器人流程自动化(RPA)。它可以用于分布式异构环境,其中自动化需要使用不同的...
  • Python 从无到有搭建WebUI自动化测试框架

    万次阅读 多人点赞 2020-06-01 22:16:43
    目录 前言 1、Python库选择 2、分层设计 3、基础类 ...一个迭代频繁的项目,少不了自动化测试,冒烟与回归全部使用...Python搭建自动化测试框架是高级测试的人设之一 1、Python库选择 这套框架主要的Pyt.......
  • 简单分享一个轻量级自动化测试框架目录结构设计

    万次阅读 多人点赞 2016-08-25 23:30:45
    很多人在做自动化测试的过程中会遇到一个瓶颈,就是能够写脚本,但是不知道怎么去组织代码,怎么搭建测试框架,今天博主就放点干货,分享一个轻量级的自动化测试框架的目录结构,如下图:分层如下: config层,放...
  • 二、什么是自动化测试框架 三、非PO模式和PO模式优缺点对比 四、如何从0到1搭建PO模型 五、自动化测试框架和PO的关系 六、总结 一、什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是...
  • 基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - Jenkins[定时计划执行任务] 基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - 内部框架及UI自动化测试框架思维导图 完结!撒花!✿✿ヽ(°▽°)ノ✿ 1 - Web自动...
  • 自动化测试框架目录结构

    千次阅读 2018-04-24 12:57:19
    自动化测试框架的目录结构config(配置文件)放配置文件,把所有的项目相关的配置均放到这里,用Python支持较好的配置文件格式如ini或yaml等进行配置。实现配置与代码分离。data(数据文件)放数据文件,可以把所有的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 128,853
精华内容 51,541
关键字:

如何设计实现通用的自动化测试框架?