前言
最近准备在公司从0到1落地接口自动化框架,市面上虽然存在许多二开的自动化框架诸如pytest,但想实现具有定制化的框架,还是选型unnitest最合适。但我发现落地时面临的痛点问题不少,尤其是如何保障用例独立性,做到用例之间互不影响,需要特别关注。为此我总结了下用例独立性保障应该注意的地方。
痛点场景
1. 用例1存在数据noteid,进行请求删除操作,用例2仍然重复使用,会导致查询不到数据,影响用例执行结果。
def testCase01_major(self):
noteid = "123"
body = {"noteId": noteid}
res = self.post(self.del_url, json = body,)
def testCase02_major(self):
noteid = "123"
body = {"noteId": noteid}
res = self.get(self.check_url, json = body,)
2. 用例1利用构建数据的方法生成noteid数据,用例2进行查询操作,会查到用例1的数据,存在脏数据的情况。
def testCase01_major(self):
noteid = creat_note(id)
body = {"noteId": noteid}
res = self.get(self.del_url, json = body,)
def testCase02_major(self):
noteid = creat_note(id)
body = {"noteId": noteid}
res = self.get(self.check_url, json = body,)
用例独立性的保障
1.数据唯一性保障
- 存在唯一性数据要保障构建时的唯一性,用例能被重复执行。
- 可以利用时间戳构建数据确保唯一性。
noteid = str(int(time.time() * 1000)) + '_noteid'
2.实现数据清理
- 存在数据构建的场景,无论用例执行成功还是失败,需要实现数据清理方法。
- setup必须确保环境纯净,不存在任何脏数据。(跟开发确认,或者直接连接数据库查看数据情况)
def setUp(self) -> None: # 初始化构建数据、前置清理脏数据
clear_groups(self.userId1, self.sid1)
3.用户隔离
- 基于某个用户对象实现数据构建、数据清理,不会影响其他用户数据。
class TestGroupMajor(unittest.TestCase):
userId1 = '1234'
sid1 = '11111111121111d'
4.前置数据准备
- 每个用例需要构建的数据可以放在用例最前面。
def testCase01_major(self):
step('【step】前置构建数据')
create_notes(self.userId1, self.sid1, 1)
host = 'https://******'
path = f'/user/{self.userId1}/'
url = host + path
评论区