httprunner 2.x的基本使用(二)

news2024/12/24 2:38:22

上一章:

httprunner 2.x介绍与使用_做测试的喵酱的博客-CSDN博客

下一章:

一、 api 文件夹(没有任何数据依赖的场景)

api 文件夹:执行接口case的最小单元。如果一个接口case,没有任何数据依赖,就可以直接在api文件夹中,完成编写。

如不依赖登录信息的接口:

api/baidu_api.yml

name: 百度接口
variables:
    var1: value1
    var2: value2
request:
    url: https://ug.baidu.com/mcp/pc/pcsearch
    method: POST
    headers:
        Content-Type: "application/json"
    json:
        invoke_info: {"pos_1":[{}],"pos_2":[{}],"pos_3":[{}]}
validate:
    - eq: ["status_code", 200]

 执行case:

hrun api/baidu_api.yml --report-dir=reports

二、 实现数据/接口依赖的case场景(testcases 文件夹)

2.1 举例

查看商品列表接口 goods/list ,依赖登录接口/user/login/ 

需要先通过/user/login/  获取登录信息token

再拿着token,去请求goods/list接口。

2.1.1 在api文件夹中,编写/goods/list 接口 ,/user/login/  的基础信息。

/user/login/  登录接口信息:/api/login_api.yml

name: '登录api接口'

base_url: "${ENV(BASE_URL)}"
request:
    url: "/user/login/"
    method: POST

    headers:
        Content-Type: "application/x-www-form-urlencoded"
        User-Agent: "Mozilla/5.0"

    data:
        username: "$username"
        password: "$password"

    verify: false

validate:
    - eq: ["status_code", 200]

 

/goods/list 接口信息:/api/goods_list_api.yml

name: "获取项目列表数据"
base_url: "${ENV(BASE_URL)}"

request:
    url: "/projects/"
    method: GET
    headers:
        Accept: "application/json"
        Authorization: "JWT $TOKEN"
    params:
        size: 3
        page: 2

validate:
    - eq: ["status_code", 200]
    - eq: ["json.results.0.id", 3]

注意:

获取商品列表接口/goods/list,需要依赖token,我们在header中,编写token时,直接使用变量的形式 $TOKEN 就可以了。(在后续步骤中,我们需要提供一个名称为TOKEN的变量)

2.1.2 在testcases文件夹中,组装/goods/list用例

/testcases/goods_list_testcase.yml

# 指定用例的全局配置信息
config:
    name: "获取商品列表数据接口测试"

teststeps:
-
    name: "先登录"
    # 指定导入api文件夹下的接口的api最小执行单元
    api: "/api/login_api.yml"
    # 从相应结果中提取数据,并设置变量
    # 设置的变量,可以在当前yaml用例文件下方任意地方调用
    extract:
        - TOKEN: "content.token"

-
    name: "获取项目列表数据接口"
    api: "/api/goods_list_api.yml"

1、config 设置全局配置信息

2、teststeps 模块下,开始组装用例

3、第一步,先登录,调用执行登录接口/api/login_api.yml,然后将返回值token设置为变量

extract:
        - TOKEN: "content.token"

3、第二步,调用获取商品接口。(不需要手动传token变量)

三、自定义函数&动态参数

整体步骤:

1、在debugtalk.py 中,自定义函数

2、在yaml文件中,调用自定义函数

3.1 、在debugtalk.py 中,自定义函数

举个例子,定义两个函数,一个是生成随机数,一个是求和。


import time
import random


def sleep(n_secs):
    time.sleep(n_secs)
def get_random_num():
    return random.randint(1,1000)

def get_sum(x,y):
    return x+y

3.2 在yaml文件中,调用自定义函数

在yaml文件中,调用自定义函数,使用${方法名称()}

支持传参,参数也可以是变量

    json:
        id: "${get_random_num()}"
        total: "${get_sum(1,$price)}"

四、定义测试套件testsuites

测试套件testsuites的主要作用就是:

  • 1、批量执行case
  • 2、用不同的变量数据,组成不同的case

我们可以将api、testcases中的所有的动态数据,以变量表示。然后在testsuites中,写入不同的变量,组成不同的case。

4.1 testsuites 中直接写入不同的变量,组成多个case

一个接口,根据不同的传参,组成不同的case。

举例:

登录接口,

testsuites/login_testsuite.yml

# 指定测试套件中的全局配置信息
config:
    name: "测试条件"

# 指定套件中的用例
testcases:
-
    name: "登录接口测试"
    testcase: "testcases/login_testcase.yml"
    parameters:
    - title-username-password-status_code-msg:
      - ["正常登录", "miaojiang", "123456", 200, "token"]
      - ["用户名为空", "", "123456", 400, "username"]
      - ["密码为空", "miaojiang", "", 400, "password"]
      - ["密码不正确", "miaojiang", "1234567", 400, "non_field_errors"]

config:测试套件的全局配置

testcases: 指定调用的登录接口case

parameters: 变量模块,以下是整个接口case,所有需要的变量的输入值

