一、思考❓❔
1.有没有一种既能做接口自动化测试,又能做压测的工具呢?
- 当然有啦!?
- Jmeter
- But
- 不灵活
- 不太简单
- Jenkins集成有点难
- 不能装X
- 有没有哪种神器,可以一栏狂澜呢?
- HttpRunner
2.HttpRunner是什么?
- 是一个适应HTTP、HTTPS协议的强大测试框架,基于Python开发
- 往往测试人员只需编写一份 YAML或者JSON格式的脚本,用于存放测试用例或者测试数据
- 无需写代码(或者只写少量代码)
- 可以非常方便、高效地实现接口自动化测试、性能测试
- 轻轻松松实现Jenkins持续集成
二、案例演练??
1.安装HttpRunner
-
打开CMD
-
使用豆瓣pypi源来安装(推荐)
pip install -i https://pypi.douban.com/simple httprunner
-
安装成功之后:
- 会提供一个hrun命令
- 查看版本信息:
hrun -V
2.创建项目工程
-
在CMD命令行中,使用
hrun --startproject 指定项目名称
- 例如:
hrun --startproject LearnHttpRunner0410
- 例如:
-
会自动化创建如下目录和文件
api目录:用于存放用例的最小单元(一般为正向用例) debugtalk.py文件:用于定义Python函数,进行相关处理 reports目录:用于存放测试报告 testcases目录:用于存放没个接口的用例(涉及测试步骤依赖) testsuites目录:用于存放多个测试用例(来实现数据驱动&参数化)
3.添加登录接口正向用例
-
在api目录下创建 login_api.yml 文件
# 指定接口名称 name: 登录接口 # 定义变量 variables: # 变量名: 变量值 username: "keyou1" password: "123456" # 定义base url base_url: "http://api.keyou.site:8000" # 定义请求相关的数据 request: # 接口请求路径 url: /user/login/ # 接口请求方法 method: POST # 请求头参数 headers: # 请求头key: 请求头value Content-Type: "application/json" # 定义json参数 json: # 参数key: 参数value # 通过$变量名, 可以调用变量 username: $username password: $password # 定义校验方式 validate: # 校验类型: [实际值, 期望值] # 校验类型种类有很多: # eq: 校验是否实际值与期望值是否一致 # lt: 校验实际值小于期望值 # le: 校验实际值小于等于期望值 # gt: 校验实际值大于期望值 # ge: 校验实际值大于等于期望值 # ne: 校验实际值不等于期望值 # 等等 - eq: ["status_code", 200]
-
在 Terminal 下运行如下命令:
# hrun 用例文件路径(相对路径或绝对路径)日志等级(不设置也行) hrun api/login_api.yml --log-level debug
4.对登录接口进行测试
在 testcases 目录下创建 login_testcase.yml 文件
# 定义全局配置
config:
# 指定全局配置名称
name: "登录接口测试"
# 定义当前接口的测试步骤(接口依赖)
teststeps:
-
# 指定接口名称
name: "登录接口"
# 引用登录接口正向用例(最小单元)
api: api/login_api.yml
# 定义变量
# 会将api中定义的变量合并覆盖(不同则合并,相同则覆盖)
variables:
username: "keyou1"
password: "123456"
status_code: 200
msg: "user_id"
validate:
- eq: ["status_code", $status_code]
- contains: ["content", $msg]
-
在 Terminal 下运行如下命令:
# hrun 用例文件路径(相对路径或绝对路径)日志等级(不设置也行) hrun testcases/login_testcase.yml
5.对登录接口进行数据驱动&参数化测试
在 testsuites 中创建 testsuites/login_testsuite.yml 文件
# 定义全局配置
config:
# 指定全局配置名称
name: "登录套件"
base_url: "http://api.keyou.site:8000"
# 定义添加到套件中的用例
testcases:
-
# 指定用例名称
name: "登录用例数据驱动测试"
# 指定用例路径(相对路径或者绝对路径)
testcase: testcases/login_testcase.yml
# 指定参数化
parameters:
# - 参数名1-参数名2-参数名3:
# - [参数值1, 参数值2, 参数值3]
- title-username-password-status_code-msg:
- ["正常登录", "keyou1", "123456", 200, "user_id"]
- ["用户名为空", "", "123456", 400, "username"]
- ["密码为空", "keyou1", "", 400, "password"]
- ["密码不正确", "keyou1", "1234567", 400, "non_field_errors"]
-
在 Terminal 下运行如下命令:
# hrun 用例文件路径(相对路径或绝对路径)日志等级(不设置也行) hrun testsuites/login_testsuite.yml
6.对接口进行压测
-
对 api/login_api.yml 登录接口进行压测
-
安装 locust
pip install -i https://pypi.douban.com/simple locustio
-
查看到 Locust 的版本号
locusts -V
-
执行压测
# locusts -f yaml用例路径(相对路径或绝对路径) locusts -f api/login_api.yml
三、总结??
- 本文介绍了使用 HttpRunner 进行接口自动化测试和接口压测
- yaml用例编写简单方便,并且功能强大,能大大提升工作效率
- HttpRunner定制化强度高,可以很方便与Jenkins和测试开发平台集成
- 本文为可优原创,如有不足,请多多指教
欢迎来到testingpai.com!
注册 关于