打Boto3电话看起来很真实但没有效果

placebo的Python项目详细描述


安慰剂[构建状态](https://travis ci.org/garnaat/安慰剂.svg)](https://travis ci.org/garnaat/安慰剂)

[![代码健康](https://landscape.io/github/garnaat/安慰剂/master/landscape.svg?style=flat)(https://landscape.io/github/garnaat/placebo/master)


placebo允许您模拟BOTO3调用,这些调用看起来像正常调用,但实际上根本没有效果。它允许您记录一组
的调用并将其保存到数据文件中,然后在以后的
(例如在单元测试中)重放这些调用,而不必触及aws端点。

安慰剂使用Botocore中的事件机制来完成大部分工作。首先,您需要一个boto3会话对象。

~~ python
导入boto3
导入安慰剂

session=boto3.session()
~~

你可以告诉安慰剂关于这个疗程的情况,比如
这个:

~~ python
pill=安慰剂。attach(session,data_path='/path/to/response/directory')
~~


"data_path"是指向一个目录的路径,您希望在其中存储响应
,或者包含以前记录的响应您想要回放。

``attach``函数返回``pill``对象的一个实例。此对象将用于控制此会话对象创建的所有客户端的请求的所有录制和回放。


要做到这一点,只需:

~~ python
pill.record()
~~

默认情况下,``record``方法会将所有服务对
的响应记录到``数据路径'。如果您只对
某个特定服务的响应感兴趣,则可以通过传入
服务名称列表来限制录制。

~~ python
pill.record(services=-ec2,iam')
~~

这将限制记录来自"ec2"服务和"iam"服务的响应。如果要将录制限制为仅在单个服务中的特定操作
,可以执行以下操作:

~~ python
pill.record(services='ec2',operations='describeInstances,describeKeyPairs')
~~

,任何符合记录规范且在治疗过程中
被创建的客户都将具有安慰剂意识。要记录响应,只需创建客户机并像平常一样使用它。

~~ python
lambda=session.client('lambda')
lambda.list_functions()
…更多lambda调用…
~~~

每个响应都将作为单独的json数据文件保存在附加会话时指定的"data-path"路径中。来自
同一服务和操作的多个响应存储为单独的文件,在回放时将以相同的顺序回放。

要重放保存的请求:

~~ python
导入boto3
导入安慰剂

会话=boto3.session()
药丸=安慰剂。附加(会话,数据路径='/path/to/response/directory')
药丸.playback()
lambda=session.client('lambda')
lambda.list_functions()
…模拟响应有时会返回到附加到默认会话的



安慰剂需要附加到BOTO3[默认会话](http://boto3.readthedocs.io/en/latest/guide/session.html default session)
对象。

有必要通过调用"boto3.set up\u default\u session()"显式设置
默认会话。
默认会话可在"boto3.default\u session"访问。


例如:

~~ python
导入boto3
导入安慰剂

=Boto3.默认疗程
药丸=安慰剂。附加(会话,data_path='/path/to/response/directory')
pill.record()

BOTO3默认会话。



=安慰剂。附加(session,record撸format="pickle")
````



"codesha256":"i8scq2g6zkcpivhkzvzqciv4pdysxq4gz+jlcmdy5y=",
"函数名":"foobar",
"内存大小":128,
"codesize":876521,
"函数名":"arn:aws:lambda:us-west-2:123456789012:函数:foobar",
"handler":"foobar.handler",
"role":"arn:aws:iam::123456789012:role/foobar role",
"timeout":30,
"lastmodified":"2015-11-06t22:30:32.164+0000",
"runtime":"python2.7",
"description":"foos all of the bars"
}


pill.save_response(service='lambda',operation='list functions',
response_data=list_functions_response,http_response=200)
~~

响应
将按顺序返回。最后一个参数是http响应代码,
是可选的。默认值是200。


例如:
~~ python
@安慰剂会话
定义测试你的函数(self,session):
foo=foo()
arn=foo.创建iam角色(session)
self.assertequal(arn,"arn:aws:iam::123:role/{}"。format(foo.role\name))
~~

一个环境变量:
~~ bash
$安慰剂模式=记录鼻子测试。测试:test foo.test创建角色
~~~


>您可以选择通过aws配置文件以使用:
~~ bash
$安慰剂模式=foo安慰剂模式=记录鼻子测试测试。测试:testfoo.test_create_iam_roles
~~


>您可以选择设置要使用的记录格式:
``` bash
$安慰剂格式=泡菜安慰剂模式=记录鼻测试。测试:testfoo.test_create_iam_roles
``

它创建了以下json布点:
~~
测试/安慰剂/安慰剂/试验foo.测试创建角色
测试/安慰剂/试验foo.测试创建角色/iam.createrole_1.json
测试/安慰剂/试验foo.测试创建角色/iam.createrole_1.json
测试/安慰剂/试验foo.测试创建角色/iam.getrole_1.json
测试/安慰剂/试验foo.测试创建角色/iam.getrolepolicy_1.json
测试/安慰剂/testfoo.testfoo.test创建角色/u创建角色/iam.iam.getrolepolicy_1.json
测试/安慰剂/testfoo.testfoo.test是的test_create_iam_roles/iam.putrolepolicy_1.json
~~~


创建json后,只需删除环境变量并重新运行测试:
~~~ bash
$noestests tests.tests:testfoo.test_create_iam_roles
~~~

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

推荐PyPI第三方库


热门话题
java处理程序/Runnable不更新ImageView和原始资源   java扩展log4j2。当xml变得很长时,将其拆分   java在构建图形时如何检查唯一值?   java在POI中使用列索引   java我应该如何解决这个ClassCastException?   json Java:JSONParseException   java在seamgen未生成的Seam项目中运行测试   java希望通过按属性对其他对象列表进行分组来创建一个新列表   Java自定义注释,以在调用带注释的方法之前调用其他方法   hibernate中的java即使我将cascade type设置为ALL,但为什么在删除时仍然收到外键冲突异常?   web驱动程序中的java是否可以在同一网页中从一个帧切换到另一个帧   java使用ApacheCsvparser获取非科学符号的数字   IDEA中Spring注释的java自动选择   java如何摆脱JSONException:没有成功的价值?   java最大库存(贪婪法)   匹配参数列表的Java正则表达式