HttpRunner自动化工具之实现参数化传递

news2024/11/15 8:23:51

参数化实现及重复执行

   参数化测试:在接口测试中,为了实现不同组数据对同一个功能模块进行测试,需要准备多组测试数据对模块进行测试的过程。

在httprunner中可以通过如下方式实现参数化:

1、在YAML/JSON 中直接指定参数列表

2、调用debugtalk.py 中自定义的函数生成参数列表

3、通过内置的函数引用CSV 文件

4、通过debugtalk.py调用faker库、pymysql库实现参数化

从httprunner2.0开始,参数化必须在 testsuites 层进行实现;实现参数化的关键字为 variables、parameters


参数化实现:

方式一 :使用 variables 关键字实现参数化传递

通过testsuite层下testcases中的variables传递参数,如下图的search_word参数,可以传递至testcases层或api层相对应的$search_word中

通过 variables 关键字 再做个变量传递参数;套件层 传给 用例层 再传给 api层 (但每次只能传递一个参数

 testsuites层,必须在套件层使用 variables 做参数化,如下图:

 testcases层,如下图:

 api层:

 方式二:使用 parameters 关键字实现参数化传递

通过testsuite下testcases中的parameters传递参数,如下图的search_word参数,可以传递至testcases层或api层相对应的$search_word中

通过 parameters关键字 再做个变量传递参数;套件层 传给 用例层 再传给 api层 (每次可传递多个参数,参数以列表展示)

只传递参数举例:

testsuites层:

 testcases层,如下图:

 api层:

执行套件层接口后,会把变量的多个参数,全部执行完成,如下图:

注:上述举例只是针对参数传递,但是没办法做每个参数的断言操作;可参考下方的举例

同时传递参数和预期结果 举例:

通过 parameters 一次传递一组参数,如下图的search_word-result参数,使用 - 分隔成了两个参数,分别为$search_word和$result (使用列表嵌套传输)

testsuites层:

testcases层:

api层:

方式三:调用 debugtalk.py 中 自定义的函数实现参数化传递

调用 debugtalk.py 中自定义的函数生成参数列表同样,也可以进行多组参数传递;

debugtalk.py文件中的代码示例:

# 参数化
def search_key():
    # return ["猫","狗","大象"]
    return [["猫","猫_百度搜索"],["狗","狗_百度搜索"],["大象","大象_百度搜索"]]

testsuites层:

testcases层:

api层:

 由于debugtalk.py可以采用python代码的形式组织参数,故可以实现各种随机参数,如:随机整数、随机字符串,随机手机号等,只要最终函数返回的数据类型能兼容即可。

 随机整数、随机字符串、随机手机号 代码示例:

import random
# 随机整数
def get_random_param(min,max,count=3):
    random_list = []
    for i in range(count):
        random_list.append(random.randint(min,max))
    return random_list

# 随机字符串
def get_random_string(base_str,str_len,count=3):
    random_list = []
    for i in range(count):
        str = ''
        for j in range(0,str_len):
            str = str+base_str[random.randint(0,len(base_str)-1)]
        random_list.append(str)
    return random_list

# 随机手机号
def get_random_phone(*mobile_num,count=2):
    phone_list = []
    for i in range(0,count):
        str_start = random.choice(mobile_num)
        str_end = ''.join(random.sample('0123456789',8))
        str_phone = str(str_start) + str_end
        phone_list.append(str_phone)
    return phone_list

 方式四:通过内置的函数引用CSV 文件实现参数化

第一步:在项目的根路径下新建data文件夹,在该文件夹中新建csv文件,文件中填写对应的数据,可以有多列,需要使用英文逗号隔开。文件的第一行为参数名称,第二行才是数据的开始

 第二步:在testsuite下testcases中通过调用内置的parameterize(可简写为P)函数引用CSV 文件,如果要引用多个变量,需要用‘-’连接

testsuites层:

 testcases层:

 api层:


方法五:通过debugtalk.py调用faker库,实现参数化

faker库主要用来创建伪数据,使用faker包,无需再手动生成或者手写随机数来生成数据,只需要调用faker提供的方法,即可完成数据的生成。

faker库相关使用可查看:转载至 作者蓝寅  https://www.cnblogs.com/dream66/p/13233797.html

1,首先下载faker库 

 2,在debugtalk.py中编写代码

代码示例:

from faker import Faker
# 随机姓名
def get_random_name(count=5):
    f = Faker(locale='zh_CN')
    name_list = []
    for i in range(0,count):
        name_list.append(f.name())
    return name_list

3,再通过在yaml文件中调用该函数  ${函数()};

testsuites层:

testcases层:

api层:

方法六:通过debugtalk.py调用 pymysql库 实现参数化

 利用pymysql库链接并获取mysql数据的方式

前置条件:

mysql数据库中的数据:

在debugtalk.py中编写 链接mysql数据库的函数

代码示例:

import pymysql


def get_mysql_data(case_name):
    # 创建mysql数据库链接
    db = pymysql.Connect(host='192.168.1.3',port=3306,user='root',
                    password='root',db='test',charset="utf8")
    # 创建游标对象,查询数据默认是元组
    cursor = db.cursor()
    # 创建游标对象,查询数据默认是元组,此处设置字典类型
    # cursor = db.cursor(cursor=pymysql.cursors.DictCursor)

    # 编写 sql 语句
    sql = 'select test_data,result FROM test_case_data where case_name like "{}_%";'.format(case_name)
    # 执行sql 语句,并返回行数
    cursor.execute(sql)

    # cursor.fetchone()  # 一行
    case_data = cursor.fetchall()  # 所有数据
    # 关闭游标
    cursor.close()
    # 关闭数据库链接
    db.close()
    # 由于返回的数据是元组,所以需要把元组做成List类型
    list_case_data = list(case_data)
    for i in range(len(list_case_data)):
        list_case_data[i] = list(list_case_data[i])
    return list_case_data

在套件层中引用上述的函数

testsuites层:

testcases层:

api层:

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!

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

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

相关文章

用Apache Echarts展示数据

目录 1.后端代码 1.1 实体类: 1.2 SQL语句: 2.前端代码 2.1 安装 Apach Echarts安装包: 2.2 查找数据并赋值给Echarts 思路:后端查到数据,包装为map,map里有日期和每日就诊人数,返回给前端…

[操作系统] 进程的详细认识----从概念到调度

目录 前言 一.进程的概念 二.进程和程序之间的关系 2.1二者的关系 2.2资源的占用 三.进程的任务 四.进程的管理 五.PCB中的信息 5.1pid进程标识 5.2内存指针 5.3文件描述符表 六.进程的调度 6.1CPU的简单认识 6.2调度的方式 6.3PCB中调度相关属性 七.进程的…

【计算机网络】网络层协议 -- IP协议

文章目录 1. 网络层做了什么事2. IP协议的简介3. IP协议格式4. 分片与组装5. 网段划分6. 特殊的IP地址7. IP地址的数量限制8. 私网IP地址和公网IP地址9. 路由 1. 网络层做了什么事 保证数据可靠地从一台主机到另一台主机 当双方在进行基于TCP的网络通信时,要保证将数…

redis高级篇2 springboot+redis+bloomfilter实现过滤案例

一 bloomfilter的作用 1.1 作用 Bloomfilter:默认是有0组成bit数组和hash函数构成的数据结构,用来判断在海量数据中是否存在某个元素。 应用案例:解决缓存穿透。Bloomfilter放在redis前面,如果查询bf中没有则直接返回&#xff0…

opencv中轮廓相关属性

一、介绍 findContours() :The function retrieves contours from the binary image。 二、代码 void main() {Mat src imread("match00.bmp", IMREAD_GRAYSCALE);Mat mask;threshold(src, mask, 128, 255, cv::THRESH_BINARY_INV);Mat element cv::g…

tcl学习之路(一)(Vivado与Tcl)

学习第一步:安装tcl编译软件 点击这里进入activestate的官网,下载你喜欢的操作系统所需的安装包。这里我下载的是windows下的安装包。一步一步安装即可。   那么,安装后,我们可以在开始的菜单栏处看到三个应用程序。      …

Python爬取微博相册, 批量下载

xpath插件解析到所有图片的url地址 xpath下载地址: https://www.crxsoso.com/webstore/detail/hgimnogjllphhhkhlmebbmlgjoejdpjl 快捷键: CtrlShiftX 不会xpath语法可以看这里: https://www.w3school.com.cn/xpath/xpath_syntax.asp //div[class"woo-box-item-inlineBl…

P1090 [NOIP2004 提高组] 合并果子

题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出&#xff0…

图解TCP 三次握手和四次挥手的高频面试题(2023最新版)

大家好,最近重新整理了一版 TCP 三次握手和四次挥手的面试题(2023最新版)。 ----- 任 TCP 虐我千百遍,我仍待 TCP 如初恋。 巨巨巨巨长的提纲,发车!发车! img TCP 基本认识 TCP 头格式有哪些…

[VRTK4.0]获取指针,并提供有效无效位置

学习目标: 演示如何将场景中的游戏对象设置为弯曲指针的无效目标。 流程: 紧接上篇,我们已经创建了一个曲线,并且使用 OpenXR 指针姿势来确保指针方向始终与 OpenXR 控制器的正确方向匹配。 接下来我们要实现如何将场景中的游戏对…

web-6-深入理解JSP:探索其核心概念和特性

JSP 今日目标: 理解 JSP 及 JSP 原理 能在 JSP中使用 EL表达式 和 JSTL标签 1,JSP 概述 JSP(全称:Java Server Pages):Java 服务端页面。是一种动态的网页技术,其中既可以定义 HTML、JS、CSS…

计算机视觉:卷积层的参数量是多少?

本文重点 卷积核的参数量是卷积神经网络中一个重要的概念,它决定了网络的复杂度和计算量。在深度学习中,卷积操作是一种常用的操作,用于提取图像、语音等数据中的特征。卷积神经网络的优势点在于稀疏连接和权值共享,这使得卷积核的参数相较于传统的神经网络要少很多。 举例…

leetcode每日一题Day2——344. 反转字符串

✨博主:命运之光 🦄专栏:算法修炼之练气篇(C\C版) 🍓专栏:算法修炼之筑基篇(C\C版) 🐳专栏:算法修炼之练气篇(Python版) …

WEB:mfw

背景知识 Git泄露 Githack使用 命令执行漏洞 题目 这里页面里有Git,猜测是Git泄露 先用dirsearch扫一下 确实存在.git目录,可以尝试访问一下 使用Githack来下载并恢复.git文件 这里记得使用的时候关闭杀毒软件 结果会自动保存 点进去先看一下flag这个…

Flyway——修改表名称与序列名称

文章目录 前言脚本修改表名称修改序列 前言 开发中一次偶然的机会,Oracle 12c 更换为 11g ,需要对表名称的长度和序列长度做限制要求。 11g相对12c而言,表名称与序列名称的长度,不能超过30个字符。 在开发中做了更改,…

fixed-视频倍速

首先fn12打开开发者模式 然后进入console控制台 document.getElementsByTagName(“video”)[0].playbackRate 3 数字3 就是多少倍速 可以替换想要的倍速 直接快进到 最后 let video document.getElementsByTagName(‘video’) for (let i0; i<video.length; i) { video[…

Linux虚拟机安装tomcat(图文详解)

目录 第一章、xshell工具和xftp的使用1.1&#xff09;xshell下载与安装1.2&#xff09;xshell连接1.3&#xff09;xftp下载安装和连接 第二章、安装tomcat1.1&#xff09;关闭防火墙&#xff0c;传输tomcat压缩包到Linux虚拟机12&#xff09;启动tomcat 第一章、xshell工具和xf…

韦东山Linux驱动入门实验班(5)LED驱动---驱动分层和分离,平台总线模型

前言 &#xff08;1&#xff09;前面已经已经详细介绍了LED驱动如何进行编写的代码。如果韦东山Linux驱动入门实验班&#xff08;4&#xff09;LED驱动已经看懂了&#xff0c;驱动入门实验班后面的那些模块实验&#xff0c;其实和单片机操作差不太多了。我就不再浪费时间进行讲…

Netty各组件基本用法、入站和出站详情、群聊系统的实现、粘包和拆包

Netty Bootstrap和ServerBootstrapFuture和ChannelFutureChannelSelectorNioEventLoop和NioEventLoopGroupByteBuf示例代码 Channel相关组件入站详情出站详情对象编解码ProtoBuf和ProtoStuffnetty实现群聊系统粘包和拆包TCP协议特点举个例子 Bootstrap和ServerBootstrap Boots…

【管理设计篇】聊聊分布式配置中心

为什么需要配置中心 对于一个软件系统来说&#xff0c;除了数据、代码&#xff0c;还有就是软件配置&#xff0c;比如操作系统、数据库配置、服务配置 端口 ip 、邮箱配置、中间件软件配置、启动参数配置等。如果说是一个小型项目的话&#xff0c;可以使用Spring Boot yml文件…