Monkey

gevent支持的协程

拟墨画扇 提交于 2020-05-01 14:24:00
Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是 Greenlet , 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。 1 import gevent 2 3 def foo(): 4 print ( ' Running in foo ' ) 5 gevent.sleep(1 ) 6 print ( ' Explicit context switch to foo again ' ) 7 8 def bar(): 9 print ( ' Explicit context to bar ' ) 10 gevent.sleep(2 ) 11 print ( ' Implicit context switch to bar again ' ) 12 gevent.joinall([ 13 gevent.spawn(foo), 14 gevent.spawn(bar), 15 ]) 1 from gevent import monkey; 2 3 monkey.patch_all() 4 from urllib.request import urlopen 5 import time 6 7 def f(url): 8 print ( ' GET:

Python协程(真才实学,想学的进来)

坚强是说给别人听的谎言 提交于 2020-05-01 03:34:55
真正有知识的人的成长过程,就像麦穗的成长过程:麦穗空的时候,麦子长得很快,麦穗骄傲地高高昂起,但是,麦穗成熟饱满时,它们开始谦虚,垂下麦芒。 ——蒙田《蒙田随笔全集》 上篇论述了关于python多线程是否是鸡肋的问题,得到了一些网友的认可,当然也有一些不同意见,表示协程比多线程不知强多少,在协程面前多线程算是鸡肋。好吧,对此我也表示赞同,然而上篇我论述的观点不在于多线程与协程的比较,而是在于IO密集型程序中,多线程尚有用武之地。   对于协程,我表示其效率确非多线程能比,但本人对此了解并不深入,因此最近几日参考了一些资料,学习整理了一番,在此分享出来仅供大家参考,如有谬误请指正,多谢。 申明: 本文介绍的协程是入门级别,大神请绕道而行,谨防入坑。 文章思路:本文将先介绍协程的概念,然后分别介绍Python2.x与3.x下协程的用法,最终将协程与多线程做比较并介绍异步爬虫模块。 协程 概念   协程,又称微线程,纤程,英文名Coroutine。协程的作用,是在执行函数A时,可以随时中断,去执行函数B,然后中断继续执行函数A(可以自由切换)。但这一过程并不是函数调用(没有调用语句),这一整个过程看似像多线程,然而协程只有一个线程执行。 优势 执行效率极高,因为子程序切换(函数)不是线程切换,由程序自身控制,没有切换线程的开销。所以与多线程相比,线程的数量越多,协程性能的优势越明显。

Python Day 35 并发编程(守护线程,锁,信号量,事件,条件,定时器,线程队列,Python标准模块--concurrent.futures,协程,Greenlet模块,Gevent模块)

感情迁移 提交于 2020-04-30 04:06:07
守护线程 无论是进程还是线程,都遵循:守护xx会等待主xx运行完毕后销毁.需要强调的是:运行完毕并非终止运行 守护进程 会等待主进程的代码执行结束而结束 p=Process(target=sayhi,args=('egon',)) p.daemon=True #必须在t.start()之前设置 守护线程 会等待主线程执行完毕才结束,主线程会等待所有子线程结束而结束 t=Thread(target=sayhi,args=('egon',)) t.setDaemon(True) #必须在t.start()之前设置 1 主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束, 2 主线程在其他非守护线程运行完毕后才算运行完毕(守护线程在此时就被回收)。因为主线程的结束意味着进程的结束,进程整体的资源都将被回收,而进程必须保证非守护线程都运行完毕后才能结束。 import time from threading import Thread from multiprocessing import Process def func1(): time.sleep(3) print('in func1') def func2(): while True: time.sleep(0.5)

【2020Python修炼记】python并发编程(七)协程

馋奶兔 提交于 2020-04-28 08:41:23
一、什么是协程 引例: import time # 串行执行计算密集型的任务 1.2372429370880127 def func1(): for i in range(10000000 ): i + 1 def func2(): for i in range(10000000 ): i + 1 start_time = time.time() func1() func2() print (time.time() - start_time) 切换 + yield 2.1247239112854004 import time def func1(): while True: 10000000 + 1 yield def func2(): g = func1() # 先初始化出生成器 for i in range(10000000 ): i + 1 next(g) start_time = time.time() func2() print (time.time() - start_time) 串行执行 1、协程: # 单线程实现并发,在应用程序里控制 多个任务的切换+保存状态 # 优点:应用程序级别速度要远远高于操作系统的切换 # 缺点: 多个任务一旦有一个阻塞没有切,整个线程都阻塞在原地,该线程内的其他的任务都不能执行了 一旦引入协程,就需要检测单线程下所有的IO行为,

腾讯大牛带你了解系统架构上的异常

心已入冬 提交于 2020-04-27 16:22:08
对于测试同学来说,设计及执行异常场景的用例是平时工作中非常重要的一部分,因为只关注正常流程的话,那么很多情况下隐藏的缺陷并不能被完全的发现。 很多同学经常在上线之后感到惴惴不安,心里很没底,哪怕上线之前测试的再充分,都会有这样的感觉。这是因为我们很难预见到线上系统会出现哪些我们所没有覆盖到的异常场景。 异常场景大致可以分为下面这几类: 一、业务上的异常流程 比如正常的业务流程是用户先操作步骤1再操作步骤2,但是用户偏偏先做步骤2再做步骤1。因为测试同学在执行测试时,往往是对被测产品有一定的认识的。既然对被测有所了解,甚至大部分情况是非常了解,这样一来就会对被测产品的设计是有一定的认同感的,就会先入为主的认为用户一定会先做步骤1再做步骤2,这样就会忘记验证异常的场景,造成缺陷遗留到线上,产生了不太好的后果。 所以一些有经验的测试同学会站在用户的角度上去设计测试用例。因为用户的行为永远是千奇百怪的,所以有时候我们确实要设计一些逻辑上看上去不太合理的用例,设计这些用例时往往还会伴随着 “靠,竟然有这种操作”的惊叹,这种惊叹用例往往是很有价值的,能发现程序设计或者是产品设计上的漏洞。 永远不要相信用户的输入,永远不要认为用户的操作是感性合理有章可循的。抱着怀疑的态度去测试往往能产生意想不到的效果。 二、操作上的异常 这种异常可能会比较隐蔽。比如在电商系统生成订单的时候

appium----Monkey测试

一个人想着一个人 提交于 2020-04-24 22:51:15
  做过app测试的应该都知道Monkey测试,今天简单的介绍下Monkey如何测试 什么是Monkey monkey测试的原理就是利用socket通讯的方式来模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常。当Monkey程序在模拟器或设备运行的时候,如果用户出发了比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey用随机重复的方法去负荷测试你开发的软件。 环境依据 Monkey属于Android自带的,主要依据adb命令,安装Android-sdk,不懂的可以去看下小编的另一篇博客-- Android-SDK , adb命令 。 Monkey能做什么 Monkey 主要用于Android 的压力测试 测试app的稳定性,性能, 主要目的就是为了测试app 是否会Crash,Anr,也可以压测时间长看看app是否存在内存泄漏 Monkey简单使用 Monkey格式 # monkey命令 adb shell monkey –p 包名 -v (-s) 100 # Adb shell 这个是进入android的shell环境 # Monkey 这个是调用shell里面的monkey工具 (monkey是每个手机出场自带的,我们输入指令是去唤醒它) # -p 包名 # -v 用亍指定反馈信息级别(信息级别就是日志的详细程度) #

Android自动化测试--monkey总结

人走茶凉 提交于 2020-04-24 22:50:58
什么是 Monkey   Monkey 是一个 Android 自动化测试小工具。主要用于Android 的压力测试, 主要目的就是为了测试app 是否会Crash. Monkey 特点   顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么都不懂, 只知道乱敲。通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。 Monkey程序介绍   Monkey 程序是由 Android 系统自带,使用 Java 语言写成。在Android文件系统中的存放路径是: /system/framework/monkey.jar;   Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;   Monkey 启动方式:在 cmd 命令提示符里面输入命令行来启动 monkey 测试。 一、Monkey简介: Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击、滑动、Application切换、横竖屏、应用关闭)实现对正在开发的应用程序进行压力测试

