自从学了这套框架,自动化+性能都解决了

框架介绍

1、HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。

2、Locust Locust是一款易于使用的分布式用户负载测试工具。它用于对网站(或其他系统)进行负载测试,并确定系统可以处理多少并发用户。HttpRunner 通过复用Locust ,可以在无需对 YAML/JSON 进行任何修改的情况下,直接运行性能测试。

3、 httprunner使用手册 附httprunner中文使用文档地址:cn.httprunner.org/

环境安装

1 安装httprunner: pip install httprunner==2.2.5

2 安装har2case: pip install har2case

3 检查安装是否成功:hrun -h/-v;har2case -h/-v

4 安装locust: pip install locustio

新增命令

在 HttpRunner 安装成功后,系统中会新增如下 5 个命令:

1 httprunner: 核心命令

2 hrun: httprunner 的缩写,功能与 httprunner 完全相同

3 locusts: 基于 Locust 实现性能测试

4 har2case: 辅助工具,可将标准通用的 HAR 格式(HTTP Archive)转换为YAML/JSON格式的测试用例

用例生成

(1)利用fiddler/charles对接口数据进行抓包,将结果导出为XX.har文件

(2)将导出的XX.har文件转化为json文件/yaml文件

  1. 转化为json文件:har2case xx.har

  2. 转化为yaml文件:har2case xx.har -2y/--to-yml

  3. 复制代码

(3) 转化成功后的yaml文件如下:

status_code: 请求的状态码

headers.Content-Type: 将响应头的内容格式做验证

content.msg: 响应内容的关键字作为验证

config: 作为整个测试用例集的全局配置项,包括变量(variables,name)

test: 对应单个测试用例

name 这个test的名字(用例的名称)

request 这个test具体发送http请求的各种信息, 如下:

url 请求的路径 (若config中有定义base_url, 则完整路径是用 base_url + url )

method 请求方法 POST, GET等等

headers: 请求头

请求体: json格式的数据

validate(断言): 完成请求后, 所要进行的验证内容. 所有验证内容均通过该test才算通过,否则失败.

参数化:

  1. testcases:

  2. -

  3. name: call demo_testcase with data 1

  4. testcase: testcases/test_login.yml

  5. parameters:

  6. # username: ["admin1","admin"]

  7. -username:

  8. - ["admin1"]

  9. - ["admin"]

  10. 复制代码

测试用例(testcase)嵌套testcases

测试用例集是测试用例的无序集合,集合中的测试用例应该都是相互独立,不存在先后依赖关系的。 如果确实存在先后依赖关系怎么办,例如登录功能和下单功能。正确的做法应该是,在下单测试用例的前置步骤中执行登录操作。

  1. - config:

  2. name:order product

  3. - test:

  4. name:login

  5. testcase:testcases/login.yml

  6. - test:

  7. name:add to cart

  8. api:api/add_cart.yml

  9. - test:

  10. name:make order

  11. api:api/make_order.yml

  12. 复制代码

变量取值:

在测试用例内部,HttpRunner划分了两层变量空间作用域context。

  • config:作为整个测试用例的全局配置项,作用域为整个测试用例;
  • test:测试步骤的变量空间context会继承或覆盖config中的定义的内容;
    • 若某变量在config中定义了,在某test中没有定义,则该test会继承该变量
    • 若某变量在config中和某test中都定义了,则该test中使用自己定义的变量值
  • 各个测试步骤test的变量空间相互独立,互不影响;
  • 如需在多个测试步骤test中传递参数值,则需要使用extract关键字,并且只能从前往后传递

响应头和响应体的提取:

  1. //response headers:

  2. {

  3. “Content - Type”:"application/json",

  4. “Content - Length”:69

  5. }

  6. //response body:

  7. {

  8. “success”:false,

  9. “person”:{

  10. "name":{

  11. “first_name”:"cs",

  12. “last_name”:"css",

  13. },

  14. “age”:29,

  15. “cities”:["Guangzhou","Shenzhen"]

  16. }

  17. }

  18. 复制代码

