巧妙解决接口测试产生脏数据问题

测试数据创建后需要对其删除,不然可能产生脏数据,对开发和测试、生产环境造成一定影响。

其接口框架是基于Python,API规范基于REST。

产生原因

改进前:清除资源的操作放在每个正向测试用例里,没有在setUp和tearDown中删除。

改进后:在setUp中初始化资源id=None,每次创建资源时会生产一个资源id,然后在tearDown中,判断资源的id是否为None,if不为None,then delete 资源并将资源id重新赋值为None。

这样不管有没有执行成功,最终都会在tearDown中删除被创建成功的资源,初始化工作放在setUp中。

代码对比

改进前:清除资源的操作放在每个正向测试用例里,没有在setUp和tearDown中删除。代码如下:

python 复制代码
     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)#放在测试用例中删除

改进后:

setUp和tearDown中改进:

python 复制代码
    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):
python 复制代码
        #判断资源的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 '------------------------------------------------------'

测试用例中将其删除代码注释:

python 复制代码
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)

总结

发现问题要多思考,并努力把其解决。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
派大星爱吃猫7 小时前
顺序表算法题(LeetCode)
算法·leetcode·职场和发展
郝学胜-神的一滴8 小时前
计算机图形学中的光照模型:从基础到现代技术
开发语言·c++·程序人生·图形渲染
第七种黄昏11 小时前
【前端高频面试题】深入浏览器渲染原理:从输入 URL 到页面绘制的完整流程解析
前端·面试·职场和发展
卓码软件测评12 小时前
第三方课题验收测试机构:【API测试工具Apifox使用指南】
功能测试·测试工具·单元测试·压力测试·可用性测试
程序员杰哥14 小时前
UI自动化测试实战:从入门到精通
自动化测试·软件测试·python·selenium·测试工具·ui·职场和发展
sprintzer14 小时前
10.6-10.15力扣模拟刷题
算法·leetcode·职场和发展
测试199816 小时前
Jmeter是如何实现接口关联的?
自动化测试·软件测试·python·测试工具·jmeter·职场和发展·接口测试
CoderYanger16 小时前
前端基础——HTML练习项目:填写简历信息
前端·css·职场和发展·html
ProcessOn官方账号17 小时前
深度解析产品运营的多元策略
程序人生·职场和发展·产品运营
润 下18 小时前
C语言——深入解析C语言指针:从基础到实践从入门到精通(四)
c语言·开发语言·人工智能·经验分享·笔记·程序人生·其他