瓜瓜
瓜瓜
发布于 2025-01-10 / 11 阅读
0
0

自动化测试用例怎么保障独立性

在接口自动化中,很重要的一点是保障测试用例的独立性,确保用例相互之间不被干扰,进而确保测试结果的准确性和可靠性。以下内容是如何在接口自动化测试中保障用例独立性的详细说明。

确保在用例执行前进行数据清理

在每次执行测试用例之前,应该确保测试环境是干净的,没有残留的数据。可以通过在测试用例的前置步骤中进行数据清理来实现。

class CreateNoteContent(unittest.TestCase):
ac = AssertCommon()
host = 'https://xxxxx'
path ='/xxx/xxx'
user_id = env_config['user_id']
url = host + path 

    def setUp(self) -> None:
        # 调用 清理数据的公共方法,进行数据清理
        all_data_clear(self.user_id)

    def testCase01_major(self):
        headers = {
          'cookie': 'xxxxx'
        }
        body = { 
          'msg_id':12345
        }
        res = request.post(self.url,headers=headers, json=body)
        # 调用断言方法  
        self.ac.code_assert(200, res.status_code)

每个testcase中只允许编写一条测试用例

如果在一个测试用例中同时验证2个场景,那么当其中一个场景下出现bug时,我们无法快速定位问题。因此,为了确保用例的独立性,每个测试用例应该只包含一个测试场景。这样可以避免多个测试场景之间的相互影响。

例如,以下代码中 testCase02 只校验cookie缺失的场景。

    def testCase02_input_cookieIsMiss(self):
        """cookie 缺失的测试用例"""
        headers = {
            'x-user-key': str(self.user_id)
        }
        note_id = str(int(time.time() * 1000))
        body = {
            "noteId": note_id,
            "title": "XuHa8KvrZtD9QIjTlJjVoA",
            "summary": "sHbG2+bZQhBT+QayxOam1A==",
            "body": "X9smpX8YYUO/NxIclbdqtg==",
        }
        expect_res = {
            "errorcode": -1011,
            "errormsg": " user change "
        }
        res = self.br.post(self.url, self.user_id, self.wps_sid,           body=body, headers=headers)
        self.ac.code_assert(200, res.status_code)
        self.ac.json_assert(expect_res, res.json())

用例的前置数据都需要在testCase下重新生成

每个测试用例的前置数据应该在用例内部生成,而不是依赖于其他用例生成的数据或者直接在用例所在类中生成前置数据。这样可以确保每个用例的执行环境是独立的。

    def testCase01_major(self):
        # 在用例内部调用数据创建方法,进行前置数据的创建
        dataCreate().createMsg(user_id)
        """修改内容主流程的测试用例"""
        headers = {
            'x-user-key': str(self.user_id),
            'cookie': f'{self.sid}'
        }
        msg_id = str(int(time.time() * 1000))
        body = {
            "msgId": msg_id,
            "title": "XuHa8KvrZtD9QIjTlJjVoA",
            "body": "X9smpX8YYUO/NxIclbdqtg==
        }
        expect_res = {
            "responseTime": int
        }
        res = requests.post(url=self.url, headers=headers, json=body)
        self.ac.code_assert(200, res.status_code)
        self.ac.json_assert(expect_res, res.json())

基于用户对象控制数据

在测试过程中,可以通过用户对象来控制数据的生成和清理。这样可以确保每个用户的数据是独立的,不会影响到其他用户。

后置步骤可以实现数据的清理方法

在测试用例执行完毕后,应该进行数据清理,以确保不会影响到后续的测试用例。可以通过后置步骤来实现数据的清理。

如果未关闭数据库连接、文件句柄等资源会导致内存泄漏,影响后续测试执行稳定性。

不能基于被测试过的数据执行用例

在测试过程中,不能依赖于已经被测试过的数据。例如,在测试获取首页消息接口时,前置的数据应该被删除后再进行恢复,以确保测试的独立性。

如果依赖已测试过的数据(如已删除的消息记录)会导致预期状态不一致,例如误判数据恢复逻辑。

总结

综上所述,我们可以通过满足这6个要点,来保证接口测试用例的独立性!

  1. 数据清理:确保用例执行前后环境干净。

  2. 单一职责:每个用例只验证一个功能点。

  3. 动态数据生成:用例内生成独立数据,避免依赖外部数据。

  4. 用户隔离:通过用户对象实现数据隔离。

  5. 资源释放:在用例后置步骤中清理数据和释放资源。

  6. 避免数据复用:确保用例不依赖已测试过的数据。


评论