最近在做接口测试,使用Factory-boy来生成接口对象实例,接着将对象转成dict,最后通过requests发送请求。

对象转成dict,目前知道的方法就是object.__dict__ 。这个方法用于普通对象(这边指的是,属性值都是str和int)还挺方便的,一旦遇到复杂的对象(属性值是其它对象实例)就不适用了。

在网上没有找到适用的代码,所以只能自己写个勉强能用的,目前支持属性值是str 、 int  、object 和 list的情况

 def objecttodict(obj):
dict_o=obj.__dict__
for key, value in dict_o.items():
print(key,type(value))
if isinstance(value, (str,int)):#不处理str,int的情况
pass
elif value is None:
pass
elif isinstance(value, list):#处理list的情况
valuelist=[]
for l in value:
if isinstance(l, (str,int)):
valuelist.append(l)
else:
valuelist.append(objecttodict(l))
dict_o[key] = valuelist
elif isinstance(value, dict):
pass#不处理dict的情况
else:#处理普通对象
dict_o[key]=objecttodict(value)
return dict_o

比如下面结构的对象,可以通过上面的方法转成dict

下面是试验使用的Factory-boy例子

 import factory.fuzzy
from demo_factory_boy.fbobject.user import User
from demo_factory_boy.fbobject.school import School
from demo_factory_boy.fbobject.home import Home
from demo_factory_boy.fbprivader.numpv import NumProvider factory.Faker.add_provider(NumProvider) #添加自定义的NumProvider class HomeFactory(factory.Factory):
class Meta:
model = Home address = factory.sequence(lambda n: 'address%04d' % n)#factory.sequence
name=["hhh",2] class SchoolFactory(factory.Factory):
class Meta:
model = School schoolName = factory.sequence(lambda n: 'school%04d' % n)#factory.sequence
home=factory.List(factory.build_batch(HomeFactory, 4)) class UserFactory(factory.Factory):
class Meta:
model = User name = factory.Faker("name", locale="zh_CN")#factory.Faker
num = factory.Faker("num")
#age = factory.fuzzy.FuzzyInteger(42)#factory.fuzzy.FuzzyInteger
age = factory.Faker("random_int",min=18, max=30, step=1)
city = factory.Faker("address", locale="zh_CN")
phone = factory.fuzzy.FuzzyText("", 7, "", "")#factory.fuzzy.FuzzyText
school = factory.SubFactory(SchoolFactory)#factory.SubFactory #info=factory.List([SchoolFactory])
info =factory.List(factory.build_batch(SchoolFactory, 4)) class Params:
shipped = factory.Trait(
name=None
)

将Factory-boy生成的复杂对象转成dict的方法的更多相关文章

  1. 编写Python脚本把sqlAlchemy对象转换成dict的教程

    编写Python脚本把sqlAlchemy对象转换成dict的教程 在用sqlAlchemy写web应用的时候,经常会用json进行通信,跟json最接近的对象就是dict,有时候操作dict也会比操 ...

  2. PHP将对象转换成数组的方法(兼容多维数组类型)

    /** * @author gayayang * @date 2012-8-21 * @todo 将对象转换成数组 * @param unknown_type $obj * @return unkno ...

  3. 把dataset对象转换成list集合方法

    public static List<T> GetList<T>(DataTable table) where T:new() { List<T> list = n ...

  4. python中自定义类对象json字符串化的方法

    1. 用 json 或者simplejson 就可以 2.定义转换函数: def convert_to_builtin_type(obj): print 'default(', repr(obj), ...

  5. Django自定义对象转成json字符串

    1.定义转换函数:def convert_to_builtin_type(obj): print 'default(', repr(obj), ')' # 把MyObj对象转换成dict类型的对象 d ...

  6. python class对象转换成json/字典

    # -*- encoding: UTF-8 -*- class Student: name = '' age = 0 def __init__(self, name, age): self.name ...

  7. C# Emit动态代理生成一个实体对象

    /// <summary> /// 使用Emit动态代理收集实体信息 /// </summary> /// <typeparam name="T"&g ...

  8. 设计模式---对象创建模式之工厂方法模式(Factory Method)

    前提:“对象创建”模式 通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定.它是接口抽象之后的第一步工作. 典型模式(表现最为突出) 工 ...

  9. WCF生成客户端代理对象的两种方法的解释

    最近在封装WCF,有一些很好的实践就记录下来,大家可以放心使用,所有代码都已经调试过.如果有高手可以大家探讨一下. 在WCF中有两种不同的方法可以用于创建客户端服务对象,他们分别为: 1. 代理构造法 ...

随机推荐

  1. iOS之UIButton的normal和selected状态切换

    1.问题? 改变播放器按钮状态,发现从selected切回到normal状态时候,中间会切换normal-selected-normal的图片? 2.原因…… normal-->selected ...

  2. PAT甲级——A1003Emergency

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  3. 《DSP using MATLAB》Problem 7.36

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  4. js中的继承和重载

      js中有三种继承方式:一.通过原型(prototype)实现继承 二.借用构造函数式继承,可分为通过call()方法实现继承和通过apply()方法实现继承 仅仅通过原型继承我们可以发现在实例化子 ...

  5. 2019-3-1-VisualStudio-扩展开发-获得输出窗口内容

    title author date CreateTime categories VisualStudio 扩展开发 获得输出窗口内容 lindexi 2019-03-01 09:21:41 +0800 ...

  6. 在AlexNet中LRN 局部响应归一化的理

    在AlexNet中LRN 局部响应归一化的理 一.LRN技术介绍: Local Response Normalization(LRN)技术主要是深度学习训练时的一种提高准确度的技术方法.其中caffe ...

  7. [CQOI2009]叶子的染色【性质+树形Dp】

    Online Judge:Bzoj1304,Luogu P3155 Label:无根树,树形Dp 题目描述 给定一棵\(N\)个节点的无根树,它一共有\(K\)个叶子节点.你可以选择一个度数大于1的节 ...

  8. Apache 禁用IP 访问 和 HTTP 跳转 HTTPS

    如果需要 禁用IP 访问并且 需要 HTTP 跳转到 HTTPS <VirtualHost *:80> ServerName xxx.xxx.com RewriteEngine On Re ...

  9. 深入浅出 Java Concurrency (2): 原子操作 part 1[转]

    从相对简单的Atomic入手(java.util.concurrent是基于Queue的并发包,而Queue,很多情况下使用到了Atomic操作,因此首先从这里开始).很多情况下我们只是需要一个简单的 ...

  10. IO流14 --- 打印流的使用 --- 技术搬运工(尚硅谷)

    PrintStream 字节打印流PrintWriter 字符打印流 @Test public void test9() throws Exception { FileOutputStream fos ...