前面已经写过两篇文章介绍该框架,目前又涉及一个路由器Web自动化测试的项目,所以就简单写个Demo分享一下,主要介绍Python + Robotframework实现路由器Web自动化测试。
路由器是新华三的NX30,其实其他路由器也差别不大,应该都可以适用。该文章就是介绍如何用该框架通过UI自动化完成路由器的主要功能测试。
关于架构的介绍在本系列文章的第一篇里做了详细的说明(见文章一的思维导图),目前呢对该框架做了一些改动:
1.由于部分电脑没有外网权限,所以将一些所需的三方库放在PythonLibs文件夹中,这样安装时即使电脑无外网权限也可完整安装此框架
2.将RIDE的启动脚本放置在根目录,这样便于启动
其他部分和该系列第一篇文章基本无异
首先在python代码库Libraries中新建一个function.py文件(文件名可自定义),所有路由器相关功能都在此文件中实现。
然后构建一个FunctionKeywords的类,在该类中创建细分功能的函数(关键字)
这里以登录页面作为开始,通过网页找到密码输入栏元素和登录按钮的一些属性
接下来便可以开始构建登录功能的函数(RF中也叫关键字),实现步骤可以看代码注释
def open_router(self, password, browser='ff'):
"""
打开浏览器并登录
"""
password = str(password)
self._sel.open_browser(browser=browser)
# 访问登录页
self.go_to_login_page()
# 向密码输入栏输入密码
self._sel.input_text('name:psd', password)
# 点击登录按钮
self._sel.click_element('name:login')
# 等待页面跳转成功
self._sel.wait_until_page_contains_element('id:wanzheng_img')
# 在RIDE中输出log信息,便于查看测试进度
logger.info('Login router success.')
?接下来我们就需要测试 wifi的名称的设置,是否加密,密码等页面功能
路由器设置页面如下:
?接下来构建这个设置页面的函数,注意看注释!
def set_2g4_ssid_configuration(self, ssid=None, ssidHidden=None, authMode=None, encryProtocol=None, password=None):
conf = self.get_2g4_ssid_configuration()
ssid = str(ssid) if ssid is not None else conf.ssid
ssidHidden = robottypes.is_truthy(ssidHidden) if ssidHidden is not None else conf.ssidHidden
authMode = Utils.to_enum(authMode, RouterAuthMode) if authMode is not None else conf.authMode
encryProtocol = Utils.to_enum(encryProtocol, RouterEncryProtocol) if encryProtocol is not None else conf.encryProtocol
password = str(password) if password is not None else conf.password
# 访问配置页
self._sel.go_to(self.get_router_address('/wlan_ap_ssid_config.asp?index=0'))
# 等待网页加载成功
self._sel.wait_until_page_contains('无线网络配置', error='AP 2.4g ssid configuration page not found')
if ssid != conf.ssid:
# 输入wifi名称
self._sel.input_text('name:ssid_name', ssid)
if ssidHidden != conf.ssidHidden:
# 是否隐藏名称
self._sel.select_from_list_by_value('name:ssid_broad', str(int(ssidHidden)))
if authMode != conf.authMode:
# 加密方式
self._sel.select_from_list_by_value('name:ssid_enc', str(authMode.value))
if encryProtocol != conf.encryProtocol:
self._sel.select_from_list_by_value('name:wpa_key_type', str(encryProtocol.value))
if password != conf.password:
# 输入密码
self._sel.input_text('name:wpa_key', password)
# 点击确认
self._sel.click_element('css:input[name="amend"]')
到这里两个功能的函数就完成了, 其他功能也照此样式实现即可。最后将FunctionKeywords类开放给RIDE,供其调用:
各个功能的函数封装完成后就可以在RIDR中根据测试需要编辑测试用例了,这里我写了一个简单的示例,包括登录,设置参数,验证参数,关闭路由器,关闭浏览器等步骤
利用此框架的优点在于,你只需要构建底层功能,然后剩下的一切交给RIDE即可,比如开始/暂停/停止/报告等功能都不用自己开发。
运行的结果如下:
输出的测试Log和Report文件存放在Enviroment\Output文件夹中:
综合看来,Python + Robotframework自动化测试框架优点众多,不仅可以用来做APP自动化测试,WEB端自动化测试,也可用来做硬件自动化测试(比如WIFI/蓝牙/杂散)等等。
由于源码涉及多个文件,所以不好直接粘打文章中,有需要的同学可以直接私聊我,基本都在线!