BC-PaaS Web前端UI自动化测试代码详细实现

测试是研发体系中不可或缺的一环,全面、充分、有效的测试有利地促进了产品质量的提升。而在较短的时间内完成繁重的测试任务,需要引入自动化测试以应对测试用例繁多、测试步骤繁杂这一常见问题,并且可以减少人工成本。

针对产品开发与验收测试过程中,一方面测试效率低下,另一方面重复性高的重要用例管理问题。利用testNG+Maven框架实现了产品的Web前端页面和后端api自动化测试框架,可全面解决产品前后端测试问题,包括产品的边界测试、异常测试等。同时为性能测试和稳定性测试奠定基础。

本文介绍testNG+Maven+Selenium实现BC-PaaS产品的Web前端页面自动化测试原理和代码实现。

测试架构和流程图如下:

-1-

TestNG框架介绍

///////

TestNG是一个开源自动化测试框架,其设计灵感来自JUnit和NUnit的,引入了许多新的功能,使其功能更强大,使用更方便。

TestNG的基本注解:

-2-

Maven配置

///////

Maven本身并不是一个单元测试框架,它对项目依赖的jar包进行管理,可以让你的项目保持基本的依赖。它可以对项目进行清理、编译、测试、打包、发布等等构建项目的工作。它通过插件maven-surefire-plugin(测试运行器Test Runner)来执行JUnit/TestNG的测试用例。且这个插件能兼容JUnit3,JUnit4,TestNG。

项目结构如下:

/src/main/java/package/**

/src/test/java/package/**

UItest中有一个包含main方法的主类LauchTest.java,将main、test、全部依赖代码打包到一个jar包中,最终能通过java -jar的方式运行UItest。

Maven中pom.xml配置:

-加入Selenium的依赖来执行webdriver操作

-加入TestNG来管理测试用例

-加入ReportNG来生成测试报告

-加入Maven-Surefire-Plugin来执行TestNG的测试用例

-加入Maven Assembly Plugin来打包

-3-

Selenium

///////

Selenium目前主要用于Web端的自动化测试,但它并不仅仅局限于此。Selenuim2集成了WebDriver API,而且目前基本上主流浏览器(Chrome/Firefox/Opera/IE)都支持WebDriverAPI,并且提供了相应的WebDriver工具。

WebDriver提供了一套可以远程控制浏览器行为的协议(wire protocol),它提供了一系列的接口可以用于发现和操作我们的Web文档中的DOM元素,从而控制用户代理(浏览器)的行为。

WebDriver有几种实现,分别是HtmlUnitDrvier、FirefoxDriver、InternetExplorerDriver、ChromeDriver、OperaDriver,除了 InternetExplorerDriver只能在Windows平台运行,其他WebDriver均能跨平台。

Browser Driver一般是一个EXE(可执行)程序,或者浏览器的一个扩展程序,它使用HTTP Server持续监听Selenium2 Commands。当自动化脚本执行的时候,第一个HTTP request会创建一个新的Session,接下来对浏览器的操作将通过这个Session来执行。 创建的Session ID将用于标识后续的自动化脚本都在同一个Session中执行。

-4-

Selenium webdriver页面元素定位常用方式

///////

用Selenium实现自动化测试的过程中,需要选择页面上的元素并且对之进行各种操作,目前selenium主要页面元素定位方式主要有:

By.id()、By.name()、By.className()、By.linkText()、By.partialLinkText()、By.tagName()、 By.cssSelector()、By.xpath()

结合代码段:

页面元素定位,占整个web前端页面自动化测试工作量1/3,所以抓住一些小技巧可以事半功倍,经验总结:

- 多使用浏览器自带定位工具比如firebug和firepath

- 如果页面信息能详细包含id,name等唯一明显的标记时尽量用这些标记

- 定位时一定要找到唯一的属性要确保定位的唯一性,根据唯一的属性进行各种定位

- 当页面元素封装后,只能通过Xpath来定位,比如BC-PaaS前端页面元素的定位就是大部分情况下只能通过Xpath进行定位。

Xpath定位最不推荐的方式为:

直接打开浏览器的开发者工具,点击左上角的箭头并移到需要定位的元素,在html中直接右击>Copy>Copy XPath。

解决思路可以是:

找到该按钮的特征,例如按钮的文字是 submit;

用XPath定位,可以这样写://button[@value=‘submit’]。

-5-

利用Xpath进行页面元素定位总结

///////

在写自动化测试代码过程中,经常会遇到,想要操作的元素被封装,无法通过id,name等比较有效方式进行定位,前端代码也已经开发好,再加入id等元素也不现实,所以这时候只能用xpath方式定位,Xpath定位特征总结:

1. 用contains关键字,定位代码如下:

contains中的text()表示标签中的文本信息同时contains也支持@属性名称等如://a[contains(@id,’*****’)]等。

2. 使用元素属性定位,定位代码如下:

只要是该标签中存在的属性,理论上都可以使用(有些动态生成的属性无法使用,过长的属性也不推荐使用)例://input[@placeholder= '密码']等。

3. 使用层级定位,定位代码如下:

先定位该元素的父节点或祖先节点,再定位当前节点,中间以“//”连接。层级定位可以结合p

4. 使用兄弟节点定位,定位代码如下:

表示往下查找该元素的兄弟节点,preceding-sibling::表示往上查找该元素的兄弟节点。

关于Xpath在Selenium测试中一些缺点:

性能差,定位元素的性能比起大多数其他方法要差;

不够健壮,Xpath会随着页面元素布局的改变而改变;

兼容性不好,在不同的浏览器下对Xpath的实现是不一样的。

所以如果可能的话,尽可能使用id或者name等唯一明显的标记。

-6-

BC-PaaS前端自动化用例设计

///////

实现的测试用例,考虑到维护成本,目前主要覆盖核心的重复性高的业务场景,具体测试场景如下:

1. 登录-》创建无状态应用-》删除无状态应用

2.登录-》创建有状态应用-》删除有状态应用

3. 登录-》创建批处理应用-》删除批处理应用

4.登录-》创建系统应用-》删除系统应用

5.登录-》创建负载均衡-》删除负载均衡

6.登录-》创建路由-》删除路由

7.登录-》创建用户-》删除用户

8.登录-》创建域-》删除域

基于以上加入边界测试和异常测试用例的设计,比如页面填写边界值、创建资源超出额定资源限制等。

测试用例1.登录-》创建无状态应用代码示例:

-7-

遇到的问题总结

///////

1. 经常出现no such element

可能原因,页面没加载完成。

可以设置等待 :

直接等待

隐式等待

显式等待

2. No session

可能的原因,如前面描述selenium与webdriver通过session建立httpServer连接,当批量运行测试时,产生过多会话,机器性能原因可能导致失败。关闭窗口方法 webDriver.close() 和webDriver.quit() 。Close只是关闭当前窗口,webdriver进程仍存在;Quit是关闭当前进程,释放资源。

END

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180925B1FFBK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券