51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1037|回复: 1
打印 上一主题 下一主题

[资料] 多机Monkey全自动测试尝试

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

    连续签到: 2 天

    [LV.5]测试团长

    跳转到指定楼层
    1#
    发表于 2021-11-26 13:18:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    说起Monkey测试,很多人第一印象是,那不简单,一条命令跑起来就可以了。如同厨师毕业考试,要做一盘麻婆豆腐。看似简单,真正要做到好,就不见得有那么容易了。
      确实,如果很简单的monkey测试,一条命令就够了。但是跑这条命令的时候,你是不是需要手动做很多准备工作和考虑一下几个方面?
      1. 下载安装build
      2. 如果有登录,你还得手工先登录好, monkey可做不来这活儿。
      3. Monkey就是个顽皮的小猴子,不可控,总会点到系统的东西。
      4. 分析log, 提炼出crash信息。
      如果有多台设备呢?
      如果要对多个产品测试呢?
      你会发现手工真的好累。
      Snake 尝试将其全部自动化,这样省时省力。先看流程图:

    只需要把指定产品,指定环境,随便插上几台设备,启动脚本,就可以悠哉悠哉喝茶去了。
      程序会自动将APK build好,下载到电脑上,分别把设备黑名单设置好。
      自动启动appium server, 分别把apk安装在设备上,然后登录好。分别启动monkey,运行起来。
      完成以后,自动分析log, 将最终结果总结出来,发封邮件到你邮箱。
      这是多么美好的一件事情哈。
      可能你会说,你端口如何设置?这个不用担心,当设备插入后,程序会自动将设备的信息,name, version等分别记录在案,并分配了端口。
      这是如何做到的呢?
      自然少不了多线程,这里要简单介绍下python的多线程。
      Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。
      apply()
      函数原型: apply(func[, args=()[, kwds={}]])
      该函数用于传递不定参数,主进程会被阻塞直到函数执行结束(不建议使用,并且3.x以后不在出现)。
      apply_async()
       函数原型:apply_async(func[, args=()[, kwds={}[, callback=None]]])
      与apply用法一样,但它是非阻塞且支持结果返回进行回调。
      map()
      函数原型:map(func, iterable[, chunksize=None])
      Pool类中的map方法,与内置的map函数用法行为基本一致,它会使进程阻塞直到返回结果。 注意,虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程。
      join()
      主进程阻塞等待子进程的退出,join方法必须在close或terminate之后使用。
      Monkey的命令,以及黑名单,就不在这讲了,如果还不知,请自行搜索。
      运行时,大概就是这样子的。
      
    1.   check_folder(log_dir)
    2.       jenkins = Jenkins(build_path)
    3.       jenkins.download_build()
    4.       get_devices_info()
    5.       if get_devices_info():
    6.           pool = Pool(len(get_devices_info()))
    7.           pool.map(start_appium_server,get_devices_info())
    8.           pool.close()
    9.           pool.join()
    10.           pool2 = Pool(len(get_devices_info()))
    11.           pool2.map(login,get_devices_info())
    12.           pool2.close()
    13.           pool2.join()
    14.           pool3 = Pool(len(get_devices_info()))
    15.           pool3.map(write_blacklist,get_devices_info())
    16.           pool3.close()
    17.           pool3.join()
    18.           pool4 = Pool(len(get_devices_info()))
    19.           pool4.map(run_monkey, get_devices_info())
    20.           pool4.close()
    21.           pool4.join()
    22.       else:
    23.           print("no device found")
    复制代码

      目前运行起来还是很有效果的,就是有自己乱点正好登出等小问题。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    该用户从未签到

    2#
    发表于 2021-12-1 20:33:33 | 只看该作者
    能不能再写得细一点,新手想一步一步跟着操作
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-6-9 16:25 , Processed in 0.075915 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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