如何设计与数据上下文无关的接口测试用例

我们在做接口测试的时候很可能设计出这样与数据关联的测试用例。比如

def test_create_user(self):
  user = create_user(name="fred", age=29) # 调用创建用户的接口
  self.assertEqual(user['name'], 'fred')

def test_get_user(self):
  user = get_last_created_user() #调用获取最新注册用户的接口
  self.assertEqual(user['name'], 'fred')

这样的测试用例第一眼看上去是感受不出来问题的。

不过仔细想想,可能会存在下面的问题

  • test_create_user用例必须在test_get_user用例执行之前执行,否则test_get_user(self)用户是没有数据的,* test_get_user用例没办法单独执行
  • test_create_user用例执行一次之后,name: fred, age: 29就成了脏数据了,不删除的话之后test_get_user用例有很大概率每次都能执行成功

为了解决上面的问题,我们可以这样做

def test_create_user(self):
  user = create_user(name="fred", age=29) # 调用创建用户的接口
  delete_user(user['id']) # 调用删除接口,将创建的用户给删除掉
  self.assertEqual(user['name'], 'fred')

def test_get_user(self):
  user = create_user(name="fred", age=29) # 调用创建用户的接口
  user = get_last_created_user() #调用获取最新注册用户的接口
  delete_user(user['id']) # 调用删除接口,将创建的用户给删除掉
  self.assertEqual(user['name'], 'fred')

这样一来脏数据问题就解决了,不过用例里多了很多跟测试逻辑无关的代码。

顺便留一个问题给大家思考:为什么删除数据的代码要放在断言之前执行?

为了将数据处理代码跟测试逻辑分开来,下一步我们可以这样做,以sqlite3为例

import sqlite3

def setUp(self):
  conn = sqlite3.connect('example.db')
  c = conn.cursor()
  c.execute("delete * from users")
  c.execute("insert into users ......") # 插入一些存量数据,这样测试翻页之类的逻辑会容易点
  conn.commit()
  conn.close()

def test_create_user(self):
  user = create_user(name="fred", age=29) # 调用创建用户的接口
  self.assertEqual(user['name'], 'fred')

def test_get_user(self):
  user = create_user(name="fred", age=29) # 调用创建用户的接口
  user = get_last_created_user() #调用获取最新注册用户的接口
  self.assertEqual(user['name'], 'fred')

上面的例子里,setUp方法会在每个用例执行之前执行,所以就不需要每条用例都去清理数据了。

总结

  • 上面的例子都是以unittest库为例,其他测试框架库原理是相同的
  • 上面的例子是伪代码,不能直接执行
  • 上面的例子里,每个用例执行之前都会插入一遍数据,如果数据量比较大,那么用例运行速度会变慢

原文地址:https://www.cnblogs.com/nbkhic/p/12058439.html

时间: 2024-10-06 20:04:10

如何设计与数据上下文无关的接口测试用例的相关文章

接口测试用例设计实践总结

设计思路 1)   优先级--针对所有接口 1.暴露在外面的接口,因为通常该接口会给第三方调用: 2.供系统内部调用的核心功能接口: 3.供系统内部调用非核心功能接口: 2)   优先级--针对单个接口 1.正向用例优先测试,逆向用例次之(通常情况,非绝对): 2.是否满足前提条件 > 是否携带默认参值参数 > 参数是否必填 > 参数之间是否存在关联 > 参数数据类型限制 >参数数据类型自身的数据范围值限制 3)   设计分析 通常,设计接口测试用例需要考虑以下几个方面: 1

MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分

第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈.这时候,我们就必须许找其他技术手段来解决这个瓶颈,那就是我们这一章所要介绍恶的数据切分技术. 14.1 何谓数据切分 可能很多读者朋友在网上或者杂志上面都已经多次见到关于数据切分的相关文章了,只不过在有些文章中称之为数据的 Sharding.其实不管是称之为数据的 Shard

接口测试用例设计

