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

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

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

产生原因

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

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

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

代码对比

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

     def test_konwledges_check_by_list_ok(self):"""lc知识点API:成功创建2个知识点后,批量查询知识点详细信息\"""title = 'knowledges'flag = 0response = self.knowledge.add_knowledges(title, flag)message = "创建知识点接口返回失败"code = 200data = self.rest_o.parse_response(response, code, message)self.knowledges_id1 = data['identifier']response = self.knowledge.add_knowledges(title, flag)message = "创建知识点接口返回失败"code = 200data = 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 = 200data = self.rest_o.parse_response(response, code, message)print dataassert data[self.knowledges_id1]assert data[self.knowledges_id2]self.knowledge.delete_konwledges(knowledge_id1)#放在测试用例中删除self.knowledge.delete_konwledges(knowledge_id2)#放在测试用例中删除

改进后:

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 = Noneself.knowledges_id1 = Noneself.knowledges_id2 = Noneself.knowledge_relation_id = Nonedef 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 '------------------------------------------------------'

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

def test_konwledges_check_by_list_ok(self):"""lc知识点API:成功创建2个知识点后,批量查询知识点详细信息\"""title = 'knowledges'flag = 0response = self.knowledge.add_knowledges(title, flag)message = "创建知识点接口返回失败"code = 200data = self.rest_o.parse_response(response, code, message)self.knowledges_id1 = data['identifier']response = self.knowledge.add_knowledges(title, flag)message = "创建知识点接口返回失败"code = 200data = 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 = 200data = self.rest_o.parse_response(response, code, message)print dataassert data[self.knowledges_id1]assert data[self.knowledges_id2]#注释原在测试用例中删除的代码#self.knowledge.delete_konwledges(knowledge_id1)#self.knowledge.delete_konwledges(knowledge_id2)

总结

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2662356.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

文本的剪切和复制有区别吗?有什么区别

在电脑操作中&#xff0c;文本的剪切与复制是我们经常进行的操作。尽管它们看起来都是对文本的“复制”行为&#xff0c;但两者在使用和功能上存在明显的差异。本文将详细介绍剪切与复制的区别&#xff0c;以帮助您更好地理解它们的适用场景和作用&#xff0c;并介绍剪切后如何…

大数据Doris(四十四):查询物化视图和自动匹配

文章目录 查询物化视图和自动匹配 一、​​​​​​​查询物化视图

鸿蒙4.0实战教学—基础ArkTS(简易视频播放器)

构建主界面 主界面由视频轮播模块和多个视频列表模块组成&#xff0c;效果图如图&#xff1a; VideoData.ets中定义的视频轮播图数组SWIPER_VIDEOS和视频列表图片数组HORIZONTAL_VIDEOS。 // VideoData.ets import { HorizontalVideoItem } from ./HorizontalVideoItem; impo…

基于springboot+vue的教材管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Nature Perspective | LLMs 作为角色扮演引擎

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 随着对话智能体的表现越来越像人&#xff0c;我们必须开发出有效的方法&#xff0c;在不陷入拟人化陷阱的情况下&#xff0c;用高层次的术语描述它们的…

TMC5130/TMC5160如何配置StallGuard和Coolstep

如何配置速度模式&#xff1f;涉及到的寄存器有 ox10 0x26 0x27 首先设置电流 0x10 其次设置加速度 AMAX 0x26;和目前速度目标速度 0x27&#xff1b; 如何使用 Stallguard 功能&#xff1a;涉及到的寄存器有 0x10, 0x26,0x27,0x6D,ox34 如配置 AMAX 和 VMAX 让电机运行在速…

《新传奇》期刊投稿论文发表

《新传奇》杂志是经国家新闻出版总署批准、面向国内外公开发行的综合性社科期刊&#xff0c;由湖北省文联主管&#xff0c;湖北今古传奇传媒集团有限公司主办&#xff0c;湖北优秀期刊。本刊旨在坚守初心、引领创新&#xff0c;展示高水平研究成果&#xff0c;支持优秀学术人才…

SONiC和ONL所依赖的Debian版本说明

Debian 的最新几个版本 下一代 Debian 正式发行版的代号为 trixie — 测试&#xff08;testing&#xff09;版 Debian 12 (bookworm) — 当前的稳定&#xff08;stable&#xff09;版 Debian 11 (bullseye) — 当前的旧的稳定&#xff08;oldstable&#xff09;版 Debian 10&a…

js对象方法大全(开发必会)

目录 前言 assgin(对象合并) 参数 功能 返回值 测试 结果 结论 create(以源对象为原型创建新对象) 参数 功能 返回值 测试 结果 结论 defineProperties(对属性进行具体定义) 参数 功能 返回值 测试 结果 结论 defineProperty(重写或定义新属性) 参数 功…

mongoose中http server服务器解决“Access-Control-Allow-Origin mongoose”跨域问题

问题 使用mongoose做http服务器&#xff0c;自己构造的浏览器端jquery在访问server时&#xff0c;会遇到&#xff1a; Access to XMLHttpRequest at http://127.0.0.1:8000/ from origin null has been blocked by CORS policy: No Access-Control-Allow-Origin header is pr…

PMP有什么用?职称认定+现金奖励

近年来&#xff0c;随着高精尖人才越来越受到社会重视&#xff0c;如何完善激励方案吸引更多人才&#xff0c;成为了各大城市的规划重点。今天小赛就给大家汇总了部分城市的项目管理人才奖励&#xff0c;还不清楚的小伙伴赶快来看看吧&#xff01; 一、杭州市 杭州市作为目前国…

Shell脚本-bin/bash: 解释器错误: 没有那个文件或目录-完整路径执行-“/”引发的脑裂

引起该不适的一种可能以及解决方案&#xff0c;网上较多&#xff0c;比如&#xff1a; 但按以上方式操作&#xff0c;并经过查看&#xff0c;发现仍然未能解决问题。 因为两种方式执行&#xff0c;有一种能成功&#xff0c;有一种不能&#xff0c;刚开始未怀疑是文件问题&…

HarmonyOS4.0系列——04、@Styles、@Extend、@Extend事件以及多态样式stateStyles

Styles、Extend、Extend事件以及多态样式stateStyles Styles 通用样式 类似于css中的class 语法一&#xff1a;内部样式 放在struct内 Styles commonStyle(){.backgroundColor(Color.Pink).padding(20px)}语法二&#xff1a;外部样式 Styles function commonStyle() {.backg…

Unity 通过鼠标框选绘制矩形区域

鼠标拖动的同时绘制一块同等大小的区域:如下 using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 通过鼠标框选绘制矩形区域 /// </summary> /// public enum MouseType {left = 0,right = 1,middle = 2 } publi…

对SPI总线上挂接多个X5045的读写操作

#include<reg51.h> //包含单片机寄存器的头文件 #include<intrins.h> //包含_nop_()函数定义的头文件 sbit SCKP3^4; //将SCK位定义为P3.4引脚 sbit SIP3^5; //将SI位定义为P3.5引脚 sbit SOP3^6; //将SO位定义为P3.6引脚 sbit CS1P3^7; …

Linux中磁盘管理与文件系统

目录 一.磁盘基础&#xff1a; 1.磁盘的结构&#xff1a; 2.硬盘的数据结构&#xff1a; 3.硬盘存储容量 &#xff1a; 4.硬盘接口类型&#xff1a; 二.MBR与磁盘分区&#xff1a; 1.MBR的概念&#xff1a; 2.硬盘的分区&#xff1a; 为什么分区&#xff1a; 2.表示&am…

光电耦合器:什么是隔离放大器

隔离放大器是现代电子系统中的关键组件&#xff0c;在维持信号完整性和确保敏感设备的安全方面发挥着关键作用。隔离放大器采用的关键技术之一是光耦合器&#xff0c;这是一种设计用于传输信号同时电隔离输入和输出电路的器件。在本文中&#xff0c;我们深入研究隔离放大器领域…

Python之类方法、__new__方法和__init__方法介绍

在编程语言中创建一个类&#xff0c;有构造方法这样的一个术语。而在Python中&#xff0c;通常大家都认为__init__是构造方法&#xff0c;其实并不完全等同。在构建类中&#xff0c;有一个特殊的方法__new__&#xff0c;这个才能等同为构造方法。 __new__是一个类方法&#xff…

UniApp微信小程序使用echarts图标教程(附源码)

在项目中直接使用echarts时&#xff0c;H5端是OK的&#xff0c;但微信小程序会报错&#xff0c;所以来看一下如何在微信小程序中使用echarts 1.打开链接&#xff0c;下载第一个 下载链接 注意看 此时这个版本是5.3.3 2.官网在线定制&#xff0c;下载下来 注意与版本 等待下载…

10、RabbitMQ高频面试题

1、你们项目中哪里用到了RabbitMQ RabbitMQ是我们项目中服务通信的主要方式之一 , 我们项目中服务通信主要有二种方式实现 : 通过Feign实现服务的同步调用通过MQ实现服务的异步通信 下面要结合自己的项目中功能来说两个地方 xxx xxx 2、为什么会选择使用RabbitMQ 我们项…