软件自动化测试进阶版

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

环境搭建:

1.安装python 3.4/3.5 2/3.6.1 配置环境变量 3.pip 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 RC:selenium remote control  通过脚本来模拟浏览器的功能

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

Selenium Grid:自动化分布式测试

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

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

Selenium server 配置java环境

运行selenium server

Java -jar selenium-server-standalone-xxx.jar

... -role hub

是基于 selenium rc 的一个分布式测试平台。它可以通过一个服务器(Server)端的 Hub 服务来控制多个用于提供 selenium 脚本运行环境的客户端(Client),从而达到加快测试速度和有效扩充测试环境的目的

四、自动化测试流程:

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

         2、制定测试计划,明确测试对象,测试目的,测试内容、方法、进度,人力资源,硬件,数据等资源

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

         4、搭建测试环境

         5、编写自动化测试脚本

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

         7、维护脚本和新的需求

五、自动化数据的准备

A、CSV文件,open方法(“路径”,r,utf-8)

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

B、数据库方式

a.连接数据库 :

  Localhost

  用户名

登录密码

端口号

DB

b.创建游标以字典类型

C.通过游标执行sql语句

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

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

六、浏览器元素定位

1、Firefox   firebug安装和使用

2、Chrome  F12查看元素

七、测试框架的内容:

1.TestCase

2.Testsuite:测试套件

3.Data

4.AutoDriver(封装)

5.Reports

6.Page:

7.Testrunner:html格式,自动发邮箱

8.测试的主入口(main.py文件)

八、设计模式:

POM模式:页面对象模型

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

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

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

3.监控外部运行的作业

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

好处:尽早发现问题、提高工作的效率

十、代码管理工具、用例管理:coding.net/github/svn

十一、自动化常见面试问题:     

1、如何提高selenium脚本的执行速度?

Selenium脚本的执行速度受多方面因素的影响,如网速,操作步骤的繁琐程度,页面加载的速度,以及我们在脚本中设置的等待时间,运行脚本的线程数等。但是不能单方面追求运行速度的,要确保稳定性,能稳定地实现回归测试才是关键。

我们可以从以下几个方面来提高速度:

一,减少操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。

二,中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。

三,在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提高速度。

四,实现多线程。在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运行,提高执行速度。

2、自动化测试过程中遇到过什么问题?怎么解决的?            

3、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?

- time.sleep( )

- driver.implicitly_wait(30)

- 多用 try 捕捉,处理异常

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

主要有以下几个方面 :

一、网速问题:有的时候网页加载的比较慢,在程序执行的时候要操作的元素没有显示出来。这种情况比较常见,运行一次网速好的时候通过了,再运行一次,页面没有打开,就不通过了。为了提高稳定性,我们只能牺牲运行时间了,在经常检测失败的元素前加上等待时间,等要操作的元素出现之后再执行下面的操作。

二、Selelnium的原因:Selenium1.0和2.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浏览器。如果测试脚本指定了firefox的profile,那么就以该profile启动,否则的话就新启1个profile,并启动firefox;

      firefox一般是以-no-remote的方法启动,启动后selenium-webdriver会将firefox绑定到特定的端口,绑定完成后该firefox实例便作为webdriver的remote server存在;

客户端(也就是测试脚本)创建1个session,在该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 = 'document.querySelectorAll("select")[0].style.display="block";'

driver.execute_script(js)

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

isElementPresent

21、什么样的项目适合自动化测试?

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

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

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

A.添加元素的等待时间driver.implicity.wait()隐式等待 time.sleep()强制等待

B.采用try(异常处理)方式进行id,name,class,xpath,css等不同方式定位,如果    第一种失败可以采用第二种

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

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

隐式等待(智能等待):
implicitlyWait(“等待时间”,“等待时 间单位,如:毫秒‘秒’”)
该隐式等待作用于全局,一般不提倡使用

显示等待:

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

强制等待:

time.sleep()时间等足等够

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

答:1.iframe/frame

2.时间等待问题

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

4.alert/多窗口

5.元素display

26、alert的操作方法?

答:accept,dismiss、text、sendkeys

27、验证码的处理操作?

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

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

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

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

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

posted on 2019-02-18 08:51  独自的独行  阅读(267)  评论(0)    收藏  举报