Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >httprunner 3.x学习5 - 测试用例引用前面一个用例(call)

httprunner 3.x学习5 - 测试用例引用前面一个用例(call)

作者头像
上海-悠悠
发布于 2021-06-24 14:47:39
发布于 2021-06-24 14:47:39
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

前言

当我写了一个登录的接口用例后,后面会继续写查询个人信息的接口,但是查询个人信息接口是依赖于先登录(获取token)。 像这种业务上操作有先后关系的情况,可以把登录当一个step来引用。 httprunner3.x 框架弱化了API层的概念,直接写testcase了,如果是单个接口的用例,可以当step去引用。

场景案例

我现在有一个登陆接口A,登陆成功后返回一个token值。有一个获取绑定卡号的接口B,但是接口B必须要先登录后传登录的token才能访问 A接口登录接口文档基本信息

  • 访问地址: http://127.0.0.1:8000/api/v1/login/
  • 请求类型: POST
  • 请求头部: application/json
  • 请求参数: {“username”:”test”, “password”:”123456”}

B接口获取用户信息的接口文档基本信息

  • 访问地址: http://127.0.0.1:8000/api/v1/userinfo/
  • 请求类型: GET
  • 请求头部: Content-Type: application/json
  • 请求头部token参数: Authorization: Token xxxxx login token xxxxx

先不带token去访问接口B,使用命令行工具httpie测试接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\Users\dell>http http://127.0.0.1:8000/api/v1/userinfo/
HTTP/1.1 401 Unauthorized
Allow: GET, POST, HEAD, OPTIONS
Content-Length: 58
Content-Type: application/json
Date: Sat, 21 Sep 2019 14:06:15 GMT
Server: WSGIServer/0.2 CPython/3.6.0
Vary: Accept
WWW-Authenticate: Token
X-Frame-Options: SAMEORIGIN

{
    "detail": "Authentication credentials were not provided."
}

不带token会提示没权限访问:401 Unauthorized

登录接口用例

先写一个登录的接口用例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# NOTE: Generated By HttpRunner v3.1.4
# FROM: test_login.yml
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

class TestCaseTestLogin(HttpRunner):

    config = Config("logincase").base_url("http://127.0.0.1:8000").export(*["token"])

    teststeps = [
        Step(
            RunRequest("steplogin")
            .with_variables(**{"user": "test", "psw": "123456"})
            .post("/api/v1/login")
            .with_json({"username": "$user", "password": "$psw"})
            .extract()
            .with_jmespath("body.token", "token")
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.code", 0)
            .assert_equal("body.msg", "login success!")
            .assert_length_equal("body.token", 40)
        ),
    ]

if __name__ == "__main__":
    TestCaseTestLogin().test_start()

查询个人信息

查询个人信息接口先用到登录的token,前面已经写过登录了,于是可以直接引用登录用例, 当成一个测试步骤

RunTestCase(name)

  • RunTestCase 在一个步骤中用于引用另一个测试用例调用。
  • name RunTestCase 的参数用于指定测试步骤名称,该名称将显示在执行日志和测试报告中。
  • .with_variable() 与 RunRequest 的.with_variables 一样,定义变量
  • .call() 指定引用的测试用例类,需先导入这个类。
  • .export() 指定要从引用的测试用例导出的会话变量名称。 导出的变量可以被后续的测试步骤引用。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# NOTE: Generated By HttpRunner v3.1.4
# FROM: testcases\login_userinfo.yml
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).parent.parent))

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
from testcases.test_login_test import TestCaseTestLogin as TestLogin

class TestCaseLoginUserinfo(HttpRunner):

    config = Config("logincase").base_url("http://127.0.0.1:8000").export(*["token"])

    teststeps = [
        Step(RunTestCase("step1 login")
             .call(TestLogin)
             .export(*["token"])),
        Step(
            RunRequest("step2 get user info")
            .get("/api/v1/userinfo/")
            .with_headers(
                **{
                    "Content-Type": "application/json",
                    "User-Agent": "python-requests/2.18.4",
                    "Authorization": "Token $token",
                }
            )
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal('headers."Content-Type"', "application/json")
            .assert_equal("body.code", 0)
            .assert_equal("body.data[0].mail", "283340479@qq.com")
        ),
    ]

