首页 > 编程语言 >python接口自动化13-API流量回放/锲约测试/自动化测试

python接口自动化13-API流量回放/锲约测试/自动化测试

时间:2023-02-16 21:15:04浏览次数:59  
标签:key 13 name -- ppl 测试 自动化 txt mock

PPL-Tester

简介

http工具集,通过代理获取到API的请求与响应信息,将这些请求信息进行流量回放/锲约测试或快速生成用例, 亦可通过人工进行修改参数化提取、变量引用、断言等形成API自动化测试用例等!
你以为只是流量回放吗?错~走去瞧瞧v2版本!

看官~请记得给个star呗?
项目地址:

github
gitee


功能介绍

流程图 (简陋ing···)

在这里插入图片描述
ps:
1、作者 Windows exe 运行,其它系统可自行打包或以 Python ppl x 执行.
2、运行程序需要在项目根目录下运行...

需要安装Python3环境及依赖库:

pip install -r requirements.txt

1、proxy http

command: ppl.exe f   (python ppl.py f)
    2023-01-20 10:39:53.628 | INFO     | __main__:cmd:37 - run:http flows cat. exit:Ctrl+C
    2023-01-20 10:39:53.642 | INFO     | utils.flows:cat_mock_load:25 - loaded mock*.json match to will mock!
    2023-01-20 10:39:53.644 | INFO     | utils.flows:__init__:114 - Proxy server listening at http://0.0.0.0:8888

在这里插入图片描述
基本代理等使用请参阅博文:点击跳转

官方文档:https://docs.mitmproxy.org/stable

中文文档:https://ptorch.com/docs/10/mitmproxy_introduction


2、mock http response

可对 response 进行mock!

2.1 配置 config.ini

mock = ON
    mock ON :开启mock
    mock OFF:关闭mock
mode = ON
    mode ON :向远程服务器发送任何数据,且根据mock数据交集返回数据从而响应
    mode OFF:不向远程服务器发送任何数据

2.2 mock文件格式:mock*.json

2.3 随机参数引用格式:$

结合 faker 的方法进行随机模式,文档请参考:https://faker.readthedocs.io/en/master/providers/faker.providers.python.html
mock demo:
{
  "api/user/info": {
    "bool": "${pybool}",
    "name": "${name}",
    "int": "${pyint}",
    "float": "${pyfloat(0,1)}",
    "data|1-3": [
      {
        "name": "${name}"
      }
    ]
  }
}

mock demo 输出
在这里插入图片描述


3、http flows replace

request 正则替换支持替换(headers url body cookie)

replace = {"pattern":"value","pattern1":"value1"}
使用场景:
    1.鉴权:将 token 设置为空,如:
        replace = {"old token xxx":""}
    2.越权:将 token 设置为另用户token,越权又分为①水平越权(同角色)②垂直越权(向上级),如:
        replace = {"old token xxx":"new token xxx"}
    3.流量转发, 将test环境的前端去访问正式环境的数据(前端问题复现)
        {"old host":"new host"}
    PS:因前端本就发出 old host 请求,所以前端看到请求还是 old host 但真实是请求到 new host.

4、https证书过期检测

config.ini -> check_ssl hosts

check_ssl = app.xxx.com,web.xxx.com
command:
    ppl.exe s

5、api playback

5.1 接口用例集合获取

方式1:Fiddler

1、将项目下desc/fiddler.txt复制文本粘贴,FiddlerScript

2、更改为符合自己业务领域配置,是项目绝对路径app目录,注意要用两个扛\\
在这里插入图片描述

方式2(推荐):mitmproxy

1、将项目下config.ini过滤域名改为自己需要配置的域名以及业务领域,如果填写db_url则流量信息直接入库
在这里插入图片描述
2、需要配置代理证书等,详看mitmproxy使用文档

3、运行

command:
    ppl.exe f

在这里插入图片描述

以上方式1及方式2 会得到txt文件 或直接入库

如果基于方式2(mitmproxy),配置db_url可直接流量入库回放测试.
在这里插入图片描述
1、你会得到:./data/api-xxx.txt 或 fiddler-xxx.txt

2、如需要用例入库,则执行命令行:

ppl.exe --play=0

另外可能需要进行数据库连接配置./config.ini.db_url,默认为sqlite

mysql:db_url = mysql+pymysql://root:[email protected]:3306/tester?charset=utf8

数据迁移:ppl.exe --move=new_db_url


5.2 执行测试

命令行参数说明(部分可在pytest.ini下默认配置),与pytest框架一致,并且新增以下参数:

  1. --env:查询业务领域=ppl及环境=test的用例

      如:--env=ppl,test   
    
  2. --param:附加将version参数替换为1或追加

      如(Windows):--param={\"version\":\"1\"}
    
  3. --file:读取app目录下所有txt文件进行流量回放,详细使用看流量回放

      如:--file=1
    
  4. --play:读取txt文件进行用例入库
    如:--play=0

      0:读取txt用例入库
      1:读取db用例进行回放测试
      2:读取txt文件流量回放
      3: 读取阿里云日志流量并入库
    
  5. --init:db表结构初始化,一般不需要用到
    如:--init=1

方式1:txt文件流量回放

ps:不支持下载/上传文件回放,不要将txt文件换行或格式变化哦(只回放API响应码为200)

  1)方式1:默认为app目录下全部txt文件(以下2-3不存在文件时亦是):pytest --file=1
  
  2)方式2:指定app目录下的文件:pytest --file=fiddler_2022-7-31.txt
  
  3)方式3:绝对路径指定文件(注意win下需要\\):pytest --file=E:\\fiddler_2022-7-31.txt
  
  4)方式4:相对路径指定文件:pytest --file=./fiddler_2022-7-31.txt