Android App 压力测试方法(Monkey)

家住魔仙堡 提交于 2020-04-24 21:13:34
转载: https://www.cnblogs.com/ailiailan/p/6543166.html Android App 压力测试方法(Monkey) 一.为什么要开展压力测试 a.提高产品的稳定性;b.提高产品的留存率 二.什么时候开展压力测试 a.首轮功能测试通过后;b.下班后的夜间进行 三.7个基础知识(理论部分) 3.1 手动测试场景与自动测试场景 3.2 Monkey测试工具介绍 Monkey是发送伪随机用户事件的工具;Monkey在手机系统里;Monkey需要借助ADB使用; 3.3 MonkeyScript测试命令集合介绍 3.4 异常测试结果分析 四.6个实践小案例 4.1 一次Android App的压测实践 需要准备的环境:1.Android SDK环境;2.python环境 压测过程:Step1. Step2. Step3. Step4. Step5. Step6. 4.2 Monkey高级参数——throttle实践 4.3 Monkey高级参数——seed实践 每一个seed值对应一个操作序列,seed值相同,操作序列就相同,最终的结果也是相同的,设定seed值可以用来复现bug 4.4 Monkey高级参数——触摸事件实践 加 -v 可以看到每次事件的详情 4.5 Monkey高级参数——其他事件实践 4.6 crash异常测试结果析取 4.7

