如何设计与数据上下文无关的接口测试用例(代码片段)

nbkhic nbkhic     2023-05-03     439

关键词:

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

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

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

...递、和控制管理过程以及系统间的相互依赖关系等。  如何设计接口测试用例?首先,明确出发点,和所有的测试一样 查看详情

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

...、传递、和控制管理过程以及系统间的相互依赖关系等。如何设计接口测试用例?首先,明确出发点,和所有的测试一样,接口测试出发点是你要证明所测的程序是错误的。以这个出发点为导向,你的设计行为就会尽量朝这个方... 查看详情

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

...递、和控制管理过程以及系统间的相互依赖关系等。  如何设计接口测试用例?首先,明确出发点,和所有的测试一样,接口测试出发点是你要证明所测的程序是错误的。以这个出发点为导向,你的设计行为就会尽量朝这个方... 查看详情

接口测试-结合postman的使用(代码片段)

...互依赖关系等。 二、接口测试流程  1)开发人员设计接口形成文档(wiki、swagger等),文档内容中包含接口请求地址、接口参数个数与类型、接口的用途  2)测试人员获取和熟悉接口文档:业务需求,接口的参数类型... 查看详情

接口测试-结合postman的使用(代码片段)

...互依赖关系等。 二、接口测试流程  1)开发人员设计接口形成文档(wiki、swagger等),文档内容中包含接口请求地址、接口参数个数与类型、接口的用途  2)测试人员获取和熟悉接口文档:业务需求,接口的参数类型... 查看详情

8-5接口测试用例设计与编写-4(代码片段)

1.查看testerhome精华帖的数量packagecom.csj2018;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.fasterxml.jackson.databind.util.JSONPObject;importio.restassured.internal.ValidatableResponseImpl;importio.restassured.response.Response;importio.restassured.response.ValidatableRespons... 查看详情

接口测试方案怎么写

参考技术A问题一:如何做接口测试对于接口测试,首先测试人员要懂代码,你只需要知道接口的作用是什么就可以了(有文档更好,但大部分都没有);其次,自己去读开发的代码;然后,根据该接口功能及代码写测试用例;... 查看详情

如何对一个接口写测试用例

如何对一个接口编写测试用例」大多数接口测试,都习惯把接口当作黑盒进行测试,「如下图的测试用例也是按黑盒的测试方式去设计」。但是,接口测试也可以多关注接口本身的编码。没错,可利用白盒测试的... 查看详情

接口测试用例设计思路-

接口测试用例设计思路1.分析接口拿到接口文档,分析接口。根据分配的任务,明确负责的接口有哪些。分析接口的请求方式(请求方式是post请求,需要明确正文文本类型是application/x-www-form-urlencoded还是application/json),请求地... 查看详情

unittest与数据驱动及测试框架设计模式(代码片段)

UnitTest通过直接导入UnitTest包即可实现:importunittest是python库自带的自动化测试框架主要用于管理测试用例和实现数据驱动 在nuittest中所有的测试用例都是基于test_基于前缀来实现的如果不写的话那么它只是一个普通的函数unitest... 查看详情

测试设计如何提升测试用例设计水平?(代码片段)

原文链接:http://www.51testing.com/html/22/n-3724422.html定义测试用例(TestCase)是为某个特殊目标而编制的一组测试输入、执行条件及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。首先,测试需要保证以下两点:程... 查看详情

软件测试之用例设计,入门必备(代码片段)

...试用例的编写是测试日常工作中必不可少的事情,而如何设计一份好的测试用例呢?一般测试用例的设计包括以下几个关键点:前提条件:测试环境的需求或者某个前置场景需求。例如网购商品并支付的前置条件... 查看详情

如何做好接口测试?

参考技术Asgbtmy:基于selenium的自动化框架开发,我主要是想问一下,你的框架除了前台的自动化,后台的数据的测试是否集成在你的测试框架中?小刀:你好,个人理解的你所说的后台的数据的测试是指的是对数据的校验,不知... 查看详情

结对测试算法性能优化(用例设计层面)(代码片段)

...单个值,10个为多选项,需要多个值。对于多选项,我的设计是,全选+随机n个多选(1<=n<=len-1)+空。按照这个策略,笛卡尔积的结果就是3^8*2^10=6718464。67 查看详情

02|如何设计一个“好的”测试用例?

什么才算是“好的”测试用例?“好的”测试用例一定是一个完备的集合,它能够覆盖所有等价类以及各种边界值,而跟能否发现缺陷无关。如果把被测试软件看作一个池塘,软件缺陷是池塘中的鱼,建立测试用例集的过程就像... 查看详情

接口自动化测试框架(java实现)(代码片段)

...f0c;还可以通过解析har文件,自动生成测试用例。开发设计分层与抽象技术选型功能所选技术单元测试框架junit5断言hamcrest接口测试Rest-Assuredyaml读取与生成Jacksonhar解析Har-Reader测试报告Allure-Junit5主要类设计测试文件设计测试用... 查看详情

如何概括rally上下文,以包括来自不同项目的testcases,这些项目关联到一个testset。(代码片段)

...你有一个TS有来自多个项目的TC时,问题就会出现。应用上下文会启动,只允许从当前项目上下文查询TC,造成数据缺口。下面的代码是检索测试用例结果的数据,但受到项目上下文的限制。vartsid=req.testsetid;v 查看详情

接口测试教程-jmeter

...定义协议 3:接口测试流程参数化:EXCEL文件参数化、数据库参数化、直接代码中配置、配置文件预处理请求(前置处理):对请求的参数进行预处理、准备。如加密数据,组织测试数据请求:httpclient、wsclient、rpcclient等等cli... 查看详情