方式2:经过用例入库,执行db用例测试

需要先配置 pytest.ini(推荐) 或 config db在进行运行.

详情查看 5.6 db或pytest config说明.

配置pytest.ini,作用与db用例映射执行对应环境测试.
在这里插入图片描述

ppl.exe --env=domain,env --param={\"version\":\"1\"}

ps:Windows可以生成allure报告:ppl.exe r (支持替换变量,存储变量,引用变量,响应断言)


5.3 后置处理器介绍:http_collect

参数提取器,默认是取第1个值(支持提取response与headers接口的返参)
Jsonpath语法请参考:https://goessner.net/articles/JsonPath

1.Jsonpath 区分大小写

1)获取key的值:['key'] ----> {'key':'value'}

2)获取key的值并重新命名:[{'key':'name'}] ----> {'name':'value'}

3)获取key的值并指定取第n个:['key':n] ----> {'key':values[n]}

4)获取key的值并重新命名及指定取第n个:['key':['name',n]] ----> {'name':values[n]}

5)原生Jsonpath语法:['$.data.key'] ----> {'key':'value'}

6)原生Jsonpath语法并重新命名:[{'$.data.key':'name'}] ----> {'name':'value'}

7)原生Jsonpath语法并指定取第n个:[{'$.data.key':n}] ----> {'key':values[n]}

8)原生Jsonpath语法并重新命名及指定取第n个:[{'$.data.key':['name',n]}] ----> {'name':values[n]}

2.正则表达式

1)获取正则表达式的值并命名为env:[{'re':['env','http://(.+?)/']}] ----> {'env':'value'}

2)获取正则表达式的值并命名为env及取第n个值:[{'re':['env','http://(.+?)/', -1]}] ----> {'name':'value'}


5.4 断言使用介绍:http_assert

1.Jsonpath 断言

1.字符在里面:["msgId"]

  `实际为:assert "msgId" in response.text`

2.变量在里面:["${msgId}"]

`实际为:assert "${msgId}" in response.text`

2.字符相等:[{"msgId":"123456"}]

`实际为:assert 123456 == json_path(result.json(), 'msgId')`

3.字符在里面or其它:[{"msgId":["123456","in"]}] 注:in 可以是== != not in

  `assert 123456 in response.get('msgId')`

4.长度:1 == len(response.get('msgId')):[{"msgId":[1,"len"]}]

  `assert 1 == len(response.get('msgId'))`
2.正则表达式断言

1.直接写正则表达式即可,如:[{'re':'http://(.+?)/'}]


5.5 变量引用(参数化关联)

使用本系统且遵循Faker语法直接引用:$

ppl_开头,为自定义生成数据方法

Faker 更多请查阅官方文档:https://faker.readthedocs.io/en/stable/locales/zh_CN.html#faker-providers-address
在这里插入图片描述
字段数据结构及解释,亦可查阅代码model:
在这里插入图片描述

1.号码相关:

1)手机号:${phone_number}
18520149907

2)身份证号码:${ssn}
410622198603154708

2.时间日期相关

1)当前日期时间:${ppl_now_datetime}
2022-07-02 12:56:58

2)当前时间戳:${ppl_time}
1656737818

3)当前日期:${ppl_now_date}
2022-07-02

4)当前时间:${ppl_now_time}
12:56:58

5)过去7天的日期时间:${ppl_datetime(-7)}
2022-06-25 00:00:00

6)未来7天的日期时间:${ppl_datetime(7)}
2022-07-09 23:59:59

7)随机年-月-日:${date}
1996-03-20

8)随机(时:分:秒):${time}
04:52:23

9)未来的日期时间:${future_datetime(end_date=+7d)}
2022-07-07 16:01:23

10)过去的日期时间:${past_datetime(end_date=-7d)}
2022-06-29 13:29:20

3.名字相关:

1)姓名:${name}
王凯

2)姓名(女):${name_female}
戴丽丽

3)姓名(男):${name_male}
刘荣

4)姓:${last_name}

5)名字:${first_name}

4.地址相关

1)地址:${address}
香港特别行政区大冶县上街钟街k座 664713

2)省:${province}
河北省

3)市:${city}
长春县

4)地区:${district}
白云

5)街道地址:${street_address}
武汉街D座


5.6 db或pytest config说明

使用pytest.ini.tester配置 或 db config表配置,配置一种即可。
推荐使用pytest.ini

账号环境配置

