• 90%测试人不知道的快速入门秘籍——接口自动化神器 apin(一)


    一、apin 介绍及安装

    1、什么是 apin

    apin是柠檬班——木森老师开发的一个无需写代码、就可以进行接口自动化测试的框架。

    只需要通过json或yaml文件编写非常简洁的用例数据,即可完成接口自动化测试,并生成自动化测试报告。

    apin旨在帮助更多不会写代码的小伙伴掌握接口自动化测试的能力。框架使用起来非常简单,易上手,只需要几个小时就能大体掌握!

    目前发布的是第一个版本后续会持续优化,丰富新的功能。

    2、安装 apin

    apin 是基于 python3.6 开发的,安装前请确认你的 python 版本 >3.6。

    • 安装命令

    pip install apin

     如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

    【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337

    二、快速入门

    1、项目创建 

    • 创建命令

     apin create 项目名

    安装好 apin 之后,打开命令终端输入创建命令,即可在当前路径下创建项目。

    cd 切换到项目之中,即可看到如下的项目结构:

    图片

    • 项目文件说明

    casedata: 存放 YAML 和 JSON 格式编写的用例文件

    testcases:py:存放 py 编写的用例目录

    func_tools.py:自定义的函数工具文件

    setting.py:整个项目的全局配置文件

    run.py:项目运行入口文件

    2、用例编写 

    apin 用例编写支持 YAML 文件,JSON 文件,py 文件三种方式,下面通过一个接口的用例 demo 来快速了解一下。

    • 接口demo

    接口地址:http://httpbin.org/post

    请求方法:post

    请求参数类型:application/json

    请求参数:

    参数名类型说明
    userstr账号
    pwdstr密码
    • JSON 编写用例

    在项目的 casedata 目录下,定义一个以 test 开头的 JSON 文件,按照【apin 用例编写规范-json】编写用例即可。

    案例:

    1. {
    2. "host": "http://api.XXX.com/futureloan/",
    3. "Cases": [
    4. {
    5. "title": "普通用户注册",
    6. "interface": "member/register",
    7. "method": "post",
    8. "json":{"mobile_phone":"133010121224","pwd":"lemonban"},
    9. "verification": []
    10. }
    11. ]
    12. }
    • YAML 编写用例

    在项目的 casedata 目录下,定义一个以 test 开头的 YAML 文件,按照【apin 用例编写规范-yaml】编写用例即可。

    案例:

    1. # 域名
    2. host: http://api.XXX.com/futureloan/
    3. # 用例数据
    4. Cases:
    5. - title: 普通用户注册
    6. interface: member/register
    7. method: post
    8. json:
    9. mobile_phone: ${{user_mobile}}
    10. pwd: lemonban
    • py 文件编写用例

    在testcases目录中定义一个以test开头的py文件,定义一个以Test开头的类,并且继承于apin.core.httptest.HttpCase类,按照【apin用例编写规范-py】编写用例即可。

    案例:

    1. from apin.core.httptest import HttpCase
    2. class TestStreamV3(HttpCase):
    3. host = "http://api.XXX.com/futureloan/"
    4. Cases = [
    5. # 用例1:普通用户注册
    6. {
    7. 'title': "普通用户注册",
    8. 'interface': "member/register",
    9. "method": "post",
    10. 'json': {"mobile_phone": "${{user_mobile}}", "pwd": "lemonban"},
    11. },
    12. ]

    3、用例运行

    • 方式1

    终端项目路径下输入命令

    apin run
    
    • 方式2

    直接使用 python 运行项目的 run.py 文件

    4测试报告和日志

    • 日志:项目运行完,会自动在项目路径下生成详细的运行日志

    • 测试报告:apin 的测试报告是基第三方库 unittestreport 生成的

    运行完会在项目目录的 reports 目录中,自动生成详细的 HTML 测试报告。

     

    关于 apin 的入门使用就介绍到这里啦,后续会更新 apin 使用的详细文档~ 

    三、用例编写规范

    1概念介绍

    • 用例集:

    apin 中创建的每一个 test 开头的用例文件(py,json,yaml),被称之为一个用例集。一个用例集下面可以定义多条测试用例。

    • 测试用例: 

    用例集中 Cases 字段中的一条数据就是一个测试用例。

    2用例集的主要字段介绍

    • host:用例接口的 host 地址(接口的域名)

    类型:字符串

    例:

    host = "http://api.lemonban.com/futureloan/"

    • headers:指定用例使用的请求头

    类型:字典

    例:

    headers = {"User-Agent": "apin/musen"}

    • method:指定用例接口的请求方法

    类型:字符串

    例:post,get

    • interface:指定用例接口地址(接口 url 域名后面的部分)

    类型:字符串

    • env: 设置用例集运行环境的局部变量

    类型:字典

    例:

     env = {
            "user_mobile": '13109099878',
            "pwd": 'lemonban'
        }

    • extract:指定用例请求完要提取的变量

    • verification:指定用例的断言

    • Cases:设置该测试集下的用例

    3用例字段介绍

    主要字段

    • 用例集中除 env 字段之外的字段

    ①用例集中除 env 和 Cases 字段之外,上述用例集中的字段,均支持在用例中自定义。
    ②如果用例中定义了用例集中的字段,就使用自己定义的,没定义则引用 用例集中的。

    • title:用例的描述字段)

    测试报告和日志信息中用例的描述

    • json: 用来传递 JSON 类型的请求参数

    请求参数类型为:content-type:application/json,使用该字段来传递请求参数

    • data:用来传递表单类型的请求参数

    请求参数类型为:content-type: application/x-www-form-urlencoded,使用该字段来传递请求参数

    • params: 用来查询字符串参数

    请求参数,以?key=value 的形式 拼接在 url 后面的参数

    其他字段

    除了上述主要字段之外,python 中的 requests 库中的 requests.request 方法所有的请求参数,均支持在用例中定义字段。
    这些字段在大多数情况下都用不到。

    • files:接口用于文件上传

    请求参数类型为:content-type:application/from-data,使用该字段来传递请求参数,常用于文件上传

    • cookies:

    请求的 cookie 信息(apin 中同一个用例集会自动化传递 cookie,一般情况下,不需要使用该字段来传递 cookie)

    • auth: 用于 Basic/Digest/Custom HTTP 认证

    • timeout:设置 http 请求超时时间

    • allow_redirects:是否运行请求重定向

    • proxies:代理请求的

    • stream:是否立即下载响应内容

    • verify:是否进行证书校验(如果要忽略 HTTPS 请求的证书校验,则将此参数设置为 False)

    • cert:指定校验证书的路径

    4、用例编写 

    python 编写用

    • 步骤一,在 testcases 目录中定义一个以 test 开头的 py 文件

    • 步骤二,在文件中定义一个以 Test 开头的类,并且继承于 apin.core.httptest.HttpCase 类

    • 步骤三、在类中,编写测试集的字段值

    字段名 = 字段值

    1. from apin.core.httptest import HttpCase
    2. class TestDomeV3(HttpCase):
    3. host = "http://api.lemonban.com/futureloan/"
    4. headers = {"X-Lemonban-Media-Type": "lemonban.v2"}
    5. # 定义测试前置方法
    6. setup_hook = {"timestamp": 'F{get_timestamp()}'}
    7. # 预设变量
    8. env = {
    9. "user_mobile": 'F{rand_phone("155")}',
    10. "admin_mobile": 'F{rand_phone("133")}'
    11. }
    12. # 结果校验
    13. verification = [
    14. ["eq", 0, 'V{{$..code}}'],
    15. ["eq", "OK", "V{{$..msg}}"]
    16. ]
    • 步骤四、在 Cases 字段中编写用例数据

    1. from apin.core.httptest import HttpCase
    2. class TestDomeV3(HttpCase):
    3. host = "http://api.XXXX.com/futureloan/"
    4. headers = {"X-Lemonban-Media-Type": "lemonban.v2"}
    5. # 定义测试前置方法
    6. setup_hook = {"timestamp": 'F{get_timestamp()}'}
    7. # 预设变量
    8. env = {
    9. "user_mobile": 'F{rand_phone("155")}',
    10. "admin_mobile": 'F{rand_phone("133")}'
    11. }
    12. # 结果校验
    13. verification = [
    14. ["eq", 200, 'status_code'],
    15. ["eq", {'code': 0, "msg": "OK"}, {'code': 'V{{$..code}}', "msg": "V{{$..msg}}"}]
    16. ]
    17. Cases = [
    18. # 用例1:普通用户注册
    19. {
    20. 'title': "普通用户注册",
    21. 'interface': "member/register",
    22. "method": "post",
    23. 'json': {"mobile_phone": "${{user_mobile}}", "pwd": "lemonban"},
    24. },
    25. # 用例2:管理员注册
    26. {
    27. 'title': "管理员注册",
    28. 'interface': "member/register",
    29. "method": "post",
    30. 'json': {"mobile_phone": "${{admin_mobile}}", "pwd": "lemonban", "type": 0}
    31. },
    32. ]

    YAML 编写用例

    使用yaml编写用例前 建议先去学习一下yaml的语法。

    • 步骤一:在 casedata 中定义一个 test 开头的 YAML 文件

    • 步骤二:在 YAML 文件中定义测试集的字段值

    1. # 域名
    2. host: http://api.xxxxx.com/futureloan/
    3. # 请求头
    4. headers:
    5. X-Lemonban-Media-Type: lemonban.v2
    6. # 用例前置钩子函数
    7. setup_hook:
    8. timestamp: F{get_timestamp()}
    9. # 预设运行变量
    10. env:
    11. user_mobile: F{rand_phone("155")}
    12. admin_mobile: F{rand_phone("133")}
    13. # 结果校验字段
    14. verification:
    15. - ["eq", 0, 'V{{$..code}}']
    16. - ["eq", "OK", "V{{$..msg}}"]
    • 步骤三:在 Cases 字段中编写测试用例

    1. # 用例数据
    2. Cases:
    3. - title: 普通用户注册
    4. interface: member/register
    5. method: post
    6. json:
    7. mobile_phone: ${{user_mobile}}
    8. pwd: lemonban
    9. - title: 管理员注册
    10. interface: member/register
    11. method: post
    12. json:
    13. mobile_phone: ${{admin_mobile}}
    14. pwd: lemonban
    15. type: 0

    JSON 编写用例

    使用 YAML 编写用例前 建议先去学习一下 JSON 的语法,JSON 文件中字段名都需要使用双引号。

    • 步骤一:在 casedata 中定义一个 test 开头的 JSON 文件

    • 步骤二:在 JSON 文件中定义测试集的字段值

    • 步骤三:在 JSON 文件中定义测试集的字段值

    1. {
    2. "host": "http://api.XXXXX.com/futureloan/",
    3. "headers": {"X-Lemonban-Media-Type": "lemonban.v2"},
    4. "setup_hook": {"timestamp": "F{get_timestamp()}"},
    5. "env": {
    6. "user_mobile": "F{rand_phone('155')}",
    7. "admin_mobile": "F{rand_phone('133')}"
    8. },
    9. "verification": [
    10. ["eq", {"code": 0, "msg": "OK"}, {"code": "V{{$..code}}", "msg": "V{{$..msg}}"}]
    11. ],
    12. "Cases": [
    13. {
    14. "title": "普通用户注册",
    15. "interface": "member/register",
    16. "method": "post",
    17. "json": {
    18. "mobile_phone": "${{user_mobile}}",
    19. "pwd": "lemonban"
    20. }
    21. },
    22. {
    23. "title": "管理员注册",
    24. "interface": "member/register",
    25. "method": "post",
    26. "json": {
    27. "mobile_phone": "${{admin_mobile}}",
    28. "pwd": "lemonban",
    29. "type": 0
    30. }
    31. }
    32. ]
    33. }

  • 相关阅读:
    一、认识STM32
    WPF中可视化树和逻辑树的区别是什么
    数据库系统原理与应用教程(060)—— MySQL 练习题:操作题 11-20(四)
    期末前端web大作业——名侦探柯南网页制作 Hbuiderx制作网页 静态HTML网页单页制作 dreamweaver网页设计与制作代码 web前端期末大作业
    千古第一文人苏轼的众CP
    combit Report Server 29
    MySQL标准差和方差函数使用
    机器学习强基计划3-2:详细推导支持向量机SVM原理+Python实现
    12.3 - 每日一题 - 408
    K_A00_002 基于单片机驱动OLED 0.91 字符/切换图片/滚动显示
  • 原文地址:https://blog.csdn.net/m0_73409141/article/details/132856681