2023年11月25日发(作者:)

⾃动化测试⾯试

软件⾃动化测试进阶版

⼀、测试体系:Python + selenium + pycharm + Jenkins/docker

环境搭建:

1.安装python 3.4/3.5 2/3.6.1 配置环境变量 install selenium==版本号2.53.1 4.安装编译器pycharm 5.浏览器Firefox 版本<47 关闭浏览

器⾃动更新功能 chrome <54 版本 需要安装驱动

⼆、掌握基本内容:

掌握模块化、数据驱动测试、Page Object页⾯对象设计模式等,熟悉WebDriver API的封装以及⾃动化脚本的编写、执⾏、结合

jenkins发送邮件报告、⾃动构建测试任务等。

三、selenium的简单介绍:

Selenium:是⼀个开源的和便携式的⾃动化软件测试⼯具,⽤于测试Web应⽤程序有能⼒在不同的浏览器和操作系统运⾏。Selenium真的

不是⼀个单⼀的⼯具,⽽是⼀套⼯具,帮助测试者更有效地基于Web的应⽤程序的⾃动化。

Selenium IDE:录制回放浏览器的操作

Selenium RCselenium remote control 通过脚本来模拟浏览器的功能

Selenium WebDriver:前⾝是Selenium RC,直接发送命令给浏览器,并检索结果。

Selenium Grid:⾃动化分布式测试

主机/主节点hub ------- 控制我们的分机/分节点node

主节 -----控制连接我们分节点的IP + 端⼝(默认端⼝4444,5555 多个分节点 端⼝不⼀样

Selenium server 配置java环境

运⾏selenium server

Java -jar

... -role hub

是基于 selenium rc 的⼀个分布式测试平台。它可以通过⼀个服务器(Server)端的 Hub 服务来控制多个⽤于提供 selenium 脚本运⾏环境

的客户端(Client),从⽽达到加快测试速度和有效扩充测试环境的⽬的

四、⾃动化测试流程:

1、熟悉⾃动化需求,明确测试的范围

2、制定测试计划,明确测试对象,测试⽬的,测试内容、⽅法、进度,⼈⼒资源,硬件,数据等资源

3、设计⾃动化测试⽤例(两种:1.从功能测试⽤例中筛选,2.⾃⼰编写测试点)

4、搭建测试环境

5、编写⾃动化测试脚本

6、执⾏脚本、验证提交BUG、回归测试

7、维护脚本和新的需求

五、⾃动化数据的准备

ACSV⽂件,open⽅法(路径rutf-8

注意:关闭⽂件/csv⽂件中的逗号采⽤英⽂逗号隔开

B、数据库⽅式

a.连接数据库

Localhost

⽤户名

登录密码

端⼝号

DB

b.创建游标以字典类型

C.通过游标执⾏sql语句

D.打印受影响的⾏,执⾏提交

E.关闭游标、断开数据库

六、浏览器元素定位

1Firefox firebug安装和使⽤

2Chrome F12查看元素

七、测试框架的内容:

se

ite:测试套件

iver(封装)

s

nner:html格式,⾃动发邮箱

8.测试的主⼊⼝(⽂件)

⼋、设计模式:

POM模式:页⾯对象模型

九、Jenkins:持续集成⼯具,简称CI

1.构造定时任务,不断的进⾏项⽬的构建/测试软件

2.触发型:开发部署项⽬后,触发脚本的运⾏

3.监控外部运⾏的作业

流程:创建任务、运⾏构建、定时执⾏构建

好处:尽早发现问题、提⾼⼯作的效率

⼗、代码管理⼯具、⽤例管理:/github/svn

⼗⼀、⾃动化常见⾯试问题:

1、如何提⾼selenium脚本的执⾏速度?

- ( )

- itly_wait(30)

- 多⽤ try 捕捉,处理异常

-此时我们要分析出不稳定的原因,然后有针对性的去解决问题。

主要有以下⼏个⽅⾯

⼀、⽹速问题:有的时候⽹页加载的⽐较慢,在程序执⾏的时候要操作的元素没有显⽰出来。这种情况⽐较常见,运⾏⼀次⽹速好的时候通

过了,再运⾏⼀次,页⾯没有打开,就不通过了。为了提⾼稳定性,我们只能牺牲运⾏时间了,在经常检测失败的元素前加上等待时间,等

要操作的元素出现之后再执⾏下⾯的操作。

⼆、Selelnium的原因:Selenium1.02.0还是有区别的,有些⼉函数在2.0下运⾏确实有时⽽有效,时⾯⽆效。如果mouseover()函数

mouseove事件,返回jquery类型),就是这种情况, 我们需要避免使⽤这类的函数。

三、多线程的时候,测试⽤例间相互影响。虽然多线程的时候运⾏速度⽐较快,但是如果⽤例之间的耦合性没有设计好,也会影响的,如果

⽤例A先于⽤例B执⾏的时候,就会影响到⽤例B;反之则没有问题。这种情况,如果你的⾃动化测试⼯程打算多线程的时候,提前就要把测

试⽤例测试的耦合度⽐较松,尽量没有任何关系,因为多线程的执⾏顺序是不受控制的。

四、元素属性变化:动态ID

4、你的⾃动化⽤例的执⾏策略是什么?

⾃动化测试⽤例的执⾏策略是要看⾃动化测试的⽬的,通常有如下⼏种策略:

⼀、⾃动化测试⽤例是⽤来监控的,在此⽬的下,我们就把⾃动化测试⽤例设置成定时执⾏的,如果每五分钟或是⼀个⼩时执⾏⼀次,在

jenkins上创建⼀个定时任务即可。

⼆、必须回归的⽤例。有些⼉测试⽤例,如BVT测试⽤例,我们在公司产品任何变动上线之前都需要回归执⾏。那我们就把测试⽤例设置成

触发式执⾏,在jenkins上将我们的⾃动化测试任务绑定到开发的build任务上。当开发⼈员在仿真环境上部代码的时候,我们的⾃动化测试

⽤例就会被触发执⾏。

三、不需要经常执⾏的测试⽤例。像全量测试⽤例,我们没有必要⼀直回归执⾏,必竟还是有时间消耗的,有些⾮主要业务线也不需要时时

回归。这类测试⽤例我们就采⽤⼈⼯执⾏,在jenkins创建⼀个任务,需要执⾏的时候⼈⼯去构建即可。

5、什么是持续集成?

简单来说,持续集成是频繁、持续的在多个团队成员的⼯作中进⾏集成,并且给与反馈。频繁地(⼀天多次)将代码集成到主⼲

1)快速发现错误。每完成⼀点更新,就集成到主⼲,可以快速发现错误,定位错误也⽐较容易。

