轻量级数据分离接口自动化框架

该框架的特性

1、能够管理系统公共的数据,系统发生变化后方便切换

2、能够实现接口层级的复用,提高接口自动化脚本的可维护性

3、能够实现接口之间的关联,也就是需要结果提取器

4、能够操作数据库处理数据(预制数据、清理垃圾数据)

5、能够实现测试用例集的前置后置步骤(类似unittest的setupclass和teardownclass)

6、能够实现测试用例的前置后置步骤(类似unittest的setup和teardown)

7、各种灵活的预期结果比较器

8、测试脚本和框架代码完全分离,懂接口测试但是不懂代码的人一天即可完全掌握,超低的学习使用成本

9、支撑http/https协议的接口测试

10、灵活的扩展能力(自定义函数和自定义比较器)

 

进一步交流可以+群:929233070

准备工作

第一步: 安装python 3版本 ,

                百度安装教程较好

第二步:安装依赖库

            

            在cmd窗口中切换到依赖库文件所在的目录, 输入如下命令即可:pip install -r requirements.txt

    

 

第三步:安装pycharm(社区版就可以)

第四步:下载框架代码, 下载地址:https://github.com/duodongduode/interface_auto_test

第五步:使用pycharm打开框架代码, 恭喜你,你已经完成所有的准备工作啦。

执行demo

core下面有一个testcase_run.py文件

轻量级数据分离接口自动化框架_第1张图片

轻量级数据分离接口自动化框架_第2张图片

testcase_run.py文件最后一行代码是设置执行的用例数据,可以是文件夹, 也可以是某个指定的文件, 是一个相对路径,打开这个文件右键执行就好。

轻量级数据分离接口自动化框架_第3张图片

执行完成后会生成测试报告

轻量级数据分离接口自动化框架_第4张图片

测试报告所在的路径:

轻量级数据分离接口自动化框架_第5张图片

使用浏览器打开测试报告

轻量级数据分离接口自动化框架_第6张图片

基础使用篇

     打开框架代码之后,目前你只需要了解test_data目录,test_data目录下面有三个子目录, common、 api_template、 testcase

   

轻量级数据分离接口自动化框架_第7张图片

common: 定义全局变量的目录,里面有一个common.yaml文件, 里面定义全局变量

demo中定义了系统的基础路径、登陆系统的用户名和密码,  系统对应的数据库配置(数据库配置中的用户名、密码、ip、端口、库名字的变量名称不可变,否则会连接数据库失败),这个文件中可以定义任何你想要的全局变量,名字可以取任意英文名,

轻量级数据分离接口自动化框架_第8张图片

    

api_template:存在被测试系统的api定义,定义api的请求的url、方法、请求头、cookie、数据、验证方法、参数提取,这样做的目的是我们在写测试用例时,关注测试用例的数据,而非接口的调用,让接口维护更加容易,  使用的时候不一定非要定义api接口模板的,只是说用了会更好维护一点,用例更加简洁一些。

demo中的接口模板文档说明:

创建收藏夹的接口和删除收藏夹的接口定义

轻量级数据分离接口自动化框架_第9张图片

说明:

1、一个文档中可以定义多个接口

2、接口的name字段对应的值必须是英文

3、cookie和header字段类似,里面可以定义多组值

4、data:根据接口传递数据接口进行定义

5、verify: 参考比较器章节

6extractor:参考参数提取章节

testcase:测试用例目录,下面可以建子目录,让用例不同功能块的用例归档到不同的目录中, 一般一个接口建一个用例文件, 一个文件就是一个用例集

一个用例集类似于unittest框架特点,有用例集前置步骤(setupclass) 用例前置步骤(setup)  用例(testcase)  用例后置步骤(teardown)  用例集后置步骤(teardownclass)

setupclass  setup  teardown  teardownclass在一个用例集中只能最多有一个(可以没有), testcase可以有多个

用例集的执行顺序   setupclass  setup  testcase1   teardown    setup  testcase2   teardown ........     setup  testcaseN   teardown  teardownclass

从给定的顺序可以看出,和unittest框架的testcase类执行顺序完全一致。

框架中的demo, 可以看出有4个测试用例

轻量级数据分离接口自动化框架_第10张图片

单个测试用例结构

  

轻量级数据分离接口自动化框架_第11张图片

     name:测试用例的名字

     variable:定义变量,可以定义多个  如果变量定义在 setupclass  teardownclass结构中,那么变量的作用域就是整个测试用例集, 定义在 setup  testcase1      teardown   中的变量都是本用例有效

      step用例步骤, 一个用例可以有很多个步骤, 一个步骤就是一次接口调用或者数据库操作

               type: api或者sql

     

      接口的step

