巧用PyUnit中unittest特性解决接口测试产生脏数据问题
2015-06-27 20:06
525 查看
巧用PyUnit中unittest特性解决接口测试产生脏数据问题
一、背景
测试数据创建后需要对其删除,不然可能产生脏数据,对开发和测试、生产环境造成一定影响。其接口框架是基于Python,API规范基于REST。
二、产生原因
(1)改进前:清除资源的操作放在每个正向测试用例里,没有在setUp和tearDown中删除。
(2)改进后:在setUp中初始化资源id=None,每次创建资源时会生产一个资源id,然后在tearDown中,判断资源的id是否为None,if不为None,then delete 资源并将资源id重新赋值为None。这样不管有没有执行成功,最终都会在tearDown中删除被创建成功的资源,初始化工作放在setUp中。
三、代码对比
(1)改进前:清除资源的操作放在每个正向测试用例里,没有在setUp和tearDown中删除。代码如下:
(2)改进后:
a.setUp和tearDown中改进:
b.测试用例中将其删除代码注释
四、总结
发现问题要多思考,并努力把其解决。
一、背景
测试数据创建后需要对其删除,不然可能产生脏数据,对开发和测试、生产环境造成一定影响。其接口框架是基于Python,API规范基于REST。
二、产生原因
(1)改进前:清除资源的操作放在每个正向测试用例里,没有在setUp和tearDown中删除。
(2)改进后:在setUp中初始化资源id=None,每次创建资源时会生产一个资源id,然后在tearDown中,判断资源的id是否为None,if不为None,then delete 资源并将资源id重新赋值为None。这样不管有没有执行成功,最终都会在tearDown中删除被创建成功的资源,初始化工作放在setUp中。
三、代码对比
(1)改进前:清除资源的操作放在每个正向测试用例里,没有在setUp和tearDown中删除。代码如下:
def test_konwledges_check_by_list_ok(self): """ lc知识点API:成功创建2个知识点后,批量查询知识点详细信息\ """ title = 'knowledges' flag = 0 response = self.knowledge.add_knowledges(title, flag) message = "创建知识点接口返回失败" code = 200 data = self.rest_o.parse_response(response, code, message) self.knowledges_id1 = data['identifier'] response = self.knowledge.add_knowledges(title, flag) message = "创建知识点接口返回失败" code = 200 data = self.rest_o.parse_response(response, code, message) self.knowledges_id2 = data['identifier'] knowledge_id_str = [self.knowledges_id1, self.knowledges_id2] response = self.knowledge.check_konwledges_details_by_list(knowledge_id_str) #print 'response: ' + str(response) message = "批量查询知识点详细信息接口返回失败" code = 200 data = self.rest_o.parse_response(response, code, message) print data assert data[self.knowledges_id1] assert data[self.knowledges_id2] self.knowledge.delete_konwledges(knowledge_id1)#放在测试用例中删除 self.knowledge.delete_konwledges(knowledge_id2)#放在测试用例中删除
(2)改进后:
a.setUp和tearDown中改进:
def setUp(self): print 'start run KnowledgeTest(知识点接口)......' self.knowledge = Knowledge() self.lessons = Lessons() self.instructional = Instructional(id) self.teaching_material = TeachingMaterial() self.rest_o = CoRestful.Restful() self.rand_o = CoRand() self.knowledges_id = None self.knowledges_id1 = None self.knowledges_id2 = None self.knowledge_relation_id = None def tearDown(self):
#判断资源的id是否为None,if不为None,then delete 资源并将资源id重新赋值为None<span style="font-family: Arial, Helvetica, sans-serif;">,</span>这样不管有没有执行成功,最终都会在tearDown中删除被创建成功的资源 if self.knowledge_relation_id != None: self.knowledge.delete_relation(self.knowledge_relation_id) if self.knowledges_id2 != None: self.knowledge.delete_konwledges(self.knowledges_id2) if self.knowledges_id1 != None: self.knowledge.delete_konwledges(self.knowledges_id1) if self.knowledges_id != None: self.knowledge.delete_konwledges(self.knowledges_id) print '------------------------------------------------------'
b.测试用例中将其删除代码注释
def test_konwledges_check_by_list_ok(self): """ lc知识点API:成功创建2个知识点后,批量查询知识点详细信息\ """ title = 'knowledges' flag = 0 response = self.knowledge.add_knowledges(title, flag) message = "创建知识点接口返回失败" code = 200 data = self.rest_o.parse_response(response, code, message) self.knowledges_id1 = data['identifier'] response = self.knowledge.add_knowledges(title, flag) message = "创建知识点接口返回失败" code = 200 data = self.rest_o.parse_response(response, code, message) self.knowledges_id2 = data['identifier'] knowledge_id_str = [self.knowledges_id1, self.knowledges_id2] response = self.knowledge.check_konwledges_details_by_list(knowledge_id_str) #print 'response: ' + str(response) message = "批量查询知识点详细信息接口返回失败" code = 200 data = self.rest_o.parse_response(response, code, message) print data assert data[self.knowledges_id1] assert data[self.knowledges_id2] #注释原在测试用例中删除的代码 #self.knowledge.delete_konwledges(knowledge_id1) #self.knowledge.delete_konwledges(knowledge_id2)
四、总结
发现问题要多思考,并努力把其解决。
相关文章推荐
- win10手机预览版10149上手体验视频
- Android OpenGL ES(七)----理解纹理与纹理过滤
- ubuntu root默认密码(初始密码)
- Quartz 2D 详细解说
- Maven权威指南-电子书合集
- When it comes to intrusion analysis and forensics
- TCP/UDP常见端口参考
- R语言常用包分类
- Spring集成JMS
- java-jvm电子书合集
- HTTP状态码详解
- hdu 2079 选课时间
- 初探接口测试产生胀数据的原因与解决方案
- ASCII对照表
- KMP模式匹配理解
- thinkphp使用ajax提交后怎么做页面跳转
- JAVA8 最新电子书集合
- HTML转义字符
- 2008的共享服务器搭建
- PB开发笔记(6)