2)防⽌分⽀⼤幅偏离主⼲。如果不是经常集成,主⼲⼜在不断更新,会导致以后集成的难度变⼤,甚⾄难以集成。

6、⾃动化测试的时候是不是需要连接数据库做数据校验?

UI⾃动化不需要

接⼝测试会需要

7id,name,class,xpath, css selector这些属性,你最偏爱哪⼀种,为什么?

Id 最优先 其次css xpath 因为css xpath⼏乎所有的元素都可以定位到

8、如何去定位页⾯上动态加载的元素?

触发动态加载元素的事件,直⾄动态元素出现,进⾏定位

9、如何去定位属性动态变化的元素?

xpath或者css通过同级、⽗级、⼦级进⾏定位

10、点击链接以后,selenium是否会⾃动等待该页⾯加载完毕?

会的

11webdriver client的原理是什么?

当测试脚本启动firefox的时候,selenium-webdriver 会⾸先在新线程中启动firefox浏览器。如果测试脚本指定了firefoxprofile,那么就以该

profile启动,否则的话就新启1profile,并启动firefox

firefox⼀般是以-no-remote的⽅法启动,启动后selenium-webdriver会将firefox绑定到特定的端⼝,绑定完成后该firefox实例便作为

webdriverremote server存在;

客户端(也就是测试脚本)创建1session,在该session中通过http请求向remote server发送restful的请求,remote server解析请求,完成相

应操作并返回response

客户端接受response,并分析其返回值以决定是转到第3步还是结束脚本;

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

12webdriver的协议是什么?

The WebDriver Wire Protocol

13、启动浏览器的时候⽤到的是哪个webdriver协议?

http

14、什么是page object设计模式?

相似功能地⽅,代码基本都是⼀样的,界⾯元素换个查找⽅式,把原来的使⽤ xpath⽅式,改为使⽤ id 查找,需要对每个⽤例脚本都要改,

虽然⼏个⽤例看不出什么⼯作量,但是重复findElement的代码,已经让我们感到了代码的笨重。如果某些定位发⽣了改变,我们就得贯穿

整个测试代码进⾏调整元素定位,这样就会导致我们的脚本在后期,难以维护。因此通过Page Object Model 我们可以创建更加健壮代码,

并减少或者消除重复的测试代码,从⽽也能够提⾼代码的可读性,减少编写脚本的⼯作量。Page Object Model的实现,就是通过分离测试

对象和测试脚本的抽象来实现的。

15、如何在定位元素后⾼亮元素(以调试为⽬的)?

重置元素属性,给定位的元素加背景、边框

16、你觉得⾃动化测试最⼤的缺陷是什么?

a.不稳定

b.可靠性

c.不易维护

d.成本与收益

17、⾃动化测试⽤例的来源?

a.功能⽤例挑选(有功能⽤例的情况下)

b.⾃⼰写测试点(⽆功能⽤例)

18、什么是分层测试?

UI测试

|

|

集成/接⼝测试

|

|

单元测试

19seleniumhidden或者是display none的元素是否可以定位到?

不能

js = 'electorAll("select")[0].y="block";'

e_script(js)

20selenium中如何判断元素是否存在?

isElementPresent

21、什么样的项⽬适合⾃动化测试?

UI不会频繁变动(测试结果显⽰,业务逻辑等)、回归测试等

22、⾃动化测试流程?你们公司如何开展⾃动化测试?

23selenium中如何保证操作元素的成功率?如何保证元素可以被点击操作成功?

A.添加元素的等待时间()隐式等待 ()强制等待

B.采⽤try(异常处理)⽅式进⾏idnameclassxpathcss等不同⽅式定位,如果 第⼀种失败可以采⽤第⼆种

C.要求开发规范,给予元素唯⼀标识

24、隐式等待、显⽰等待和强制等待的区别?

隐式等待(智能等待):

implicitlyWait(“等待时间等待时 间单位,如:毫秒’”)

该隐式等待作⽤于全局,⼀般不提倡使⽤

显⽰等待:

WebDriverWait(driver,30) 结合until/until_not使⽤,明确要等待某个元素出现或命令完成,每规定时间执⾏⼀次,直到超过规定时间,抛出

异常

强制等待:

()时间等⾜等够

25、元素定位不到的原因?

答:/frame

2.时间等待问题

3.属性唯⼀问题(动态id,属性不唯⼀)

/多窗⼝

5.元素display

26alert的操作⽅法?

答:acceptdismisstextsendkeys

27、验证码的处理操作?

答:1、直接通过图像识别的技术(OCR技术),通过识别图⽚来破解验证码

2、去除验证码,只适合测试环境的使⽤

3、让开发提供万能验证码⽅式,只适合测试环境的使⽤

4、添加cookie的⽅式 addcookie getcookie delete all cookie

5、让开发给测试账号⼀个固定的验证码