1、pytest.ini 例子(需要压缩json,不可格式化)
    [test]
    tester = {"gray":"gray","Tester":[{"https://blog.csdn.net":{"url":"/qq_42675140","body":{},"method":"GET","collects":["ppl_cookie"]}},{"http://open-ppl-getaway.com":{"Authorization":"Bearer ","key":"nf9vMghQLyEZkeyxxxxx0ln9klsPz","secretx":"ylJhZzwvaa2NxxxsecretlDtNsJSyMh"}}],"filter_code":{},"filter_path":["/user/logout","/user/login"]}
      
  [test]:表示定义的环境 test,可以多个.
  tester:pytest 账号登录/过滤等配置
      1) gray:默认gray就好,一般用于AB测试模型则需要配置.
      2) Tester:登录获取token或cookie初始化,可配置多个登录信息
            collects:表示后置处理器 collect (使用详细查看第三点[后置处理器使用]),用例提取token或cookie作为登录态
      3) filter_code:过滤某些接口响应内容,可不写
      4) filter_path:过滤某些接口url,一般用于过滤登录及退出登录以免执行测试时影响登录态

2、db config如下例子, 直接复制粘贴保存即可(可格式化):
{
    "gray":"gray",
    "Tester":[
        {
            "https://app-xxx.com":{
                "url":"/api/user/login",
                "json":{
                    "mobile":18888888888,
                    "Password":"mVs6NwvIFRgN0aaUo4KZOiW9QZWbKZjqVX1eW9Gr2s4rgZ5atS3ppY39ZlyE37Tb2/zo6YWJV6VJV="
                },
                "method":"POST",
                "collects":[
                    "clienttoken"
                ]
            }
        },
        {
            "https://web-xxx.com":{
                "url":"/api/index.php?r=data/login",
                "data":"user=admin&password=4076f862096d1536b6cac6866e386655=",
                "method":"POST",
                "headers":{
                    "content-Type":"application/x-www-form-urlencoded"
                },
                "collects":[
                    "ppl_cookie"
                ]
            }
        }
    ],
    "filter_code":{
        "$response_key":[
            200,
            "200"
        ]
    },
    "filter_path":[
        "/api/user/logout",
        "/api/user/login"
    ]
}

5.7 mysql等断言

待开发

6、web页面管理用例等

待开发

7、flows客户端,集成以上功能...

待开发

如有建议/疑问请联系我:https://blog.csdn.net/qq_42675140

图片

标签:key,13,name,--,ppl,测试,自动化,txt,mock
From: https://www.cnblogs.com/gsxl/p/17128305.html

相关文章

  • 与ChatGPT关于测试问题的对话
    1测试人员创造什么价值?测试人员在软件开发生命周期中扮演着非常重要的角色,他们的主要职责是确保软件在发布前达到高质量标准。以下是测试人员为软件开发和业务提供的价值......
  • Burp Suite Professional 2023.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫
    BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:https://sysin.org/blog/burp-suite-pro-2023/,查看最新版。原创作品,转载请保留出处。......
  • CF653B 1300
    题意长度为n的字符串(字符串中只有abcdef共6种字母),有q种压缩方式,可以将字符串的前两个字符压成1个字符,求凭借这q种压缩方式,有几种长度为n的字符串最终能被压缩成字符'a'.......
  • 如何利用iphone自带的弱网络进行弱网或接口timeout测试
    前提条件:1.设置中调出:开发者选项。(方法一:找开发帮忙真机链接编译器xcode,重启手机后开发者选项消失.开发者选项在设置的一级子目录下;方法二:在设置隐私与安全性中,打开开发......
  • 课堂测试——架构
     (1)什么是架构?   人根据某个需要解决的问题,识别分析问题,并将按照最优解决方式对问题进行切分,让不同角色分工切分好的模块,最后整合各个达到最优解的模块形成一个整体,以......
  • (二)接口测试基础认知
    测试用例设计思路:从输入参数进行考虑设计:1)优先级-针对所有接口1、暴露给其他系统、第三方调用接口2、系统内部调用的核心功能接口3、系统内部调用的非核心功能接口2......
  • jmeter的阶梯式加压性能测试 jp@gc - Stepping Thread Group (deprecated)
    当测试需求要求是阶梯型的压力测试场景时,使用该线程组。比如测试场景是  从100并发开始,每60s加压50并发,直至达到目的并发数(中途发现问题随时停掉),之后保持每60s停止50......
  • 软件测试新人如何提升自己?
    首先要熟悉部门业务,了解目前一共有哪些项目,你可能会投入哪个项目,这样就可以有优先级的看需求。看需求一定要仔细,如果看不透彻,很容易漏掉测试点,或者发现不了需求存在的......
  • 如何提升软件测试的价值?
    日常我们测试的项目都是时间紧急,导致需求或设计都可能存在一定的问题;或是bug或是未考虑周全,或是描述不清。开发写代码过程也会出现遗漏、错误或到了时间节点未进行联......
  • MacOS Ventura13安装libimobiledevice踩坑记
    背景:Mac环境搭建iOS自动化环境,Mac系统:MacOSVentura13.2(手残党更新了一把)。问题一:brewinstalllibimobiledevice--HEAD报错提示:UpdatingHomebrew...Warning:Y......