下面我们以网易云音乐客户端为例,详细介绍C/S架构客户端如何实现自动化测试。
首先我们设想一个基本的测试流程如下:运行网易云音乐-> 搜索歌曲并播放 -> 校验播放歌曲是否正确
下面我们使用AutoIT及Python+AutoIt分别实现相应的自动化测试:
运行网易云音乐客户端命令非常简单,如下我们定义了网易云音乐客户端路径,使用Run函数运行即可,并使用Sleep函数等待5秒至客户端启动完成:
- ;定义相关参数
- $cloudmusic_path="C:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe"
- ;运行网易云音乐
- Run($cloudmusic_path)
- Sleep(5000)
下面,我们使用WinWaitActive函数需要网易云音乐窗口弹出并成为激活状态,这时我们首先需要使用AutoIt Window Info获取窗口信息:
1) 运行网易云音乐客户端
2)运行AutoIt Window Info (x64)
3) 使用快捷键Ctrl+Alt+F激活窗口信息工具
4) 鼠标点击网易云标题栏,并使用快捷键Ctrl+Alt+F锁定窗口信息工具,可以看到此时我们获取的网易云音乐客户端的窗口信息包括Title,Class等
5) 这里我们使用Class:OrpheusBrowserHost作为WinWaitActive参数 (因为Title不固定是“网易云音乐”,当播放歌曲时为歌曲信息)
- $cloudmusic_title="[CLASS:OrpheusBrowserHost]"
- ;等待网易云音乐窗口激活
- WinWaitActive($cloudmusic_title)
下面我们在等待激活网易云音乐客户端窗口后,去搜索栏输入歌曲名称完成搜索及播放,同样我们使用窗口信息工具尝试获取搜索栏控件信息,发现无法正常获取搜索栏控件信息(鼠标云音乐标题栏移动至搜索栏时,Control Info没有任何变化)
这是由于AutoIt只支持标准的Microsoft控件,这样我们就只能使用模拟键盘鼠标操作的方法了。我们发现,在打开网易云音乐后,按TAB键5下会切换到搜索栏,此时输入歌曲名,再按向下键3下会选中第一首搜索歌曲,按回车即可播放,实现代码如下:
- $song="红玫瑰"
- ;按5下TAB切换至搜索框
- Send("{TAB 5}")
- ;搜索歌曲
- Send($song)
- Sleep(1000)
- ;按3下向下键选择第一首歌曲
- Send("{DOWN 3}")
- Sleep(1000)
- ;按回车键播放歌曲
- Send("{ENTER}")
- Sleep(1000)
下面我们校验播放的歌曲是否为我们搜索的歌曲,此时只需校验网易云音乐客户端标题即可,代码如下:
- ;校验当前窗口标题是否含有搜索歌曲名
- $title = WinGetTitle($cloudmusic_title)
- if StringInStr($title,$song) Then
- MsgBox(0, "测试通过", $song&" in "&$title,2)
- Else
- MsgBox(16, "测试失败", $song&" not in "&$title)
- EndIf
最后我们使用WinClose函数即可关闭网易云音乐窗口:
- ;关闭窗口
- WinClose($cloudmusic_title)
使用AutoIt进行网易云音乐客户端自动化测试,完整版示例demo如下:
- ;定义相关参数
- $cloudmusic_path="C:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe"
- $cloudmusic_title="[CLASS:OrpheusBrowserHost]"
- $song="红玫瑰"
- ;运行网易云音乐
- Run($cloudmusic_path)
- Sleep(5000)
- ;等待网易云音乐窗口激活
- WinWaitActive($cloudmusic_title)
- ;按5下TAB切换至搜索框
- Send("{TAB 5}")
- ;搜索歌曲
- Send($song)
- Sleep(1000)
- ;按3下向下键选择第一首歌曲
- Send("{DOWN 3}")
- Sleep(1000)
- ;按回车键播放歌曲
- Send("{ENTER}")
- Sleep(1000)
- ;校验当前窗口标题是否含有搜索歌曲名
- $title = WinGetTitle($cloudmusic_title)
- if StringInStr($title,$song) Then
- MsgBox(0, "测试通过", $song&" in "&$title,2)
- Else
- MsgBox(16, "测试失败", $song&" not in "&$title)
- EndIf
- ;关闭窗口
- WinClose($cloudmusic_title)
Python中同样有AutoIt lib库PyAutoIt,GitHub地址:https://github.com/jacexh/pyautoit,我们使用pip命令安装即可
- pip install - U pyautoit
官方示例demo(打开notepad记事本,输入hello world,然后不保存退出notepad )如下:
- import autoit
- autoit.run("notepad.exe")
- autoit.win_wait_active("[CLASS:Notepad]", 3)
- autoit.control_send("[CLASS:Notepad]", "Edit1", "hello world{!}")
- autoit.win_close("[CLASS:Notepad]")
- autoit.control_click("[Class:#32770]", "Button2")
同样我们将上面的AutoIt脚本改为Python版本(注意:autoit函数全部改为小写,以autoit.打头,且多个单词以_分割)如下:
- # coding:utf-8
- import autoit
- import time
- #定义相关参数
- cloudmusic_path="C:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe"
- cloudmusic_title="[CLASS:OrpheusBrowserHost]"
- song=u"红玫瑰"
- #运行网易云音乐
- autoit.run(cloudmusic_path)
- time.sleep(5)
- #等待网易云音乐窗口激活
- autoit.win_wait_active(cloudmusic_title)
- #按5下TAB切换至搜索框
- autoit.send("{TAB 5}")
- #搜索歌曲
- autoit.send(song)
- time.sleep(1)
- #按3下向下键选择第一首歌曲
- autoit.send("{DOWN 3}")
- time.sleep(1)
- #按回车键播放歌曲
- autoit.send("{ENTER}")
- time.sleep(1)
- #校验当前窗口标题是否含有搜索歌曲名
- title = autoit.win_get_title(cloudmusic_title)
- assert song in title,song.encode('utf-8')+' not in '+title.encode('utf-8')
- #关闭窗口
- autoit.win_close(cloudmusic_title)
我们还可以把上述脚本改为使用Nosetests框架的脚本,如下:
- # coding:utf-8
- import autoit
- import time
- class test_cloudmusic(object):
- # 定义相关参数
- cloudmusic_path = "C:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe"
- cloudmusic_title = "[CLASS:OrpheusBrowserHost]"
- song = u"红玫瑰"
- def test_search(self):
- # 运行网易云音乐
- autoit.run(self.cloudmusic_path)
- time.sleep(5)
- # 等待网易云音乐窗口激活
- autoit.win_wait_active(self.cloudmusic_title)
- # 按5下TAB切换至搜索框
- autoit.send("{TAB 5}")
- # 搜索歌曲
- autoit.send(self.song)
- time.sleep(1)
- # 按3下向下键选择第一首歌曲
- autoit.send("{DOWN 3}")
- time.sleep(1)
- # 按回车键播放歌曲
- autoit.send("{ENTER}")
- time.sleep(1)
- # 校验当前窗口标题是否含有搜索歌曲名
- title = autoit.win_get_title(self.cloudmusic_title)
- assert self.song in title, self.song.encode('utf-8') + ' not in ' + title.encode('utf-8')
- # 关闭窗口
- autoit.win_close(self.cloudmusic_title)
使用nosetests -v test_xxx.py即可运行测试,结果如下:
至此我们使用Python + AutoIt,并结合Nosetests框架完成了一个C/S架构客户端的自动化测试示例demo,此外还可以集成相关插件完成测试报告输出及邮件发送等功能,可以参考上一篇《接口自动化测试,完整入门篇》,在此恕不赘述。
1) https://www.autoitscript.com
2) https://github.com/jacexh/pyautoit
3) http://www.cnblogs.com/lovesoo/p/7845731.html
来源: http://www.cnblogs.com/lovesoo/p/7929066.html