那么对应的字段提取方式就为:

  1. “headers.content-type”=>"application/json"

  2. “headers.content-length”=>69

  3. “body.success"/"content.success"/"text.success=>false

  4. "content.person.name.first_name"=>"cs"

  5. "content.person.age"=>29

  6. "content.person.cities"=>["Guangzhou","Shenzhen"]

  7. "content.person.cities.0"=>"Guangzhou"

  8. "content.person.cities.1"=>"Shenzhen"

  9. 复制代码

可以看出,通过点( . )运算符,我们可以从上往下逐级定位到具体的字段:

  • 当下一级为字典时,通过.key来指定下一级的节点,例如.person,指定了content下的person节点;
  • 当下一级为列表时,通过.index来指定下一级的节点,例如.0,指定了cities下的第一个元素。

提取HTML的内容(正则表达式)

上传文件场景

生成项目文档

1、进入D盘

2、输入命令:hrun --startproject 项目名称

testcases:存放用例

testsuites:存放套件

reports:自动生成报告并放到该目录

3、 进入到目录,查看对应的文件和目录

可以看到生成的3个目录和一个py文件,api debugtalk.py testcases suite

4、将转化好的XX.har文件放置在项目文件夹testcases目录中

5、运行用例 (1) 运行单个用例:指定具体的xx.yml或xx.json文件

hrun 文件路径/hrun 文件路径 --log-level info

(2) 运行多个用例:hrun 文件的testcases目录

(3) 运行testsuites目录:运行testsuites目录中所有的yml用例

参数化:多个参数三种类型参数化

查看报告

在项目文件夹report中,生成了html格式的测试报告,包括log日志记录(包含request and response data)

注意事项:

(1) 对于依赖性强的测试用例,当前测试用例执行失败后,之后用例都将失败,因此无执行必要,遇到失败时不再继续运行后续用例命令如下:

 
  1. $ hrun filepath/testcase.yml --failfast

  2. 复制代码

(2) 运行日志中查看更详细的响应内容

  1. $ hrun docs/data/demo-quickstart-6.json --log-level debug

  2. 复制代码

  3. hrun xx.yaml --log-level debug

  4. 复制代码

(3) 将运行过程中的中间数据作为日志保存:hrun xx.yaml --log-file xx.log 在这里插入图片描述

接口的性能测试---locusts

1、执行性能测试用例:locusts -f 文件路径(相对路径) --processes (在 Locust 中需使用多核处理器的能力,--processes 参数,可以一次性启动 1 个 master 和多个 salve。若在 --processes 参数后没有指定具体的数值,则启动的 slave 个数与机器的 CPU 核数相同。)

2、用例运行完成后,在浏览器中输入地址 http://localhost:8089/,可查看到locust页面

  • Number of total users to simulate:并发用户数
  • Hatch rate (users spawned/second):多少秒启动这些并发
  • Host:接口的主机地址

    locustos在执行请求动作 3、查看性能测试报告: (1) 每秒完成的请求数(RPS:Requests Per Second) (2)响应时间(Response Times),单位ms (3)不同时间的虚拟用户数:稳定值(一定时间后) (4)查看cpu并发压力:类似负载均衡--CPU usage(cpu的使用率) (5)参数说明
  1. host:http://10.0.10.27:10080

  2. 请求路径(name):/api/login

  3. 复制代码

(6)脚本执行结果

从测试结果可以看出,实际上每秒并没有触发10个请求(RPS值不到10),因为在locustfile.py文件里面有个等待机制 min_wait = 1000 最小等待时间1秒 max_wait = 5000 最大等待时间5秒 把max_wait改成1000就可以达到 10 RPS了 locustfile.py 当启动locusts的时候,会在当前目录自动生成一个locustfile.py文件。这个才是locust的脚本文件

使用locust执行locustfile.py脚本文件

locust -f locustfile.py

测试结果 RPS=9.9 接近10

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  1. 文档获取方式:

  2. 加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值