轻量级数据分离接口自动化框架_第12张图片

       name: 步骤描述, 可以没有

       type: api或者sql

       api:引用的api路径  格式:文件名_接口名 (非必须, 有的话可以减少一些)

       url:  接口请求的路径, 会覆盖引用api中的url,如果用例中没有写url,以引用api中的url为准

       method:接口请求的方法, 会覆盖引用api中的method,如果用例中没有写method,以引用api中的method为准

       header:接口请求的请求头, 会把引用api中定义的请求头合并

       cookie:接口请求的cookie, 会把引用api中定义的cookie合并

       data:发送的数据, 如果是发送json数据接口,会替换api模板中定义的数据,  其他类型的接口,都会合并api模板中定义的数据

       verify: 参考比较器

       extractor:参考参数提取

    

      sql的step:

      demo中的sql步骤

    

轻量级数据分离接口自动化框架_第13张图片

       name: 步骤描述, 可以没有

       type: api或者sql

       sql: 执行的sql语句

       verify: 参考比较器

       extractor:参考参数提取

验证结果比较器

    每个步骤都可以添加参数比较器,但是这个不是必须的, 而且一个参数比较器中可以添加多个验证点

     

     接口的验证结果比较器

     接口比较器demo

    

轻量级数据分离接口自动化框架_第14张图片

 上图中有两个验证点

   module: 取值模块 response_code(取响应码),header(从响应头取值),cookie(从cookie中取值),response_content(从响应数据中取值)

   value_path: 取值方式,是jsonpath表达式,是响应码这个字段可以不填

    operator:值比较方式

操作符

说明

=

比较两个数据相等,可以数字,也可以是字符串, 相等返回 true  ,不相等返回false

!=

比较两个数据不相等,可以数字,也可以是字符串, 不相等返回 true  ,相等返回false

>

判断两个数 实际值大于预期值, 大于返回true  否则返回false

>=

判断两个数 实际值大于等于预期值, 大于等于返回true  否则返回false

<

判断两个数 实际值小于预期值, 小于返回true  否则返回false

<=

判断两个数 实际值小于等于预期值, 小于等于返回true  否则返回false

contains

判断 两个字符串, 实际值包含预期值, 包含返回true , 不包含返回false

not contains

判断 两个字符串, 实际值不包含预期值, 不包含返回true , 不包含返回false

none

 判断实际值是none , none 返回true  ,  非 none 返回false

not none

 判断实际值是 not none , not none 返回true  , none 返回false

expect_value: 期望的值

 

     sql比较器demo:

轻量级数据分离接口自动化框架_第15张图片

  相比接口比较器,没有取值模块一说,  差一点在取值方式

  value_path: $.X.Y    表示取sql查询结果中的X行,第N列数据

                        $ 表示是取sql查询结果的整个内容

                       $.X      表示取sql查询结果中的第X行数据

参数提取器

   每一个步骤中可以有参数提取器,参数提取器非必须,根据需要使用,用于做接口关联,提取的参数作用域可以是全局,测试用例集 、测试用例

  

接口参数提取器demo:

轻量级数据分离接口自动化框架_第16张图片

   图中框起来的是接口参数提取器, 可以看到提取了两组数据

         name:提取参数后赋值的变量名

         module:取值模块   response_code(取响应码),header(从响应头取值),cookie(从cookie中取值),response_content(从响应数据中取值)

         value_path: 取值方式,是jsonpath表达式,是响应码这个字段可以不填

         parameter_level:  提取参数的级别  # testcase(用例级)、 testsuite(测试用例级)、 global(全局)

   

  sql提取器demo:

     

轻量级数据分离接口自动化框架_第17张图片

       name:参数提取器的名字

       value_path: $.X.Y    表示取sql查询结果中的X行,第N列数据

                        $ 表示是取sql查询结果的整个内容

                       $.X      表示取sql查询结果中的第X行数据

       parameter_level:  提取参数的级别  # testcase(用例级)、 testsuite(测试用例级)、 global(全局)

变量引用

        变量引用参考了jmeter的变量引用格式,即  ${变量名} , 如果用例级变量, 测试用例集级变量,全局变量中都有对应的名字的变量,  优先级

        用例级变量>测试用例集级变量>全局变量

         可以在测试数据的任何地方引用变量

        demo:

       

轻量级数据分离接口自动化框架_第18张图片

函数引用

   函数引用格式  ${{函数名(参数1,参数2.....)}}  

  

目前支撑的函数

函数名

作用

引用方法

random_choice

从给定的值中随机选择一个

${{ random_choice( 3,4,5,6,10) }}   从2,3,5,6,10中随机选择一个值

random_int

生成一个随机整数

${{ random_int(10,100)}}  生成一个10-100之间的随机整数

random_str

生一个指定长度的随机字符串

${{ random_str(10)}} 生成一个长度为10的随机字符串

使用demo

轻量级数据分离接口自动化框架_第19张图片

你可能感兴趣的:(自动化测试,接口测试,python)