PythonTip >> 博文 >> chinaunix

python之自动将json转换为protobuf

zihua 2014-01-13 18:01:00 点击: 761 | 收藏


        在功能测试或集成测试中,用json造输入数据,然后moc测试脚本将json转化为protobuf发送给被测试模块或服务,是非常常见的功能测试手段。
        如果测试脚本用Python来写的话,一般的做法是用的Python调用json模块中函数解析json文件,然后新建protobuf对象,依次填写各字段,然后发送出去。
        当然如果愿意造上面的轮子也没关系,如果想偷懒也是可行的,pbjson.py脚本就为你干这事提供了温床,下面会介绍这个过程:
1、造json文件,内容如下:
        #vi testjson2pb.json
        {
            "name":"scq",
            "age":30,
            "work_unit":"taobao",
            "class_mate":[
                {
                    "name":"jim",
                    "age":30
                }
            ]
        }

2、造protobuf文件,内容如下:
        #vi testjson2pb.proto
        //class mate
        package json2pb;
        message PersonInfo {
            //my name
            required string name = 1;
            //my age
            optional int32 age = 2;
            //my work unit
            optional string work_unit = 3;
            message ClassMate {
                //name
                optional string name = 1;
                //age
                optional uint32 age = 2;
            }
            repeated ClassMate class_mate = 4;
        }

3、生成protobuf对应python文件:
        #protoc -I=. --python_out=. testjson2pb.proto
        testjson2pb_pb2.py

4、编写测试例子,具体如下:
        #vi testjson2pb.py
        -------------------------------------------------------------------------------------------------
        #!/usr/bin/env python
        # coding=utf-8

        import sys
        import logging
        import os
        import time
        import string
        import pbjson
        import simplejson
        import testjson2pb_pb2

        def main():
            f = file("testjson2pb.json")
            s = simplejson.load(f)
            f.close
            t = pbjson.dict2pb(testjson2pb_pb2.PersonInfo, s)
            print t

        if __name__  ==  "__main__":
            main()

5、执行脚本,结果如下:
        #python testjson2pb.py
        
        是不是很简单啊,自从有了这个脚本,再用不用担心人肉从json生成protobuf的问题了
        
      
原文链接:http://blog.chinaunix.net/uid-22312037-id-4064079.html

作者:zihua | 分类: chinaunix | 标签: python | 阅读: 761 | 发布于: 2014-01-13 18时 |