hxz
发布于 2023-05-22 / 49 阅读
0

【接口自动化框架】数据驱动实现

背景痛点:

测试用例设计中针对不同的测试环境和测试数据,落地到自动化框架中,其实所用的代码实现是一样的,不同的仅仅只是变量值。所以,为避免出现冗余代码,我们可以采用数据驱动的方式简化代码编写,达到用例的复用。

通过数据驱动,可以将测试用例需要依赖的数据和代码结构分离开来,减少维护成本、减少编码成本。

实现细节:

1.定义环境级别的配置和测试数据的配置

2.封装yaml文件的读取方法,实现不同维度配置的读取方式

3.并且实现了环境的切换,通过全局变量ENVIRON控制环境的执行的维度

4.测试用例提取环境变量和测试数据的变量,并存储到配置文件当中,再通过yaml读取方法读取到用例模块的类属性下,环境变量包括:用户信息、host或域名、秘钥,测试数据变量包括:接口信息(必填项字段、非必填字段、接口的请求方式、接口的请求demo、返回值的demo)

5.实现参数化,前置需要实现用例结构,先导入三方库parameterized,使用expand的装饰器,将需要变量的参数对象通过实参传递到装饰器中,实例方法定义一个形参接收,用例中的变量关联到该形参实现参数化。

    @parameterized.expand(["", (None,), "@#$%", "aBc", 1])
    def testCase05_input_XXId(self, key):
        """删除XX XXId异常情况"""
        step("新建1条XX")
        XX_id = CreateXX().create_XX(userid=self.userid1, num=1)[0]["XXId"]
        step(f"删除XX,XXId异常")
        body = {"XXId": XX_id}
        res = post(url=self.url_delete_XX, userid=self.userid1,  body=body)
        expect = {"responseTime": int}
        self.assertEqual(200, res.status_code)
        OutputCheck().output_check(expect, res.json())

注:参数化实现后,执行时必须基于类或全量的维度去执行,否则会报错