所谓 C/S 架构即 Client/Server(客户端/服务器架构)。虽然近年来 C/S 架构产品越来越少,大有被 B/S(Browser/Server 浏览器/服务器)架构超越的趋势,但 C/S 还是有 B/S 不可替代的优势 (如系统速度快,用户体验好,处理能力强且可以实现复杂业务功能等)。
本文以网易云音乐客户端为例,介绍 C/S 结构系统自动化测试方法,操作系统为 Windows10,使用工具为 Python2.7+AutoIT v3。
AutoIt 是用以编写并生成具有 BASIC 语言风格的脚本程序的免费软件,它被设计用来在 WindowsGUI(用户界面) 中进行自动操作。通过它可以组合使用模拟键击,鼠标移动和窗口/控件操作等来实现自动化任务。AutoIt 非常小巧,可以在所有 windows 操作系统上运行,且不需要任何运行库。官网:https://www.autoitscript.com
直接从官网下载最新版本(v3.3.14.2)后安装即可,下载地址:https://www.autoitscript.com/site/autoit/downloads/
同时,我也上传到了百度网盘,还有两本中文帮助文档,推荐大家下载。链接: https://pan.baidu.com/s/1NNariF-WBehHPydzi2VsnA 密码: zffm
对于没有接触过 AutoIt 的同学,建议详细阅读下我上传的手册《AutoIt3CHS.chm》,里面有详细的入门教程。这里只做简单的介绍:
1) 首先安装完成之后,你会看到 AutoIt v3 安装目录如下:
其中 AutoIt Help File 是帮助手册,AutoIt Window Info 是窗口信息工具(x64 或 x86 分别代表 64 位或 32 位版本),Compile Script to .exe 是打包工具(打包 au3 脚本为 exe 文件),Run Script 是运行脚本工具,SciTE Script Editor 是脚本编辑器即 IDE。
2) 我们运行 SciTE Script Editor,输入如下代码(弹出消息框,输出 Hello World)
MsgBox(0,'Hello World','AutoIt Demo by Lovesoo')
3) Ctrl+S 保存当前文件
4) F5 运行,结果如下
下面我们以网易云音乐客户端为例,详细介绍 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,我们使用 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,此外还可以集成相关插件完成测试报告输出及邮件发送等功能,可以参考上一篇《接口自动化测试,完整入门篇》,在此恕不赘述。
获取更多信息,欢迎加入测试开发交流群:25452556