安卓app测试之Monkeyrunner

。_饼干妹妹 提交于 2020-04-24 20:58:53
一、MonkeyRunner简介 MonkeyRunner提供了系列的API ,MonkeyRunner可以完成模拟事件及截图操作 ,分为以下三类: MonkeyRunner:用来连接设备或模拟器的 MonkeyDevice:提供安装、卸载应用,发送模拟事件 MonkeyImage:完成图像保存及对比的操作 多设备控制 功能测试 回归测试 二、MonkeyRunnerAPI 1、alert ——警告框 MonkeyRunner.alert(string message, string title, string okTitle) message: 弹出对话框内容 title: 对话框的标题栏显示内容,默认值为"Alert" okTitle : 对话框的按钮,默认值为"OK 2、waitForConnection —— 等待设备连接,多个设备,需要指明哪个设备 MonkeyRunner.waitForConnection(float timeout, string deviceId) timeout: 等待超时时间,默认值为永久等待. deviceId: 通过设备ID去设别手机或模拟器.如果只有一台手机的时候,不需要输入. 三、MonkeyDeviceAPI 1、drag ——拖动 device.drag(tuple start, tuple end, float duration,

(appium+python)UI自动化_07_app UI自动化实例【叮咚搜索加车为例】

非 Y 不嫁゛ 提交于 2020-04-24 09:27:14
前言 初学UI自动化的小伙伴,在配置好appium+python自动化环境后,往往不知道如何下手实现自动化。小编在初期学习的时候也有这种疑惑,在此以叮咚买菜app-搜索加车为实例,展示下appium是如何实现自动化的。 前提:已安装配置好appium+python自动化环境 一、连接手机启动app 1,连接手机 -手机USB连接电脑 -手机打开开发者模式、USB调试功能 2,基础信息配置 基础连接信息如下(以叮咚app为例): 'platformName': 操作平台 'deviceName': 设备名称 'platformVersion':系统版本号 'appPackage': apk包名 'appActivity':apk activity 'noReset': 在此会话之前不要重置应用程序状态,即非初始化。参数值:true, false 更多配置参数信息可参考: https://www.cnblogs.com/D666/p/9165086.html 备注:获取设备号/ app包名/activity详情可查看 https://www.cnblogs.com/mini-monkey/p/11691862.html 3,启动appium服务 1,启动appium获取appium服务地址 appium启动页获取host和port,默认配置host:0.0.0.0,port:4723,