if __name__ == "__main__":
    TestCaseLoginUserinfo().test_start()

运行结果:

运行结果是执行2个用例,先执行登录,再执行后面的查询。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
httprunner 3.x学习10 - parameters 参数化
httprunner 3.x可以在yaml文件中参数化,在 config 中使用 parameters 关键字 环境:httprunner==3.1.4
上海-悠悠
2021/06/24
1.2K2
httprunner 3.x学习8 - variables变量声明与引用
在 HttpRunner 中,支持变量声明(variables)和引用($var)的机制
上海-悠悠
2021/06/24
8880
httprunner 3.x学习4 - 测试用例参数关联(export)
前言 如何将上个接口的返回token,传给下个接口当做请求参数? 这是最常见的一个问题了。 解决这个问题其实很简单,我们只需取出token值,设置为一个中间变量a,下个接口传这个变量a就可以了。那么接
上海-悠悠
2021/06/24
1.3K0
httprunner 3.x学习2 - 测试用例结构(testcase)
httprunner 3.x 支持3种格式的用例:YAML/JSON/pytest 代码,3.x版本主推的是pytest测试用例。
上海-悠悠
2021/06/24
1.2K0
httprunner 3.x学习2 - 测试用例结构(testcase)
httprunner 3.x学习12 - 参数化(parameters)引用 debugtalk 函数
本篇讲解调用 debugtalk.py 中自定义的函数生成参数列表,生成的参数列表必须为 list of dict 的数据结构。
上海-悠悠
2021/06/24
1.2K0
httprunner 3.x学习14 - 上传文件(upload)
requests 库里面上传文件会用到 requests_toolbelt, 可以很方便的解决 multipart/form-data 类型的文件上传相关接口。 HttpRunner3.x 集成了 requests_toolbelt,可以使用内置 upload 关键字来上传文件相关操作。 相关环境:
上海-悠悠
2021/06/24
1.1K0
httprunner 3.x学习14 - 上传文件(upload)
httprunner(8)用例调用-RunTestCase[通俗易懂]
一般我们写接口自动化的时候,遇到复杂的逻辑,都会调用API方法来满足前置条件,Pytest的特性是无法用例之间相互调动的,我们一般只调用自己封装的API方法。 而httprunner支持用例之间的调用,通过RunTestCase对其他测试用例进行调用,并且还可以导出用例中你所需要的变量,来满足后续用例的的运行。
全栈程序员站长
2022/09/19
4170
httprunner 2.x学习5-测试用例集(testsuite)
httprunner 分层主要是分三层:api、testcase、testsuites 前面讲分层的时候讲到api单独封装每个接口,testcase可以有多个测试步骤,调用api层的接口是写测试用例,用例的步骤是有序的。 testsuites 这一层是测试用例的集合,把测试用例放到一个测试套件去执行,用例执行应该是无序的,有依赖的场景在testcase这一层测试用例里面就已经按步骤写好了。
上海-悠悠
2020/06/17
1.3K1
httprunner 3.x学习13 - hook 机制
httprunner 3.x可以支持hook机制,在发送请求前做一些预处理或在请求完成后后置处理
上海-悠悠
2021/06/24
1.3K0
httprunner 3.x学习11 - 参数化(parameters)引用外部 csv 数据文件
对于已有参数列表,并且数据量比较大的情况,比较适合的方式是将参数列表值存储在 CSV 数据文件中。 对于 CSV 数据文件,需要遵循如下几项约定的规则:
上海-悠悠
2021/06/24
1.2K0
httprunner 3.x学习3 - jmespath 提取返回结果(extract, validate)
httprunner 3.x支持 jmespath 提取器提取返回的结果内容,可以在 extract 提取变量的时候使用,也可以在 validate 校验结果的时候使用。
上海-悠悠
2021/06/24
2.1K0
httprunner 3.x学习3 - jmespath 提取返回结果(extract, validate)
HTTPRunner
HTTPRunner是一种单元测试工具,由于教学的需求,我学习了它,但是我觉得它比Python的Requests类相差太远。作为一个比较流行的工具在这里进行介绍。
顾翔
2024/09/10
1400
HTTPRunner
httprunner 3.x学习9 - .env环境变量设置
一般来说,在进行实际应用的开发过程中,应用会拥有不同的运行环境,通常会有以下环境:
上海-悠悠
2021/06/24
1.1K0
软件测试用例包括_白盒测试用例
每个测试用例都有1个或多个测试步骤(List[step]),每个测试步骤对应一个API请求或其他用例的引用。
全栈程序员站长
2022/09/19
1K0
软件测试用例包括_白盒测试用例
httprunner 3.x学习1 - 环境安装与准备
httprunner 3.x最大的改变是执行用例用的是 python 的 pytest 框架,支持3种格式的用例:YAML/JSON/pytest 代码 对比 httprunner 2.x 以前版本,早期版本用的是 unittest 框架,只支持2种格式的用例: YAML/JSON
上海-悠悠
2021/06/24
1.2K0
httprunner 3.x学习1 - 环境安装与准备
tep集成HttpRunner与Flask实现开箱即用
趁着元旦假期最后一天,有着大把时间,奔着把tep做大做强的目标,好好学习了一波。在开始正文之前,先回答可能会问到的两个问题。第一个问题是为什么要集成HttpRunner?因为我最近在思考如何给tep做分层设计,参考了我司现有的接口自动化平台,它的设计是每个用例有很多测试步骤,可以针对用例设置预设变量,然后在测试步骤中引用。正当我准备自己开发类似功能时,想到了HttpRunner,我记得HttpRunner第3版是建议直接编写pytest代码而非以前的ymal或json文件了。大有所获,HttpRunner正是以这种方式编写的代码,而且和pytest有很好的结合,很符合tep要集成的第三方包的希望。第二个问题是为什么要集成Flask?刚开始只是我用来调试代码的,等到把Mock写完以后,想到可能大家也需要调试代码,就把它做到tep里面了,并且附带了测试用例的示例代码,安装完以后就能一键运行,开箱即用,美滋滋。归根结底,都是为了把tep做大做强。
dongfanger
2022/01/05
6340
httprunner 3.x学习19 - 从返回头部headers取值
httprunner 3.x 取值是用 jmespath 表达式,当从头部取值Content-Type时,有特殊字符 -,会报错 jmespath.exceptions.LexerError: Bad jmespath expression: Unknown token ‘-‘: headers.Content-Type
上海-悠悠
2021/08/20
1K0
浅谈pytest+HttpRunner如何展开接口测试
根据wiki中的定义,接口是一个共享的边界,计算机系统的多个独立组件通过它交换信息。这些信息的交换可以基于软件、硬件、外部设备、人和它们之间的组合。根据上述定义,可以面向软件、硬件、交互设备等展开接口测试。软件的接口测试是面向独立组件之间接口的一种测试,主要用于检测内外部系统及内部各子系统之间的交互点。测试的重点在于检查逻辑正确性、交互依赖性、数据正确性。
袋鼠云数栈
2021/12/07
1.5K0
浅谈pytest+HttpRunner如何展开接口测试
httprunner(4)录制生成测试用例[通俗易懂]
写用例之前,我们应该熟悉API的详细信息。建议使用抓包工具Charles或AnyProxy进行抓包。
全栈程序员站长
2022/09/16
6980
httprunner 2.x学习4-测试用例分层
httprunner 2.x版本最大的改进就是分层机制了,1.x的版本是线性设计的,每个用例都是独立的。 一个用例里面涉及到流程性的,我们测试修改个人信息是否修改成功,在yaml文件里面需写3个步骤:登录-修改个人信息-查询个人信息。 这样3个测试步骤,每个测试步骤写的test下。但是下个测试用例,重新写个yaml文件也需要遇到登录的话,这样登录的步骤就会重复去写,所以维护起来不方便。 httprunner 2.x版本开始引入分层机制,可以定义公共的方法,在用例里面直接引入步骤,这样登录方法我们只需写一次
上海-悠悠
2020/06/17
8500
相关推荐
httprunner 3.x学习10 - parameters 参数化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验