前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >httprunner 2.x学习12-在testcase中传递变量(output)

httprunner 2.x学习12-在testcase中传递变量(output)

作者头像
上海-悠悠
发布2021-04-26 09:52:47
发布2021-04-26 09:52:47
93400
代码可运行
举报
运行总次数:0
代码可运行

前言

httprunner 2.x 的版本,testcase 可以引用 api, 同样的 testcase 也可以引用另外一个 testcase 文件 在2个 testcase 中传递变量可以用到 output 关键字

testcase 导入 api

测试用例(testcase) 是测试步骤的按顺序组织的,测试步骤也就是对应 api 里面的每个接口

场景案例: A接口登录接口文档基本信息

代码语言:javascript
代码运行次数:0
复制
访问地址:http://127.0.0.1:8000/api/v1/login/
请求类型:POST
请求头部:application/json
请求参数:{"username":"test", "password":"123456"}

B接口查询商品信息

代码语言:javascript
代码运行次数:0
复制
访问地址:http://127.0.0.1:8000/api/v2/goods?page=1&size=2
请求类型:GET
请求头部token参数:Authorization: Token xxxxx login token xxxxx

于是在 api 层写 2 个 api login.yml

代码语言:javascript
代码运行次数:0
复制
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
name: 用户账户登录
base_url: http://127.0.0.1:8000
variables:
user: test1
psw: "123456"
request:
url: /api/v1/login
method: POST
json:
username: $user
password: $psw
validate:
- eq: [status_code, 200]
- eq: [headers.Content-Type, application/json]

get_goods.yml

代码语言:javascript
代码运行次数:0
复制
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
name: 查询全部商品
base_url: http://127.0.0.1:8000
variables:
page: 1
size: 5request:
url: /api/v2/goods
method: GET
headers:
Authorization: Token $token
params:
page: $page
size: $size
validate:
- eq: [status_code, 200]

在 testcases 层引用 api ,步骤1 用extract 提取token变量,在步骤2里面,api里面虽然没定义token,但是可以引用到步骤1 提取的token。

代码语言:javascript
代码运行次数:0
复制
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
config:
name: 登陆后,查询商品详情teststeps:
-
name: 测试步骤:login
api: api/login.yml
extract:
token: content.token
-
name:  测试步骤:查询商品详情
variables:
page: 1
size: 2
api: api/get_goods.yml
validate:
- eq: [content.code, 0]
- eq: [content.msg, success!]

output 全局变量

如果对上面的参数传递不太理解,可以在config 加上 output 关键字,把步骤 1 提取的token变量设置为全局变量,使它在整个yaml文件的步骤中都会生效

代码语言:javascript
代码运行次数:0
复制
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
config:
name: 登陆后,查询商品详情
output:
- tokenteststeps:
-
name: 测试步骤:login
api: api/login.yml
extract:
token: content.token
-
name:  测试步骤:查询商品详情
variables:
page: 1
size: 2
api: api/get_goods.yml
validate:
- eq: [content.code, 0]
- eq: [content.msg, success!]

运行结果会看到 Output 把变量输出到控制台,这样有个好处,可以方便查看变量的值是否正确,方便调试

代码语言:javascript
代码运行次数:0
复制
INFO
==================== Output ====================
Variable         : Value
---------------- : -----------------------------
token            : 85da1cb0448b62d451bb5db1cd214cccd1bc139a
------------------------------------------------INFO     Start to render Html report ...
INFO     Generated Html report: D:\hrun2\reports\20210415T041914.869893.html
Sentry is attempting to send 0 pending error messages
Waiting up to 2 seconds
Press Ctrl-Break to quit

output 可以在 testcase 间传递变量值

httprunner 2.x 的版本,testcase 可以引用 api, 同样的,testcase 也可以引用另外一个 testcase 文件,如何2个 testcase 之间需要传递变量,这个时候可以用output把变量暴露出来,给下个步骤引用。 有些同学喜欢偷懒,觉得前面的用例是一大串的步骤,下个用例的步骤接着前面的用例,于是可以导入前面的用例。 当然 httprunner2.x 是支持这样做的,其它的框架并不支持。(我个人也不建议这样做,测试用例容易混乱,测试用例设计原则:我们要保证每个用例的独立性,不要依赖其它用例的结果。)

先在 testcases/test_login_success.yml 中提取 token,接着在 config 里 设置全局变量 token

代码语言:javascript
代码运行次数:0
复制
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
config:
name: 登陆接口-输入正确账号,正确密码,登陆成功
output:
- tokenteststeps:
-
name: 测试步骤:login
api: api/login_base_url.yml
variables:
user: test1
psw: "123456"
extract:
token: content.token
validate:
- eq: [content.code, 0]
- eq: [content.msg, login success!]
- len_eq: [content.token, 40]

于是下个testcase/test_goods_all.yml 可以引用testcase

代码语言:javascript
代码运行次数:0
复制
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
config:
name: 登陆后,查询商品详情teststeps:
-
name: 测试步骤:引用testcases test_login_success.yml
testcase: testcases/test_login_success.yml-
name:  测试步骤:查询商品详情
variables:
page: 1
size: 2
token: $token
api: api/get_goods.yml
validate:
- eq: [content.code, 0]
- eq: [content.msg, success!]

下个 api 步骤需重新引用下 $token 就可以找到了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • testcase 导入 api
  • output 全局变量
  • output 可以在 testcase 间传递变量值
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档