多机Monkey全自动测试尝试

发表于:2021-11-24 09:32

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

 作者:Snake    来源:知乎

#
Monkey
分享:
  说起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的命令,以及黑名单,就不在这讲了,如果还不知,请自行搜索。
  运行时,大概就是这样子的。
     check_folder(log_dir)
      jenkins = Jenkins(build_path)
      jenkins.download_build()
      get_devices_info()
      if get_devices_info():
          pool = Pool(len(get_devices_info()))
          pool.map(start_appium_server,get_devices_info())
          pool.close()
          pool.join()
          pool2 = Pool(len(get_devices_info()))
          pool2.map(login,get_devices_info())
          pool2.close()
          pool2.join()
          pool3 = Pool(len(get_devices_info()))
          pool3.map(write_blacklist,get_devices_info())
          pool3.close()
          pool3.join()
          pool4 = Pool(len(get_devices_info()))
          pool4.map(run_monkey, get_devices_info())
          pool4.close()
          pool4.join()
      else:
          print("no device found")
  目前运行起来还是很有效果的,就是有自己乱点正好登出等小问题。

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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号