- title-username-password-status_code-msg: 整个接口中,(api、testcases中)所有涉及到的变量名称,将这些变量列出来,然后在-[]中,将变量的值一一对应。如下,就是登录接口的四条case。

    - title-username-password-status_code-msg:
      - ["正常登录", "miaojiang", "123456", 200, "token"]
      - ["用户名为空", "", "123456", 400, "username"]
      - ["密码为空", "miaojiang", "", 400, "password"]
      - ["密码不正确", "miaojiang", "1234567", 400, "non_field_errors"]

4.2 用csv文件存储一个接口所有case所需要的变量的值

在4.1 中,数据驱动,直接将数据写在了testsuites文件中。如果数据过多的话,会显得比较乱,我们可以将数据存储到csv文件中。

1、定义一个csv文件,存仓case数据

data/data.csv

title,username,password,status_code,msg
正常登录,miaojiang,123456,200,token
密码错误,miaojiang,123457,400,non_field_errors
账号错误,miaojiang,123456,400,non_field_errors
用户名为空,,123456,400,username
密码为空,miaojiang,,400,password

注意:

第一行,是所有涉及到的变量的名称,以逗号隔开。

2、在testsuites/login_testsuite.yml 中,引入csv文件

# 指定测试套件中的全局配置信息
config:
    name: "测试条件"

# 指定套件中的用例
testcases:
-
    name: "登录接口测试"
    testcase: "testcases/login_testcase.yml"
    parameters:
        - title-username-password-status_code-msg: ${P(data/data.csv)}

注意:

1、parameters下,设置接口所有case需要的数据

2、 title-username-password-status_code-msg,是所有涉及到的变量的名称,以-分割

3、${P()} 固定格式,读取某个文件

${P(data/data.csv)}

文件路径,为相对路径,或者绝对路径

4.3 函数方法的返回值为接口所有case需要的数据

1、在debugtalk.py中,定义一个方法,返回case所有需要的数据(为一个list),

def get_accounts():
    accounts = [
        {"title": "正常登录", "username": "miaojiang", "password": "123456",
            "status_code": 200, "msg": "token"},
        {"title": "密码错误", "username": "miaojiang", "password": "123457",
            "status_code": 400, "msg": "non_field_errors"},
        {"title": "账号错误", "username": "miaojiang", "password": "123456",
            "status_code": 400, "msg": "non_field_errors"},
        {"title": "用户名为空", "username": "", "password": "123456",
            "status_code": 400, "msg": "username"},
        {"title": "密码为空", "username": "miaojiang", "password": "",
            "status_code": 400, "msg": "password"},
    ]
    return accounts

注意:

  • 1、函数返回值,整体为一个list
  • 2、list中,每一个元素,是一个字典。每一个元素/字典,就对应一条case
  • 3、字典中,key为变量的名称,value为变量的值。

2、在testsuites/login_testsuite.yml 中,调用方法

# 指定测试套件中的全局配置信息
config:
    name: "测试条件"

# 指定套件中的用例
testcases:
-
    name: "登录接口测试"
    testcase: "testcases/login_testcase.yml"
    parameters:
        - title-username-password-status_code-msg: ${get_accounts()}

注意:

  • ${函数名称()}

五、运行测试套testsuites

格式:

hrun 测试套文件相对路径/绝对路径

举例:

hrun testsuites/login_testsuite.yml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/628405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟ECU实践:汽车发动机控制器仿真

