python时间模拟

time_travel的Python项目详细描述


https://travis-ci.org/snudler6/time-travel.svg?branch=masterhttps://ci.appveyor.com/api/projects/status/y13ewnvmj0muoapf/branch/master?svg=trueDocumentation Statushttps://img.shields.io/pypi/pyversions/time-travel.svg

时间旅行-时间和I/O模拟库

time travel是一个python库,帮助用户编写确定性的 测试时间敏感和I/O密集型代码。

time travel在两个linux上都支持python 2.7、3.4、3.5、3.6和pypy2 和Windows。

安装

$ pip install time_travel

测试时间敏感代码

想象一下测试一个经过一段时间后超时的状态机。 一种测试方法是:

deftest_state_timeout():sm.handle_event(event=...)time.sleep(5)sm.handle_event(event=...)assertsm.state==TIMEOUT

这不好有几个原因:

  • 您的测试需要5秒才能运行。那是不允许的。
  • time.sleep()承诺进程将睡眠x最多。此测试可能会随机失败,具体取决于 状态机是。

没有什么比海森堡更糟糕的了(好吧,也许是一个slowheisenbuild)。 这里有一个更好的方法来使用time-travel

deftest_state_timeout():withTimeTravel()astt:sm.handle_event(event=...)tt.clock.time+=5sm.handle_event(event=...)assertsm.state==TIMEOUT

当调用handle_event方法时,它可能会检查时间 使用timedatetime模块之一。这些模块由 time-travel并返回存储在TimeTravel.clock.time中的值。

从现在起,您的时间敏感测试将运行得更快、更准确,并且 构建将是一致的。

测试I/O代码

time-travel还模拟i/o事件接口,如selectpoll

测试使用select的代码很简单-只需插入一个真正的socket对象 并从测试代码向其发送数据。但是超时呢?测试 超时时发生的行为迫使您实际wait!那是香蕉!

下面是如何使用time-travel

deftest_select_timeout():withTimeTravel()astt:sock=socket.socket()tt.add_future_event(2,sock,tt.event_types.select.WRITE)start=time.time()assertselect.select([sock],[sock],[])==([],[sock],[])# This will be satisfied after "2 seconds"asserttime.time()==start+2# You see? 2 seconds!assertselect.select([sock],[sock],[],100)==([],[],[])# This is the "timeout"asserttime.time()==start+2+100

再次,此代码将立即运行。

哦,是的,sock甚至不必是套接字对象:)

有关详细信息和用法示例,请参见 full documentation。你知道的 你想的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何向xsi:nil元素添加另一个属性?   Java抽象泛型方法,使用具体类型实现通配符   java使用pcap4j截断pcap文件   当我放置字母a、b和c时,java中的异常预期会下降   java设置活动对话框不可取消   接口类型变量上的Java克隆   使用Java或BouncyCastle对CSR(证书签名请求)进行安全解码/读取   java调用SavingsAccount对象上的函数并打印结果   java如何在Android应用程序上显示地图上的兴趣点(POI)并与之交互?   如果在JavaFX中的ResultSet中未找到任何内容,则显示java警报   java我将springboot和@component与@scheduled一起使用,它每12小时锁定一次   ApachePOI如何使用java删除包含字符串的word表的行   java如果对象(x,y)靠近其他对象(x,y)   从未对JMSException调用java JMS CachingConnectionFactory OneException方法   javascript使用java将HTML页面转换为MS word