51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1855|回复: 3
打印 上一主题 下一主题

[Appium] 在 Appium 自动化测试中实现输入语音

[复制链接]
  • TA的每日心情
    无聊
    2024-7-12 13:16
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2017-6-28 11:58:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    解决问题的思路

    最近测试的项目中,被测产品有一个功能是类似微信的长按输入语音的功能,不过我们的产品是输入语音后进行语音识别后返回文字。本来以为这个是没有办法做成自动化测试的,因为没有在appium的api文档中找到上传语音文件的方法。继续思考了一下是不是可以利用python其他的第三方库来实现呢,通过上网搜索后找到了方法。大的思路是利用appium在手机上对产品中的按钮进行长按操作,同时使用pygame的音频播放函数在电脑上播放录音。

    代码片段

    注意:下面不是完整的代码,大家可以做一下参考,如果要实际使用的话,请将相关配置替换为其他的被测app信息,还有需要提前用电脑录好要使用的录音文件,我这次使用的是mp3格式的音频文件。要是测试的功能是输入语音来查询北京天气。
    1. from appium import webdriver
    2. from nose.tools import *
    3. from pygame import mixer  #导入pygame方法用来后台播放音频文件
    4. import unittest

    5. class MyTestCase(unittest.TestCase):

    6.     @classmethod
    7.     def setUpClass(self):
    8.         desired_caps = {}
    9.         desired_caps['platformName'] = 'Android' #设置操作平台
    10.         --略--
    11.         global driver
    12.         driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

    13.     @classmethod
    14.     def tearDownClass(self):
    15.         driver.quit() #退出当前应用

    16.     def test_11_voice_weather_beijing(self):
    17.         driver.find_element_by_id('com.my.app.test:id/btn_set_mode_voice').click() #点击切换到语音模式
    18.         el = driver.find_element_by_id('com.my.app.test:id/btn_press_to_speak') #选中“按住说话”按钮
    19.         elx = el.location.get('x')  #获取按钮的x坐标
    20.         ely = el.location.get('y')  #获取按钮的y坐标
    21.         mixer.init()
    22.         mixer.music.load('testmp3.mp3')  #加载要播放的录音文件
    23.         mixer.music.play()    #后台播放录音
    24.         driver.swipe(elx,ely,elx,ely,10000)     #长按按钮10秒,开始接收语音,语音内容是“北京天气”
    25.         weather_text = driver.find_element_by_id('com.my.app.test:id/weather_region').text
    26.         assert_equal(weather_text, "北京")   #检查天气显示的区域是否正确
    复制代码
    代码分析
    上面的代码中,首先是导入pygame和appium和unittest等包,然后是做appium的启动设置。接下来找到“按住说话”按钮,然后是获取这个按钮在手机上的像素位置,这里的x和y组合在一起的像素点是在按钮的左上角的像素点。然后使用pygame.mixer的方法来在电脑上后台播放mp3录音文件。接下来是使用appium的swipe方法,我个人理解是如果在一个特别小的范围内滑动一定时间的话,效果是和长按一样的。代码最后一行就是在按钮的左上角一个像素点上滑动10秒钟,这样和长按这个按钮10秒钟是一样的。

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情

    1720761397
  • 签到天数: 1 天

    连续签到: 1 天

    2#
    发表于 2017-6-28 16:25:34 | 只看该作者
    666,但是怎么判断输入语音这个功能是OK的呢?要是一个case只有执行没有判断,感觉意义不是很大啊~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2017-6-28 16:25:58 | 只看该作者
    思路很赞简单实用.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-9-19 09:07
  • 签到天数: 11 天

    连续签到: 2 天

    [LV.3]测试连长

    4#
    发表于 2017-6-28 16:26:33 | 只看该作者
    我们是直接第三方实现的。。插入一段,不是自己写的。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-23 07:04 , Processed in 0.079545 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表