Django实现接口自动化平台(六)httprunner(2.x)基本使用【持续更新中】

news2024/11/23 15:29:24

上一章:

Django实现接口自动化平台(五)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/628443.html

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

相关文章

一键生成代码

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

(五)CSharp-进一步理解接口

一、什么是接口 接口是指定一组函数成员而不实现它们的引用类型。 实现接口: 只能由类和结构来实现接口。 二、声明接口 接口声明不能包含以下成员: 数据成员静态成员 接口声明只能包含如下类型的非静态成员函数的声明: 方法属性事件索…

25张python代码速查表,让你python能力突飞猛进的秘诀!

在学习函数时,总是会有很多东西学得很快,遗忘得也很快。但其实在学习中,只需要知道相关参数,加以调整就够了。所以你可能需要这本秘籍! 即整理了Python科学速查表,就可以帮你解决以上的问题。当你在练习的时…

怎样正确做 Web 应用的压力测试?字节8年测试5个步骤给我看师了

Web应用,通俗来讲就是一个网站,主要依托于浏览器来访问其功能。 那怎么正确做网站的压力测试呢? 提到压力测试,我们想到的是服务端压力测试,其实这是片面的,完整的压力测试包含服务端压力测试和前端压力测…

高可用系统架构总结

文章目录 系统设计的一些原则海恩法则墨菲定律 软件架构中的高可用设计什么是高可用故障的度量与考核解决高可用问题具体方案 集群化部署负载均衡负载均衡实现内部服务外部服务数据库 负载均衡算法round-robinip_hashhash key 失败重试健康检查TCPHTTP 隔离线程隔离进程隔离集群…

华秋观察 | 通讯产品 PCB 面临的挑战,一文告诉你

印制电路板是电子产品的关键电子互联件,被誉为“电子产品之母”。随着电子产品相关技术应用更快发展、迭代、融合,PCB作为承载电子元器件并连接电路的桥梁,为满足电子信息领域的新技术、新应用的需求,行业将迎来巨大的挑战和发展机…

rocky9脚本py格式

在linux7上编写/root/CreateFile.py的python3脚本,创建20个文件/root/test/File01至/root/test/File20,如果文件存在,则先删除再创建;每个文件的内容同文件名,如File01文件的内容为”File01” 先在root目录下建立所需…

使用单片机遇到的几个问题及解决方案1

1.为什么我跟着视频学习的过程中,我没有找到“端口"的选项呢?我甚至没有出现“其他插口”。 想要找到设备管理器最快的方法就是: 首先如果把输入法调为大写形式,然后按下“WINX”,再按“M”就会出现一个设备管理…

python制作炸弹人游戏,一起来爆破消灭敌人吧

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 《炸弹人》是HUDSON出品的一款ACT类型游戏,经典的第一作登陆在FC版本,游戏于1983年发行。 游戏具体操作是一个机器人放置炸弹来炸死敌人,但也可以炸死自己,还有些增强威力…

K8S之服务Service(十三)

1、Service概念: Kubernetes中的 Pod是有生命周期的,它们可以被创建,也可以被销毁,然而一旦被销毁pod生命就永远结束,这个pod就不存在了,通过ReplicaSets能够动态地创建和销毁Pod(例如&#xff…

【计算思维题】少儿编程 蓝桥杯青少组计算思维 数学逻辑思维真题详细解析第8套

少儿编程 蓝桥杯青少组计算思维题真题及解析第8套 1、下列哪个选项填到填到下图空缺处最合适 A、 B、 C、 D、 答案:D 考点分析:主要考查小朋友们的观察能力,从给定的图中可以看到,图中的线条都是有实现和虚

【C++ 学习 ⑨】- 万字详解 string 类(上)

目录 一、为什么学习 string 类? 二、标准库中的 string 类 三、C STL容器是什么? 四、string 类的成员函数 4.1 - 构造函数 4.2 - 赋值运算符重载 4.3 - 容量操作 4.4 - 遍历及访问操作 4.4.1 - operator[] 和 at 4.4.2 - 迭代器 4.5 - 修改…

Node.js 使用踩坑

重装电脑后,重装node.js 出现一个问题: npm install 会报错 按提示操作后 而npm run serve 会报xlsx和echart的错误,提示引用不对之类的,但是公司项目固定的,不可以随便改,而且之前是没问题的。 此时需要找…

华为OD机试真题B卷 Java 实现【数组拼接】,附详细解题思路

一、题目描述 现在有多组整数数组,需要将它们合并成一个新的数组。 合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉,如果该行不足固定长度或者已经为空,则直接取出剩余部分的内…

Anaconda教程,Python版本控制

Anaconda教程,Python版本控制 文章目录 Anaconda教程,Python版本控制1:Anaconda安装1.1:Windows1.2:Linux1.3:MacOS 2:Anaconda使用2.1:创建一个新的环境2.2:安装 Python 包2.3:激活…

hash模式下路由跳转页面不刷新

mode为hash时,纯粹页面,路由跳转过之后跳转上一级重复路由页面不会重新渲染 举个例子:当我在注册页面->注册状态页面->注册页面,在这个期间我从注册状态页面进行缓存的数据想要在注册页面使用,然而注册页面不会…

【YOLO系列】YOLO v5(网络结构图+代码)

文章目录 推理转换onnx网络架构SPP VS SPPFAutoAnchorLoss 参考 【YOLO系列】YOLO v3(网络结构图代码) 【YOLO 系列】YOLO v4-v5先验知识 【YOLO系列】YOLO v4(网络结构图代码) 我是在自己笔记本上配置的YOLO v5环境。首先&#x…

饼状图使用属性时,使用驼峰命名法

饼状图是使用D3.js等JavaScript库来绘制的,而JavaScript中的属性名通常采用驼峰式命名法,即第一个单词的首字母小写,后面单词的首字母大写,例如fontSize、fontWeight等。而CSS中的属性名采用连字符命名法,即单词之间用…

Top 5 Best Open Source Projects on GitHub 2023

这里介绍Github上 5 个增长最快的开源项目,它们为原有的解决方案提供了更加具有成本效益的替代方案,并为开发者、数据分析师和企业提供了高可用的工具产品。利用开源的优势,这5个项目拓展了强大而有效的解决方案,是值得收藏、分享…

比ureport好用的报表系统-VeryReport报表系统

随着数据时代的到来,数据成为企业管理和决策的重要依据。然而,在处理海量数据的同时,如何快速准确地生成各种形式的报表却成为了一个痛点。手工制作报表费时费力、容易出错;而传统的报表工具又复杂难用,无法满足不同用…