UI自动化PO设计模式介绍

UI自动化PO设计模式介绍

-基于python+selenium2+unittest+HTMLTestRunner

一、简介

on+selenium+unittest+HTMLTestRunner完成。该文档主要介绍此框架的设计、环境安装搭建及框架应用相关内容。该文档是动态更新
UI自动化使用pyth的,根据需要,会对框架做优化,增加删除更新某些模块。

此文档帮助测试人员尽快熟悉UI自动化测试。所以,整理此文档。

二、整体框架介绍

2.1 PO设计模式

什么是设计模式?

PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类,即一个py文件,并以页面为单位来写测试用例,实现页面对象和测试用例的分离,若元素发生变化,只需要进入对应的Page类,更新元素定位即可,不用修改用例。PO模式的设计思想与面向对象相似,能让测试代码变得可读性更好,可维护性高,复用性高。

image.png

PO 模式可以把一个页面分为三个层级:对象库层、操作层、业务层。

对象库层:封装定位元素的方法。

操作层:封装对元素的操作。

业务层:将一个或多个操作组合起来完成一个业务功能。

一条测试用例可能需要多个步骤操作元素,将每一个步骤单独封装成一个方法,在执行测试用例时调用封装好的方法进行操作。

PO 模式的优点

·通过页面分层,将测试代码和被测试页面的页面元素及其操作方法进行分离,降低代码冗余。

·页面对象与用例分离,业务代码与测试代码分离,降低耦合性。

·不同层级分属不同用途,降低维护成本。

·代码可阅读性增强,整体流程更为清晰。

2.2 架构图

image.png

2.3 目录设置

整个测试框架分为四层,通过分层的方式,测试代码更容易理解,维护起来较为方便。

第一:“测试工具层”:

models包:用于实现测试过程中调用的工具类方法,例如读取配置文件、页面元素的操作方法、操作Excel文件等。

conf 包:配置文件及全局变量。

test_data 目录:Excel 数据文件,包含测试数据输入、测试结果输出。

log 目录:日志输出文件。

image 目录:异常截图保存目录。

第二层:“服务层”,对于页面测试,是对页面元素或操作的一个封装。

page_obj 包:对象库层及操作层,将所有页面的元素对象定位及其操作分别封装成一个类。

第三层:“测试用例逻辑层”,该层主要是将服务层封装好的各个业务对象,组织成测试逻辑,进行校验。

action 包:基于page_obj封装常用的测试流。

test_case 包:基于业务层和测试数据文件,执行测试用例集合。

test_data 目录:Excel 数据文件,包含测试数据输入、测试结果输出。

第四层:“测试场景层”,将测试用例组织成测试场景,实现各种级别 cases 的管理、冒烟,回归等测试场景。

run_all_test.py:本 PO 框架的运行主入口。

2.4 selenium

selenium是thoughtworks公司的一个集成测试的强大工具,它封装了各种工具和库,实现了web浏览器的自动化。

selenium经历了两个版本,selenium1.0和selenium2.0,selenium不是一个单独的工具,而是由一些插件、类库组成的,每个部分都有其特点和应用场景,selenium1.0家谱图如下:

image.png

selenium2.0 = selenium1.0 + webdriver,可以把webdriver看作是 seleniumRC的替代品。

selenium2的特点:

·开源、免费

·多浏览器支持:Firefox、Chrome、IE、Opera、Edge;

·多平台支持:linux、Windows、MAC;

·多语言支持:java、python、Ruby、C#、JavaScript、C++;

·对web页面有良好的支持;

·简单、灵活;

·支持分布式测试用例执行;

掌握selenium2主要是掌握webdriver,webdriver本质上是一个库,完成对浏览器的自动化操作,学好自动化首先掌握webdriver的常用api,元素的定位,浏览器控制、页面元素操作,表单窗口上传下载文件警告信息处理等等,这里不做一一介绍,可以参考seleniumAPI手册。

2.5 unittest

unittest介绍:

https://www.cnblogs.com/miki-peng/p/12501341.html

内容包括:unittest四个核心概念、unittest常用断言、测试用例命名方式使用、TestFixture的两种使用方法,测试套件如何添加测试用例集、结合报告执行。

2.6 HTMLTestRunner

HTMLTestRunner是 Python 标准库的 unittest 框架的一个扩展

2.7 ddt数据驱动

ddt是第三方模块,需要安装,安装方法详见4.5.

ddt的data有两种:

第一种:直接输入测试数据,程序会自动循环读取测试数据执行,而执行的代码只需要写一次,实现代码复用,减少冗余。使用方法如下:

需要两步,在类名前加装饰器@ddt,在方法名前加装饰器@ddt.data(具体数据),数据类型可以是元组、列表、字典等数据。

详见:https://www.cnblogs.com/songzhenhua/p/11068308.html

第二种:从文件中读取数据,可以从json、yaml、或者Excel中获取测试数据,本文主要讲从Excel中获取数据。方法如下:

