将Factory-boy生成的复杂对象转成dict的方法
最近在做接口测试,使用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的方法的更多相关文章
- 编写Python脚本把sqlAlchemy对象转换成dict的教程
编写Python脚本把sqlAlchemy对象转换成dict的教程 在用sqlAlchemy写web应用的时候,经常会用json进行通信,跟json最接近的对象就是dict,有时候操作dict也会比操 ...
- PHP将对象转换成数组的方法(兼容多维数组类型)
/** * @author gayayang * @date 2012-8-21 * @todo 将对象转换成数组 * @param unknown_type $obj * @return unkno ...
- 把dataset对象转换成list集合方法
public static List<T> GetList<T>(DataTable table) where T:new() { List<T> list = n ...
- python中自定义类对象json字符串化的方法
1. 用 json 或者simplejson 就可以 2.定义转换函数: def convert_to_builtin_type(obj): print 'default(', repr(obj), ...
- Django自定义对象转成json字符串
1.定义转换函数:def convert_to_builtin_type(obj): print 'default(', repr(obj), ')' # 把MyObj对象转换成dict类型的对象 d ...
- python class对象转换成json/字典
# -*- encoding: UTF-8 -*- class Student: name = '' age = 0 def __init__(self, name, age): self.name ...
- C# Emit动态代理生成一个实体对象
/// <summary> /// 使用Emit动态代理收集实体信息 /// </summary> /// <typeparam name="T"&g ...
- 设计模式---对象创建模式之工厂方法模式(Factory Method)
前提:“对象创建”模式 通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定.它是接口抽象之后的第一步工作. 典型模式(表现最为突出) 工 ...
- WCF生成客户端代理对象的两种方法的解释
最近在封装WCF,有一些很好的实践就记录下来,大家可以放心使用,所有代码都已经调试过.如果有高手可以大家探讨一下. 在WCF中有两种不同的方法可以用于创建客户端服务对象,他们分别为: 1. 代理构造法 ...
随机推荐
- Java-MyBatis-MyBatis3-XML映射文件:XML映射文件
ylbtech-Java-MyBatis-MyBatis3-XML映射文件:XML映射文件 1. XML 映射文件 MyBatis 的真正强大在于它的映射语句,这是它的魔力所在.由于它的异常强大,映射 ...
- PAT甲级——1072 Gas Station
A gas station has to be built at such a location that the minimum distance between the station and a ...
- PAT甲级——A1005 Spell It Right
题目描述 Given a non-negative integer N, your task is to compute the sum of all the digits of N, and out ...
- 02_Hibernate持久化配置
一.hibernate对象持久化 Web开发的分层: 为了把数据访问细节和业务逻辑分开, 一般把数据访问作为单独的持久化层.DAO是数据访问对象,使用hibernate后,数据访问对象中操作的API将 ...
- mvvmlight下passwordBox绑定的解决方法
在做公司的项目中,用到MVVMLight框架,需要做登陆注册的功能模块,但是在wpf中passwordBox没有内置绑定功能,因为出于安全的考虑.但是,博主又非常想要契合mvvm思想,一定要passw ...
- iOS开发系列-SQLite
概述 SQLite3是一款轻型的嵌入式数据库.它占用资源非常低,在嵌入式设备中,可能只需要几百K的内存就够了.它的处理速度比Mysql.PostgreSQL这两款著名的数据库速度还快. 数据库简介 常 ...
- BaseController 的使用
为了提现代码的高可用性,我们可以常见的把dao层进行抽取,service ,但是很少看见有controller的抽取,其实dao层也是可以被抽取的. 首先我们定义一个BaseController接口 ...
- COCI2014/2015 Contest#1 D MAFIJA【基环树最大独立点集】
T1725 天黑请闭眼 Online Judge:COCI2014/2015 Contest#1 D MAFIJA(原题) Label:基环树,断环+树形Dp,贪心+拓扑 题目描述 最近天黑请闭眼在 ...
- 初识css3 3d动画效果
(先看我博客右上角的3d盒子动画效果,目前没做兼容处理,最好最新的chrome看)无意间看到网上css3写的3d动画效果,实在炫酷,以前理解为需要js去计算去写,没想到css直接可以实现.于是开始研究 ...
- Jeecms6中后台控制层Action如何将值传入前台视图层模板中的?
转载:https://blog.csdn.net/wsm201005030226/article/details/44343069 Jeecms后台控制层如何传值到前台freemarker的? ...