C/S架构系统自动化测试入门
所谓C/S架构即Client/Server(客户端/服务器架构)。虽然近年来C/S架构产品越来越少,大有被B/S(Browser/Server 浏览器/服务器)架构超越的趋势,但C/S还是有B/S不可替代的优势(如系统速度快,用户体验好,处理能力强且可以实现复杂业务功能等)。
本文以网易云音乐客户端为例,介绍C/S结构系统自动化测试方法,操作系统为Windows10,使用工具为Python2.7+AutoIT v3。
1. AutoIT 介绍
1.1 AutoIt 简介
AutoIt是用以编写并生成具有BASIC语言风格的脚本程序的免费软件,它被设计用来在WindowsGUI(用户界面)中进行自动操作。通过它可以组合使用模拟键击,鼠标移动和窗口/控件操作等来实现自动化任务。AutoIt非常小巧,可以在所有windows操作系统上运行,且不需要任何运行库。官网:https://www.autoitscript.com
1.2 AutoIt 下载安装
直接从官网下载最新版本(v3.3.14.2)后安装即可,下载地址:https://www.autoitscript.com/site/autoit/downloads/
同时,我也上传到了百度网盘,还有两本中文帮助文档,推荐大家下载。链接: https://pan.baidu.com/s/1NNariF-WBehHPydzi2VsnA 密码: zffm
1.3 AutoIt 快速入门
对于没有接触过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运行,结果如下
2. C/S架构客户端自动化测试
下面我们以网易云音乐客户端为例,详细介绍C/S架构客户端如何实现自动化测试。
首先我们设想一个基本的测试流程如下:运行网易云音乐-> 搜索歌曲并播放 -> 校验播放歌曲是否正确
下面我们使用AutoIT及Python+AutoIt分别实现相应的自动化测试:
2.1 AutoIt版
2.1.1 运行网易云音乐
运行网易云音乐客户端命令非常简单,如下我们定义了网易云音乐客户端路径,使用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)
2.1.2 搜索歌曲并播放
下面我们在等待激活网易云音乐客户端窗口后,去搜索栏输入歌曲名称完成搜索及播放,同样我们使用窗口信息工具尝试获取搜索栏控件信息,发现无法正常获取搜索栏控件信息(鼠标云音乐标题栏移动至搜索栏时,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)
2.1.3 校验播放歌曲是否正确
下面我们校验播放的歌曲是否为我们搜索的歌曲,此时只需校验网易云音乐客户端标题即可,代码如下:
;校验当前窗口标题是否含有搜索歌曲名
$title = WinGetTitle($cloudmusic_title)
if StringInStr($title,$song) Then
MsgBox(0, "测试通过", $song&" in "&$title,2)
Else
MsgBox(16, "测试失败", $song&" not in "&$title)
EndIf
2.1.4 关闭网易云音乐窗口
最后我们使用WinClose函数即可关闭网易云音乐窗口:
;关闭窗口
WinClose($cloudmusic_title)
2.1.5 完整AutoIt代码
使用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)
2.2. Python+AutoIt
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)
2.3 Python + AutoIt +Nosetests
我们还可以把上述脚本改为使用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,此外还可以集成相关插件完成测试报告输出及邮件发送等功能,可以参考上一篇《接口自动化测试,完整入门篇》,在此恕不赘述。
3. 参考资料
1) https://www.autoitscript.com
2) https://github.com/jacexh/pyautoit
3) http://www.cnblogs.com/lovesoo/p/7845731.html
C/S架构系统自动化测试入门的更多相关文章
- C/S架构自动化测试入门
所谓C/S架构即Client/Server(客户端/服务器架构).虽然近年来C/S架构产品越来越少,大有被B/S(Browser/Server 浏览器/服务器)架构超越的趋势,但C/S还是有B/S不可 ...
- C#语法——反射,架构师的入门基础。
前言 编程其实就是写代码,而写代码目的就是实现业务,所以,语法和框架也是为了实现业务而存在的.因此,不管多么高大上的目标,实质上都是业务. 所以,我认为不要把写代码上升到科学的高度.上升到艺术就可以了 ...
- Prometheus监控系统之入门篇(一)续
在上篇Prometheus监控系统之入门篇(一)中我们讲解了Prometheus的基本架构和工作流程, 并从0到1搭建了Prometheus服务,pushgateway以及告警系统. 本篇我们主要介绍 ...
- Python自动化测试入门必读(最新)
入门自动化测试必读 自动化测试概念 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期 ...
- 开源安全平台Ossim 4.5系统使用入门(高清视频)
开源安全平台Ossim 4.5系统使用入门 时长:15分钟 观看地址: http://www.tudou.com/programs/view/Yb0m4vPYlIQ/ 视频截图: 650) this. ...
- 转: React系统的入门系统
评注:React系统的入门系统. 转: http://www.infoq.com/cn/search.action?queryString=%E6%B7%B1%E5%85%A5%E6%B5%85%E ...
- 分布式消息系统Jafka入门指南之二
分布式消息系统Jafka入门指南之二 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 三.Jafka的文件夹结构 1.安装tree命令 $ sudo yu ...
- Python云端系统开发入门——框架基础
Django框架基础 这是我学习北京理工大学嵩天老师的<Python云端系统开发入门>课程的笔记,在此我特别感谢老师的精彩讲解和对我的引导. 1.Django简介与安装 Django是一个 ...
- linux系统基础入门
使用工具:源码管理,自动部署,web服务器(linux) linux系统基础入门 1.下载地址 2.本文介绍的是一个基于Ubuntu的开源操作系统 下载优麒麟 Ubuntu是一个广泛应用于个人电脑,云 ...
随机推荐
- Django框架(四) Django之视图层
视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...
- windows10下使用source insight出现"source insight program editor已停止工作"的问题
一.背景 1.1 OS 版本 windows 10 1.2 source insight版本 source insight 3.50.0034 二.解决方案 删除"我的文档"下面的source ins ...
- jQuery:ajax处理html页面
源码: $.ajax({ url: url, success: function (data) { var reg = /<body>[\s\S]*<\/body>/g; ]; ...
- [BZOJ4244]邮戳拉力赛
Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶 ...
- HDU 3404 Switch lights(Nim积)题解
题意:在一个二维平面中,有n个灯亮着并告诉你坐标,每回合需要找到一个矩形,这个矩形xy坐标最大的那个角落的点必须是亮着的灯,然后我们把四个角落的灯状态反转,不能操作为败 思路:二维Nim积,看不懂啊, ...
- VS中自动选择x86或x64的dll
http://www.cnblogs.com/lzjsky/archive/2010/09/06/1819321.html 原来使用Win7的32位系统,进行C#工程的开发,后来重装系统,换成了win ...
- CSS3 常用选择器
p:last-of-type{background-color: red;} 选择p中最后一项 p:nth-of-type(2n){background-color: red;} 隔行变色里面也可以填 ...
- 【Python】【问题集锦】
1. 用pycharm安装第三方包失败,报类似于“sort"的错误,就转战终端 2. Mac终端安装第三包失败,报类似于“ PermissionError: [Errno 13] Permi ...
- poj 2762 Going from u to v or from v to u? trajan+拓扑
Going from u to v or from v to u? Description In order to make their sons brave, Jiajia and Wind t ...
- Jmeter 中Cookie管理器的使用
Jmeter中有好几个地方可以管理Cookie,比如 Http Cookie Manager HTTP Header Manager jmeter.property文件中: #CookieManage ...