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

乙醇 创建于 8 months 之前

最后更新: less than a minute 之前

阅读数: 584

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

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

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

相关课程

mockito简明教程
图文
mockito简明教程

课程分类: 测试工具

mock工具

  • 已完结
  • 已更新7集
  • 最后更新时间: 2024-03-18 12:50:29

免费

查看详情
requests从入门到精通
图文
requests从入门到精通

课程分类: 测试工具 接口测试

python接口测试必会

  • 已完结
  • 已更新16集
  • 最后更新时间: 2024-03-18 12:54:40

免费

查看详情
Locust实用教程
图文
Locust实用教程

课程分类: 性能测试 测试工具

python语言实现的非常出色性能测试工具

  • 已完结
  • 已更新9集
  • 最后更新时间: 2024-03-18 12:24:59

免费

查看详情
TDD测试驱动开发教程
图文
TDD测试驱动开发教程

课程分类: 测试框架 软件测试基础

TDD其实并不神秘

  • 已完结
  • 已更新7集
  • 最后更新时间: 2024-03-18 11:53:22

免费

查看详情
软件测试基础教程
图文
软件测试基础教程

课程分类: 软件测试基础

转码和转行必备

  • 已完结
  • 已更新9集
  • 最后更新时间: 2024-03-18 11:40:05

免费

查看详情
软件测试入门教程
图文
软件测试入门教程

课程分类: 软件测试基础

新人如何转码到软件测试

  • 已完结
  • 已更新9集
  • 最后更新时间: 2024-03-17 11:07:23

免费

查看详情