zoukankan      html  css  js  c++  java
  • 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)NeteaseCloudMusiccloudmusic.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)NeteaseCloudMusiccloudmusic.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)NeteaseCloudMusiccloudmusic.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)NeteaseCloudMusiccloudmusic.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

  • 相关阅读:
    1.1/1.1.1-玩转Python3金融API应用-easyutils的Readme文件
    1-玩转Python3金融API应用-查阅easytrader家族系列模块
    0-玩转Python3金融API应用-学习查阅API资料的重要性及怎样学
    一句sql搞定身份证校验位
    python爬虫--爬取某网站电影信息并写入mysql数据库
    Mysql简单笔记
    python爬虫--爬取某网站电影下载地址
    android dalvik heap管理分析
    dlmalloc 简析
    low memory killer配置的思考
  • 原文地址:https://www.cnblogs.com/lovesoo/p/7929066.html
Copyright © 2011-2022 走看看