转载:http://blog.sina.com.cn/s/blog_13cc013b50102w1ot.html 设计思路 1)   优先级--针对所有接口 1.暴露在外面的接口,因为通常该接口会给第三方调用: 2.供系统内部调用的核心功能接口: 3.供系统内部调用非核心功能接口: 2)   优先级--针对单个接口 1.正向用例优先测试,逆向用例次之(通常情况,非绝对): 2.是否满足前提条件 > 是否携带默认参值参数 > 参数是否必填 > 参数之间是否存在关联 > 参数数据类型限

服务端测试之接口测试用例设计

小伙伴们大家好,上一次和大家分享了<服务端测试之接口测试初探>,讲了一些接口测试的基本概念和理论知识.在上次的分享中,简单提到了接口测试用例设计包含的几个方面.本期我将在上次分享的基础上,和各位小伙伴一起具体看看这几个方面都是什么,在实际的项目中应该如何使用. 一.功能性用例设计 之前讲过,服务端的接口是和客户端的功能相对应的,对功能的验证,可以参照接口说明文档来进行.概括起来讲,就是我们需要验证接口说明文档中提到的各种情况,保证这些情况下接口的返回和最初设计的是一样的,这样我们就可以认为该接

通用权限管理设计 之 数据权限

阅读目录 前言 初步分析 通用查询机制 数据权限规则 实际应用 结语 前言 前一篇文章<通用权限管理设计 之 数据库设计方案>介绍了[主体]- [领域] - [权限]( who.what.how问题原型 ) 的设计思想 本文将对这种设计思想作进一步的扩展,介绍数据权限的设计方案. 权限控制可以理解,分为这几种 : [功能权限]:能做什么的问题,如增加产品.[数据权限]:能看到哪些数据的问题,如查看本人的所有订单.[字段权限]:能看到哪些信息的问题,如供应商账户,看不到角色. 部门等信息. 上面

如何设计接口测试用例

接口测试是项目测试的一部分,正如其名,它测试的主要对象是接口,是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与所测系统之间以及内部各系统之间的交互点.测试的重点是检查数据交互.传递.和控制管理过程以及系统间的相互依赖关系等. 如何设计接口测试用例? 首先,明确出发点.和所有的测试一样,接口测试出发点是你要证明所测的程序是错误的.以这个出发点为导向,你的设计行为就会尽量朝这个方向发展,更易发现问题,不会出现大方向的偏差. 其次,选择好测试对象.对于一个系统做接口测试选择好的测试对象是

(转)【腾讯 TMQ】 接口测试用例设计

导语 这是我在其他的开源社区看到的一篇分享帖子.这篇文章的目的只是为大家提供一个思路,但是实现成本太高了,因为一个接口设计的接口测试用例很多,一般公司的接口数量几百到上千不等,每一个接口都设计这么多测试用例,那么对于测试来说,这样的话会死人的!所以此篇文章旨在给大家一个接口测试的思路,抛开成本,从技术上面来说,这个文章写得无可挑剔的! 随着测试分析和分层测试的深化,"接口测试"出现在我们视野的频次越来越高.那么接口测的用例设计常用哪些方法呢?本文将详细描述. 1 接口测试 1.1 接口

(转)接口测试用例设计(详细干货)

随着测试分析和分层测试的深化,"接口测试"出现在我们视野的频次越来越高.那么接口测的用例设计常用哪些方法呢?本文将详细描述. 1  接口测试 1.1  接口测试 接口:主要是子模块或者子系统间交互并相互作用的部分. 这里说的接口是广义的,客户端与后台服务间的协议:插件间通信的接口:模块间的接口:再小到一个类提供的方法:都可以理解为接口. 接口测试:是指针对模块或系统间接口进行的测试. 1.2  接口测试发现的典型问题 接口测试经常遇到的bug和问题,如下: (1)传入参数处理不当,导致

如何简单设计接口测试用例

接口测试是项目测试的一部分,它测试的主要对象是接口 ,是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与所测系统之间以及内部各系统之间的交互点.测试的重点是检查数据交互.传递.和控制管理过程以及系统间的相互依赖关系等. 如何设计接口测试用例?首先,明确出发点,和所有的测试一样 ,接口测试出发点是你要证明所测的程序是错误的.以这个出发点为导向,你的设计行为就会尽量朝这个方向,更易发现问题 其次,选择好测试对象.对于一个系统做接口测试选择好的测试对象是接口测试关键.一个系统有无数的接口