虚拟化技术使得在Windows PC上对汽车ECU(Electronic Control Unit,电子控制器单元)进行闭环仿真成为可能,能有效改善ECU开发过程。一些开发任务得以从道路、测试平台和HIL(Hardware in the Loop,硬件在环&a…

Python入门教程+项目实战-13.3节-集合的快速查找

目录 13.3.1 键的输出顺序 13.4.2 键的数据类型 13.4.3 集合的快速查找 13.4.4 知识要点 13.4.5 系统学习python 13.3.1 键的输出顺序 集合类型的底层实现基于哈希表,键的输出顺序取决于键在哈希表中的存储顺序。 对哈希表结构不是很熟悉的同学,可…

【DBA生存之四大守则---读书笔记】

👈【上一篇】 💖The Begin💖点点关注,收藏不迷路💖 【下一篇】👉 🔻《Oracle 数据库性能优化》一书的序言中提到: 兴趣勤奋坚持方法成功 很遗憾我不能给以上公式画上“”,但是无…

Coggle 30 Days of ML 打卡任务一

Coggle 30 Days of ML 打卡任务一 任务一:两个赛题数据可视化 难度/分值:低/1 打卡内容: 参赛选手名称:AppleDoctor完成日期:2023.6.6任务完成情况: 使用的编程语言:Python实现的功能&#…

八大排序算法

八大排序算法 是指常用的八种排序算法,它们包括: 冒泡排序(Bubble Sort):通过不断交换相邻元素的位置,将最大(或最小)的元素逐渐"冒泡"到最后(或最前&#xf…

【技术分享】华为防火墙双机热备

组网需求 如图所示,两台FW旁挂在数据中心的核心交换机侧,保证数据中心网络安全。通过核心交换机的流量都会被引流到旁挂的FW上进行安全检测,引流的方式为静态路由方式。企业希望两台FW以主备备份方式工作。正常情况下,流量通过FW_…

android 如何分析应用的内存(五)

android 如何分析应用的内存(五) 接上文 lldb的工具篇的GUI部分。分成两部分: vscode 的LLDBas的LLDB 接下来是as的LLDB as的LLDB 为了进行LLDB的调试,需要对as进行配置,事实上,每一个在AS中编辑的应…

充电桩检测仪表TK4860E交流充电桩检定装置

波形失真度测量:具备电压电流波形失真度测量功能。 时钟校验功能:实时时钟显示,可完成充电桩的时钟时刻误差测试。 温湿度测量(选配件):可选配蓝牙温湿度计,通过蓝牙连接平板电脑,…

properties、yaml作为配置文件的特点

说明:在软件开发中,经常需要把一些配置写在文件中,如数据库配置、MyBatis配置等。这样,后续如果数据库参数有改动,就可以避免直接对代码做修改,只要修改配置文件中关于数据库的配置。关于配置文件的选择&am…

数据分析师,如何写好分析报告来体现数据价值

对数据敏感 数据分析,从名字中就能看出来,数据是数据分析师实际工作中的核心。 对数据敏感是对数据分析师的要求,也是数据分析师在日常工作中培养出来的独特技能,相对于其他岗位的员工,他们会更容易眼发现数据信息中…

SPC Control Chart Tools for .Net Crack

.Net 的 SPC 控制图工具 版本 3.1 具有集成表格支持、频率直方图、Cpk 和 Ppk 统计和缩放功能的 X-Bar R Chart 添加变量控制图(X-Bar R、X-Bar Sigma、Individual Range、Median Range、EWMA、MA、MAMR、MAMS 和 CuSum 图)、属性控制图(p-…

【第三章:链路层】

目录 知识框架No.0 引言No.1 功能零、基本功能概念一、封装成帧1、字符计数法2、字符填充法3、零比特填充法4、违规编码法 二、透明传输三、差错控制1、位错1.1、奇偶校验码1.2、循环冗余码CRC2、帧错2.1、海明码 四、流量控制1、停止-等待协议2、滑动窗口协议2.1、后退N帧协议…

Mybatis 学习笔记总结

1.概念 2.开发环境搭建 2.1 开发环境 2.2 创建Maven工程 <!--junit测试--><dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope>&l…

【P56】JMeter 响应时间图(Response Time Graph)

文章目录 一、响应时间图&#xff08;Response Time Graph&#xff09;参数说明二、准备工作三、测试计划设计 一、响应时间图&#xff08;Response Time Graph&#xff09;参数说明 可以以图形的方式查看和分析各事务和取样器的响应时间 使用场景&#xff1a;用于评估测试结…

ASEMI代理英飞凌TLE4250-2G汽车级线性稳压器

编辑-Z TLE4250-2G参数描述&#xff1a; 型号&#xff1a;TLE4250-2G 输入电压VI&#xff1a;45V 输出电压VQ&#xff1a;40V 结点温度Tj&#xff1a;-40~ 150℃ 储存温度Tstg&#xff1a;-50~150℃ 输出电容器要求CQ&#xff1a;1F 连接到焊接点RthJSP&#xff1a;30K…

简单使用feign

feign是一款非常好用的&#xff0c;能直接把我们省去端口号的编写&#xff0c; 下面直接开始&#xff0c;需要有一定的SpringCloud的基础&#xff0c;不然可能看不明白&#xff0c;我这里很多都是关键步骤。敬请原谅。 首先我们需要引入feign的依赖 <!-- 引入openfiegn-->…

开发技术-使用 JDB 调试

Java 调试器&#xff08;JDB&#xff09;是 JDK 内置的命令行工具。从调试的指令和命令行接口两方面看的话&#xff0c;JDB 至少从概念上是 GNU 调试器&#xff08;GDB&#xff0c;受 Unix DB 的影响&#xff09;的继承者。 示例&#xff1a; public class SimpleDebugging {p…

C++ String类(上篇)

绪论 放弃时间的人&#xff0c;时间也会放弃他。——莎士比亚 &#xff1b; 本篇章是关于string类内一些函数的介绍以及使用方法&#xff0c;都是我们编程必须掌握的基础&#xff01; ​ 全文共7000字左右. 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&…

点亮创意灯,用Firefly Beta绘制生动有趣的成语故事!

1、打开链接&#xff1a; Adobe Firefly 2、点击generate按钮。 3、输入需要生成的成语描述&#xff0c;英文的。 比如我们要画守株待兔&#xff1a; An ancient Chinese farmer, lying under a big tree, waiting for a rabbit to run over 4、点击fresh按钮。 5、下载其…

(MIT6.045)自动机、可计算性和复杂性-图灵机

有穷自动机(FA)对有限存储量设备是比较好的模型&#xff0c;下推自动机对无限存储设备是较好的模型&#xff08;但是其存储只能用后进先出的栈模式来使用。&#xff09;这两个模型过于局限&#xff0c;不能作为通用模型。 图灵机 和FA相似&#xff0c;但是图灵机有无限的存储…