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/1bINz8i 密码: hjq9

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没有任何变化)

这是由于窗口信息工具只支持标准的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

时间: 2024-10-02 10:48:23

C/S架构系统自动化测试入门的相关文章

自动化测试入门指南(2)-- 环境搭建

本文主要是介绍JDK+Eclipse+Maven+TestNG的环境搭建,环境搭建中所使用到的所有软件都可以从各软件官网获得,而为了方便大家学习,已经将本文用到的软件共享到百度网盘(http://pan.baidu.com/s/1c00bw8g) (由于Eclipse的插件在线安装的时候,容易受网络原因影响导致安装失败,所以百度网盘所提供的软件包已经安装好所介绍的插件,可参照第6小节介绍内容操作直接使用) 1 JDK 1.1 安装步骤 Step1. 双击打开jdk-8u45-windows-x6

C#语法——反射,架构师的入门基础。

前言 编程其实就是写代码,而写代码目的就是实现业务,所以,语法和框架也是为了实现业务而存在的.因此,不管多么高大上的目标,实质上都是业务. 所以,我认为不要把写代码上升到科学的高度.上升到艺术就可以了,因为艺术本身也没有高度.... 软件设计存在过度设计,语法和框架的理解,也存在过度理解.比如,反编译下,看看反射是怎么实现的... 有兴趣是好事,但就算知道了反射的本质,了解了反射是如何设计的,你技术也没什么质的改变.因为,技术水平最终还是要落实到应用上. 在比如,过度的追求代码性能,也不见得是一

系统架构师-基础到企业应用架构-系统设计规范与原则[上篇]1

一.上章回顾 在上篇中我们讲解了几类UML2.0语言新推出的建模图形,总体来说通过这些图形能更详细的将某类信息表达出来.在这里我们简单回顾上篇讲解的内容. 上图中已经简单介绍了上章讲述的内容,具体内容请看:系统架构师-基础到企业应用架构-系统建模[下篇]. 二.摘要 本章将主要的简单介绍在系统架构中的设计模式及相应规范准则.并结合相应的代码来说明如何遵循系统架构中的一些基本的设计规范及准则.而我们将在本文介 绍几类常用的设计规范,我们先来看看结构化设计的二个基本原则: 当然既然提出了基本的准则,

分布式消息系统Jafka入门指南之二

分布式消息系统Jafka入门指南之二 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 三.Jafka的文件夹结构 1.安装tree命令 $ sudo yum install tree 2.查看文件夹 $ tree -L 1 . ?..? ? bin ? ..?? conf ?..?? data ? ..?? lib ? ..?? LICENSE ?..? ? logs ?..?? VERSION 说明:bin文件夹:命令行脚本conf文件夹:存放配置

分布式消息系统Jafka入门指南

分布式消息系统Jafka入门指南 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.JafkaMQ简介 JafkaMQ是一个分布式的发布/订阅消息系统,它是Apache Kafka的Java移植版. 2013年11月28日,JafkaMQ发布了1.2.3版. JafkaMQ的特征如下: 1)消息持久化到磁盘的算法时间复杂度为O(1),即使是TB级的消息存储,也能保证常量时间的执行性能.2)高吞吐量:即使是低配制的硬件条件,单个Broker也能支持每

系统钩子入门

Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是Windows系统中非常重要的系统接口,用它 可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能.钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处 理.这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘.鼠标的输入,屏幕取词,日志监视等等.可见, 利用钩子可以实现许多特殊而有用的功能.因此,对于高级编程人员来说

开源单点登录系统CAS入门

1.开源单点登录系统CAS入门 1.1 什么是单点登录 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决. 1.2 什么是CAS CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种

全面系统Python3入门+进阶课程 ??

全面系统Python3入门+进阶课程 Python语言本身就是一门简单的语言,入门非常容易. 机器学习中用到的Python(语法)相对就更简单了. 本文从机器学习的视角来看需要具备的Python基础. 我们的目标是-- 没有蛀牙... 针对一个程序员(如Java程序员),在1个小时内学会足够机器学习中使用到的Python语法. 1. Python简介 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Guido van

架构思维—软件架构—系统架构—系统—大局观、系统观(结构与秩序)、还原论(分与合)

架构思维—软件架构—系统架构—系统—大局观.系统观(结构与秩序).还原论(分与合) 最高层次的规划,难以改变的决定 分解仅仅是加速开发和降低问题复杂度,如果分解后的内容无法集成在一起,那么分解就没有任何意义.分解+集成可以理解为架构最核心的思考方式和方法. https://zhuanlan.zhihu.com/p/30679273 架构的本质 一个软件系统随着功能越来越多,调用量急剧增长,整个系统逐渐碎片化,越来越无序,最终无法维护和扩展,所以系统在一段时间的野蛮生长后,也需要及时干预,避免越来