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

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

其接口框架是基于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)

总结

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

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

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

相关推荐
郝学胜-神的一滴1 天前
C++20模板元编程 07:吃透名称绑定与编译期递归核心原理
c++·程序人生·vs·模板元
CoderYanger1 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
爱学习的执念1 天前
助力金九银十1000道软件测试面试题(功能、接口、自动化、WEB、APP.......)附答案
软件测试·面试
2401_832298101 天前
人机协同:AI时代全新工作与学习范式
职场和发展
童园管理札记1 天前
从政策驱动到课堂落地:2026年“人工智能+教育”全景解读与技术实践指南
人工智能·python·深度学习·职场和发展·学习方法
可爱系程序猿1 天前
Windows 11 下佳能 LBP2900 驱动报错溯源:安装包架构、端口绑定与队列记录
程序人生·电脑
asdfg12589631 天前
一个例子理解因果图法
软件测试
yuanxi2001 天前
卡塔尔能源公司LNG扩建项目首条生产线预计明年投运:大客户销售的5个判断
职场和发展·创业创新·学习方法