使用自动化测试框架Airtest测试Windows网易云

发表于:2021-9-22 09:51

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:苏州干饭queen    来源:掘金

  一、Airtest基本原理
  AirtestIDE对普通Windows应用程序的测试支持,主要依靠图像识别框架(Airtest)进行位置定位,使用 pywinauto的操作接口进行模拟操作。

  二、windows应用程序测试
  1. 需求分析与预期效果
  ·点击未登录,跳出扫码登录窗口
  ·点击选择其它登录方式
  ·点击同意《服务条款》《隐私政策》《儿童隐私政策》前面的小框框,勾选上
  ·从txt文件中导入第一条预期登录失败测试用例,分别输入到手机号文本框和密码文本框
  ·点击登录
  ·当出现手机号或密码错误红字警告时,将手机号文本框和密码文本框中内容全选,清空
  ·从txt文件中导入第二条预期登录成功测试用例,分别输入到手机号文本框和密码文本框
  ·点击登录
  ·登录成功后
  ·点击网易云音乐中音乐搜索框,搜索“江南”
  ·点击江南
  ·右键将歌曲收藏到指定歌单中
  ·打开歌单,查看歌曲是否成功添加
  ·播放歌单中歌曲

  2. 在AirtestIDE中连接Windows窗口
  要使用AirtestIDE测试某个Windows程序,首先要将待测试的Windows窗口与AirtestIDE进行连接,其实也就是将Windows窗口的句柄告诉给AirtestIDE。在成功连接窗口后,Airtest能够将该窗口作为一个设备,接下来就像在操作一台Android设备一样,能够对Windows窗口进行图像识别、点击操作等。
  因为测试网易云登录功能时,需要打开多个窗口,所以采用Windows窗口连接中的桌面模式。

  连接注意事项:
  在此模式下,与选择窗口不同,Airtest图像识别到的是整个桌面,所以Airtest工具可能会误识别到AirtestIDE代码中的截图语句,故要将AirtestIDE中脚本编辑框切换为代码模式。

  3. 测试用例的编写
  本次实验测试用例针对网易云音乐登录,设计了一组登录成功用例和一组登录失败用例,都放在了loginTest.txt里。
  13270976346,tjm981130。
  13270976346,tjm971130。

  4. 编写Airtest脚本
  测试脚本如下:

# -*- encoding=utf8 -*-
__author__ = "admin"

from airtest.core.api import *

auto_setup(__file__)

#搜索音乐的案例

#读取测试用例
with open("D:\\Airtest_Test\\loginTest.txt",encoding='utf-8') as f:
    content=f.readlines()
data_list=[]
for line in content:
    data_list.append([str(line.split(",")[0]),str(line.split(",")[1])])

#登录
touch(Template(r"tpl1608983218414.png", record_pos=(0.299, -0.266), resolution=(1920, 1080)))

touch(Template(r"tpl1609035178281.png", record_pos=(-0.001, 0.093), resolution=(1920, 1080)))


sleep(1)
touch(Template(r"tpl1608981293166.png", record_pos=(-0.072, 0.104), resolution=(1920, 1080)))
def input_pwd(index):
    touch(Template(r"tpl1608981390693.png", record_pos=(0.022, -0.036), resolution=(1920, 1080)))
    accountstr=data_list[index][0]
    print(accountstr)
    text(str(accountstr))
    sleep(1)
    touch(Template(r"tpl1608981404680.png", record_pos=(-0.024, -0.017), resolution=(1920, 1080)))
    password=data_list[index][1]
    print(password)
    text(str(password))
    sleep(1)
    touch(Template(r"tpl1608981588454.png", record_pos=(0.003, 0.025), resolution=(1920, 1080)))
for index in range(0,2):
    if(exists(Template(r"tpl1608983376213.png", record_pos=(-0.265, -0.065), resolution=(1920, 1080)))):
        touch(Template(r"tpl1608983415046.png", record_pos=(-0.282, -0.106), resolution=(1920, 1080)))
        keyevent("^a")
        keyevent("{DEL}")
        touch(Template(r"tpl1608984487238.png", record_pos=(-0.043, -0.016), resolution=(1920, 1080)))
        keyevent("^a")
        keyevent("{DEL}")

    input_pwd(index)

#搜索音乐

sleep(2)
touch(Template(r"tpl1608982011365.png", record_pos=(-0.305, -0.266), resolution=(1920, 1080)))

text("江南")
#touch(Template(r"tpl1608982102725.png", record_pos=(-0.326, -0.236), resolution=(1920, 1080)))
#enter键搜索
keyevent("{ENTER}")
sleep(1)
touch(Template(r"tpl1609040382463.png", record_pos=(-0.237, -0.106), resolution=(1920, 1080)))


# 获取当前连接的窗口
dev = device()
# 拿到鼠标,并模拟鼠标的右键点击操作
dev.mouse.right_click( (504, 336))
sleep(3)

#将歌曲添加到指定歌单
keyevent("^s")
touch(Template(r"tpl1609042019881.png", record_pos=(-0.059, 0.046), resolution=(1920, 1080)))
sleep(3)

#去歌单中查看歌曲是否被添加成功,并播放歌单
touch(Template(r"tpl1609040760016.png", record_pos=(-0.454, 0.052), resolution=(1920, 1080)))

touch(Template(r"tpl1609043299145.png", record_pos=(-0.245, -0.184), resolution=(1920, 1080)))

  脚本编写注意事项:
  在 keyevent()中不使用 {} 框起来的字符,都会被当成需要输入的字符串,被输入到Windows窗口的输入框上。
  常用sleep(),给服务器反应时间。
  windows上模拟键盘与鼠标操作与安卓端有些不同,具体在官方Windows平台api文档中查看。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号