image.png

在类名前和测试方法前分别加上装饰器,从Excel读取的测试数据方法放在测试方法的装饰器的参数中。

Excel读取方法如下:


image.png

循环从Excel中读取数据,并返回list

四、环境搭建

4.1、本地搭建python开发环境

Python可应用于多平台包括 Linux 和 Mac OS X。通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。

这里就不具体讲python的安装了,详细步骤如下:https://zhuanlan.zhihu.com/p/111168324?from_voters_page=true

安装好python后,Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具,pip 是 Python 包管理工具,以后也是用pip来管理各种工具包。

4.2、安装selenium

进入命令行模式,用pip工具安装selenium,“pip install selenium” 用来安装selenium

image.png

安装完成后,在C:\Users\xiong\AppData\Local\Programs\Python\Python37\Lib\site-packages目录下,你会看到一个selenium 目录。这就是安装好的selenium包,如下:

image.png

4.3、unittest

unittest是Python自带的单元测试框架,无需安装,位置如下:

image.png

4.4、安装openpyxl

同样的方法,用pip install openpyxl安装openpyxl

image.png

安装完成后,在C:\Users\xiong\AppData\Local\Programs\Python\Python37\Lib\site-packages目录下,会看到一个openpyxl目录,这就是安装好的openpyxl包,如下:

image.png

4.5、安装ddt数据驱动

同样的方法,用pip install ddt安装ddt

image.png

安装完成后,在C:\Users\xiong\AppData\Local\Programs\Python\Python37\Lib\site-packages目录下,会看到一个ddt目录,这就是安装好的ddt包,如下:

image.png

4.6、HTMLTestRunner

HTMLTestRunner是一个py文件,该原始文件是基于python2来开发的,如果你安装的是python3的环境,运行原始文件时会报错,需要改几行代码,但总体区别不大。

该文件所在目录:

image.png

在项目中,需要时,直接import就可以使用。

4.7、Chrome浏览器驱动安装

首先查看Chrome的版本:chrome://version/

image.png

下载Chrome浏览器驱动,注意驱动版本要和浏览器版本对应,否则运行会报错。

如下网址查看浏览器版本对应的驱动下载链接:

https://npm.taobao.org/mirrors/chromedriver

我的浏览器是88版本,下载对应的驱动,如下:


image.png

存放路径有两种方式:

方法一:

把驱动放到Chrome的启动程序路径下:

image.png

运用时,需要指定驱动的位置,如下示例:

image.png

将下载的chromedriver.exe放到至Python的安装目录下,与python.exe文件相同目录下。查看Python的安装目录(cmd输入命令where python)。如下图所示:

image.png

以下示例:

image.png

如果是其他浏览器方法如同炮制,不多赘述。

五、远程运行

运行自动化测试脚本会影响我们的日常工作,所以采用selenium提供的分布式测试工具—Selenium Grid,利用Selenium Grid可以在不同的分支节点上运行,从而不影响我们的日常工作。

现在采用Selenium Grid2版本,需要下载Selenium Server才可以使用Grid2功能。

使用Grid,首先下载配置Selenium Server,下载地址:http://www.seleniumhq.org/download

找到对应版本下载得到selenium-server-standalone-XXX.jar,由于jar包由java开发,所以需要java环境,如果没有配置java需要先安装。

远程运行测试脚本步骤:

1.代码中,启动浏览器驱动时,配置远程ip等信息,如下:

image.png

2.启动Selenium Server

java –jar selenium-server-standalone-2.47.0.jar

3.启动本地hub主机、远程node主机

image.png

java –jar selenium-server-standalone-2.47.0.jar –role hub

java –jar selenium-server-standalone-2.47.0.jar –role node –port 5555 –node http://XXXXXX

4.运行脚本 python 文件包.py

注意,想在其他主机上运行node需要满足以下要求:

·本地hub主机和远程node主机之间必须ping命令连通;

·远程主机必须安装用例执行的浏览器及驱动,并且驱动要放在环境变量path的目录下;

·远程主机必须按照java环境

六、常见问题

1、找不到元素?

遇到找不到元素的情况,首先看是否没有加载出来导致元素找不到,需要设置等待。还有可能页面出现内嵌的frame或者iframe,需要switch_to进入该frame才能找到元素。

2、alter弹框的处理方法?

确认:switchto().alert().accpet();

取消:switchto().alert().dismiss();

3、滚动条的处理方法,需要用到执行js脚本解决

String js="window.scrollTo(0,ducument.body.ScrollHeight)";

((JavascriptExecutor)driver).executeScript(js);

4、用例怎么管理

用excel维护用例,一个测试点用一个sheet维护

5、如果只执行一部分用例怎么办?

在测试用例里有一列is_Run,如果Y表示要执行,N表示不执行

6、数据依赖怎么处理

可以把放在setUp()方法里调用,每次执行该用例时会自动调用

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容