基于Selenium+Python的高校统一身份认证自动化验收测试技术研究

2019-11-20 08:37冯兴利洪丹丹罗军锋锁志海
现代电子技术 2019年22期
关键词:测试报告功能测试快照

冯兴利,洪丹丹,罗军锋,锁志海

(西安交通大学 网络与信息中心,陕西 西安 710049)

0 引 言

每个项目系统在上线之前都需要进行验收测试,特别是功能测试。有时依项目要求需要多次对系统进行功能测试并保留测试结果相关证据。传统方式上,通常采用人工手动测试的方式进行,而人工测试只适合测试次数较少的情况,当要求进行多次重复测试时,需要一种自动化的功能测试方式来替代人工,以便高效率的完成测试任务。

Selenium 能够轻松地完成自动化功能测试。Selenium 是ThoughtWorks 专门为Web 应用程序编写的自动化验收测试工具,特点是开源、免费、多浏览器支持(Safari,IE,Firefox,Chrome,Opera,Edge)、多平台支持(Linux,Windows,MAC)、多语言支持(Java,Python,Ruby,C#,JavaScript,C++)、API 简单、驱动灵活、支持分布式测试用例执行。Selenium 测试直接运行在浏览器中,如同真实用户在操作[1]。

Python 是一个有条理的、强大的、面向对象的程序设计语言,诞生于20世纪90年代初。2011年1月被TIOBE 编程语言排行榜评为2010年度程序设计语言。Python 的开发哲学是“用一种方法,最好是只有一种方法来做一件事”[2]。

unittest 是Python 自带的一个单元测试框架,负责对最小的软件设计单元进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误,并维护测试用例的编写规范[1,3]。本文基于Python+Selenium 结合unittest 单元测试框架对西安交大统一身份认证系统(即CAS)进行一次完整的自动化登录测试。

1 自动化测试过程

1.1 测试环境搭建

1)下载安装Python,并配置系统环境变量Path。

2)安装Selenium,可通过pip 命令安装,也可直接下载Selenium 包进行安装[4]。

3)下载 Python 第三方模块 HTMLTestRunner,用于生成HTML 测试报告。

1.2 测试脚本录制

使用Selenium IDE 录制。Selenium IDE 是基于Firefox 浏览器的一个插件,为用户提供脚本录制、回放以及编辑功能,能够将录制的脚本导出生成相应的带单元测试框架的自动化脚本。该插件可直接在Firefox 浏览器的附加组件中安装,也可在线安装[5]。

1.3 测试用例设计

对于测试人员来说,不管是进行功能测试还是性能测试都需要编写测试用例。自动化测试用例主要针对自动化测试框架及其相关工具,执行对象是脚本,任何一个判断都需要程序定义,各用例之间关联性较强,主要用来保证产品主体功能正确和完整[1,6]。

自动化测试用例常用于测试静态内容、测试链接、测试动态元素、测试Ajax 等场合。其编写原则是:

1)一个用例为一个完整的场景,例如登录测试应为从用户登录系统到最终退出并关闭浏览器;

2)一个用例只验证一个功能点;

3)尽量少编写逆向逻辑用例;

4)用例与用例之间尽量避免依赖;

5)一个用例测试完成后需要还原测试场景,以免影响其他用例的执行[1,7]。

2 测试用例和结果

本文针对西安交通大学统一身份认证系统的登录功能进行自动验证。

2.1 生成测试结果快照

2.1.1 元素定位

首先创建一个类,使其继承unittest 框架的TestCase类[8],并在该类中创建test_cas_login()方法,获取网址并定位用户名、密码、提交按钮等相关元素,代码如下:

def test_cas_login(self,username,password):

driver = self.driver

driver.get("https://cas.xjtu.edu.cn/login")

driver.find_element_by_id("username").send_keys(username)

driver.find_element_by_id("password").send_keys(password)

driver.find_element_by_class_name("btn-submit").click()

2.1.2 生成登录结果快照

创建test_login_success()方法,并调用已经创建好的test_cas_login()方法。该用例用于验证用户名和密码均正确的情况下点击登录,并通过获取页面提示“登录成功”作为断言信息,在测试用例结束时使用get_screenshot_as_file 函数进行网页截图,并将图片保存到路径 D:/caslogintest 下。

相关代码如下:

def test_login_success(self):

self.test_cas_login(′fengxingli5927′,′456896523′)

link = self.driver.find_element_by_id(′msg′)

self.assertTrue(′登录成功′ in link.text) self.driver.get_screenshot_as_file("D:\caslogintest\login_success.png")

用类似方法创建用户名不存在、用户名正确密码错误、用户名正确密码为空等其他登录不成功的情况的测试用例。

执行上述用例,可得到测试结果快照,如图1所示。图中的5 张截图依次是:用户名正确密码错误、用户名正确密码为空、登录成功、用户名不存在、用户名为空的测试结果截图。

图1 测试结果快照Fig.1 Screenshots of test results

2.2 生成HTML测试报告

Python 通过集成第三方模块HTMLTestRunner 生成HTML 测试报告[9],部分代码如下:

report_path="E://work//2018//下半年//第十三篇文章//case//report//result.html"

fp=open(report_path,"wb")

runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title="西安交通大学统一身份认证系统自动化登录测试报告",description="测试用例执行情况如下:")

runner.run(allcase())

本例自动生成的测试报告HTML 文档如图2所示。

图2 HTML 测试报告Fig.2 Document of HTML test reports

2.3 测试报告自动发至邮箱

自动发邮件功能也是自动化测试的一大需求。如果在自动化脚本运行完之后,与测试工作有关的人员能在邮箱里及时收到最新的测试报告,将会十分方便[10]。

Python 的smtplib 模块提供了一种发送电子邮件的方便途径,该模块封装了SMTP 协议,可使用其中的sendmail 方法发 送邮件[11]。

在本文测试用例中,首先找到上一步生成的HTML测试报告,读取报告的内容并将内容以正文的形式发送到相关收件人邮箱,同时也将HTML 测试报告以附件的形式发送给相关收件人。其中发送邮件模块的相关代码为:

smtp = smtplib.SMTP()

smtp.connect(′smtp.163.com′)

smtp.login(username,password)

smtp.sendmail(msg[′from′],msg[′to′],msg.as_string())

脚本执行成功后,打开收件人邮箱,即可看到HTML 测试报告的正文及附件,如图3所示。

图3 收件人邮箱收到的测试报告Fig.3 Test report received in recipient′s mailbox

3 结 语

本文基于Selenium+Python 对西安交通大学统一身份认证系统的登录模块进行自动化功能测试,包含测试用例的设计和脚本的编写。测试结果表明,基于Selenium 工具和Python 语言写出的测试用例简洁凝练,能够满足多个账号多种情况下进行登录测试并保留测试结果快照的测试需求,能够自动生成HTML 测试报告并自动将测试文档通过邮件发送给项目相关人员。相比人工手动测试,此方法大大提高了测试效率,为技术人员修复系统bug、相关人员及时查看测试报告提供了方便。

猜你喜欢
测试报告功能测试快照
EMC存储快照功能分析
某内花键等速传动轴八功能测试夹具设计
关于户外体育游戏对幼儿体能影响的调查研究
百变星君:ROLLINGSTONE 变色龙紫破风车架测试报告
创建磁盘组备份快照
SSAB Hardox悍达450材料轻型自卸车厢体测试报告
数据恢复的快照策略
一张“快照”搞定人体安检
浅谈软件测试工作的开展流程