本节课让我们来想办法构造出上节课我们设计的数据格式:
然后 我们来看下数据库的大概格式:
好现在我们来实现代码:
首先,我们先弄好res这个最终体的外层(第一层)骨架:
第二步,我们要给这个res.cases这个列表进行填充。所以是个循环肯定,而循环内的每个元素是个字典,所以:
注意,关于各层级的result 的值,等到我们写完基本结构,再去考虑即可。
这其中的steps依然是个空列表,别着急我们再用一个循环去填充它。
但是先别着急去实现这个循环。
我们先写上最后把这个tmp塞入到res["cases"]这个列表中才行,不然最后容易忘。
然后是这个循环steps。注意此时我们还没有steps,需要去数据库中查。
然后再遍历这个steps 去填充tmp["steps"]
注意,此时要填充的每个元素还是个字典,所以我们还要用一个临时字典去承载这些,但是tmp的名字已经被外层case用过了,所以我们这里加个后缀,叫tmp_step。然后依次填入:
然后最后一个元素是tmp_step["data"]
它是一个字典,比较特殊,内部有三个值:请求数据,返回体,断言结果。
而这三个值都需要根据step_id 去数据库表中查,然后就是把这个step塞入我们外层的tmp["steps"]中了:
好,到此,我们算是构造完了。这里需要先测试下,打印res
打印结果:
打印的结果大家看着不方便,我加几个回车就清晰了:
{'result': '', 'cases': [ {'case_id': 21, 'case_name': '大用例1', 'result_case': '', 'steps': [ {'step_id': 67, 'step_name': '调用A接口步骤', 'result_step': '', 'data': { 'request_data': '{"url": "http://127.0.0.1:8000/test_api_A", "method": "get", "api_body": "", "api_body_method": "none"}', 'response': '{"errcode": "0"}', 'assert_result': '{}' } } ] }, {'case_id': 22, 'case_name': '大用例2', 'result_case': '', 'steps': [ {'step_id': 68, 'step_name': '测试B接口步骤1', 'result_step': '', 'data': { 'request_data': '{"url": "http://127.0.0.1:8000/test_api_B", "method": "get", "api_body": "", "api_body_method": "none"}', 'response': '{"errcode": "0"}', 'assert_result': '{}' } }, {'step_id': 69, 'step_name': '测试B接口步骤2', 'result_step': '', 'data': { 'request_data': '{"url": "http://127.0.0.1:8000/test_api_B", "method": "get", "api_body": "", "api_body_method": "none"}', 'response': '{"errcode": "0"}', 'assert_result': '{}' } } ] } ] }
好了,结构很完美,一遍成。
大家看到自己公司的很多接口返回都是这样多层级,其实都是这样开发出来的哦~
本节课我们到此结束,下节课,我们将要对此数据解决各层级的result结果问题。