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

参数化实现及重复执行

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

在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_endphone_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 pymysqldef 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.mzph.cn/news/193653.shtml

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

相关文章

【STM32】STM32学习笔记-STM32简介(02)

00. 目录 文章目录 00. 目录01. STM32简介1.1 STM32是什么1.2 STM32应用领域1.3 STM32命名规则1.4 STM32选型 02. ARM简介2.1 ARM是什么2.2 ARM系列 03. STM32开发板3.1 MCU简介3.2 STM32开发板3.3 STM32硬件资源 04. STM32系统架构05. STM32引脚定义06. STM32启动配置07. STM3…

深入探讨Java设计模式:构建灵活而可维护的代码

深入探讨Java设计模式:构建灵活而可维护的代码 设计模式是在软件设计中,经过反复验证,以解决特定问题的最佳实践的经验总结。在Java中,设计模式是一种强大的工具,用于构建可扩展、灵活且易于维护的代码。本文将深入讨…

构建第一个ArkTS应用(纯HarmonyOS应用)

1. 安装开发工具 在华为开发者官方上下载HarmonyOS应用专用的开发工具,链接地址:HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 要想使用开发工具让项目跑起来,需要10G的磁盘空间。开发工具需要的磁盘空间为2.36G;SDK需…

WT2003H语音芯片系列:通过bin文件实现板载语音更新,支持宽范围音频码率

随着科技的飞速发展,语音芯片已经成为了许多电子产品不可或缺的一部分。在这个领域中,WT2003H语音芯片系列以其卓越的性能和灵活的功能而备受瞩目。这一系列芯片具备一种独特的功能,即可以通过bin文件在板更新语音,同时音频码率支…

深度学习记录--logistic回归函数的计算图

计算图用于logistic回归函数 先回顾一下单一样本的logistic回归损失函数的公式,公式如下: 将logistic函数用计算图表示出来(以两个基础量为例),计算图如下: 前向传播已经完成,接下来完成后向传播 运用链式法则依次求…

The Big IAM Challenge 云安全 CTF 挑战赛

The Big IAM Challenge 云安全 CTF 挑战赛 今天,我们来做一下有关于云安全 的CTF 挑战赛 The Big IAM Challenge,旨在让白帽子识别和利用 IAM错误配置,并从现实场景中学习,从而更好的认识和了解IAM相关的风险。比赛包括6个场景,每…

LeetCode 232.用栈实现队列

题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回…

智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC

@[toc] 智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者…

别再争国漫一哥了,真正的王者回来了!

相信很多漫迷都知道,《斗罗大陆》动画在播出的五年期间一直稳稳占领国漫各榜单第一的位置。现在它已经完结了大半年,尽管《斗破苍穹》《完美世界》等动画都在争国漫一哥,但排名总是上下浮动,没有定论。 但就在今天,《斗…

用GPT4.0对csdn问答社区内容进行总结的对话记录(20231203号)

问题链接:微信小游戏开发2D碰撞检测问题 问题内容: 用户在开发微信小游戏的2D项目时遇到了碰撞检测无效的问题。他们尝试使用其他的碰撞类,但在2D中会报错。用户怀疑微信小游戏的框架可能不支持2D碰撞检测,或者需要自己计算和编…

flink获取kafka的key value timestamp header

参考: http://t.csdnimg.cn/FvqEn

JUC-AQS

如何利用CAS实现一个同步框架 state:共享标记位。利用CAS修改,达到同步管理等待队列:存储需要等待获取锁的线程 共享标记位state0 表示资源是空闲的;state1表示有1个线程获取到资源,如何独占模式,判断持有…

一款充电桩解决方案设计

一、基本的概述 项目由IP6536提供两路5V 1.5A 的USB充电口,IP6505提供一路最大24W的USB快充口支持QC3.0 / DCP / QC2.0 / MTK PE1.1 / PE2.0 / FCP / SCP / AFC / SFCP的快充协议,电池充电由type-C输入经过IP2326输出最高15W快充对电池进行充电&#xf…

C++:异常

文章目录 传统的处理错误的方式C异常C异常的使用抛异常的举例异常的重新抛出异常规范 自定义异常体系C标准库中的异常体系异常的优缺点 本篇总结的是C中关于异常的内容 传统的处理错误的方式 在C语言中,对于传统的错误方式有 终止程序:例如assert&…

上海市计算机学会竞赛2023年11月月赛丙组

1.刷题 #include<iostream> using namespace std; int main(){int n,m,a;cin>>n>>m;if(n%m!0){an/m1;}if(n%m0){an/m;}cout<<a; } 2.染色 #include<iostream> #include<algorithm> using namespace std; long long a[300010]; int main…

【STL】手撕 string类

目录 1&#xff0c;string类框架 2&#xff0c;string&#xff08;构造&#xff09; 3&#xff0c;~string&#xff08;析构&#xff09; 4&#xff0c;swap&#xff08;交换&#xff09; 5&#xff0c;string&#xff08;拷贝构造&#xff09; 1&#xff0c;常规法 2&a…

pythonanywhere 介绍

最近因为工作需要用到类似Azure Function App的服务&#xff0c;不过Azure Function App服务需要购买Azure VM&#xff0c;不是免费的。在stackoverflow上刚好看到有人提到pythonanywhere提供类似Azure Function App的服务&#xff0c;而且可以免费使用三个月。 首先申请一个免…

Cmkae外部依赖管理

文章目录 一、cmake依赖管理介绍二、源码依管理1. FetchContent与find_package进行集成 2. CPM3. git submodule附加&#xff1a; address_sanitizer 和 undefined sanitizer 一、cmake依赖管理介绍 CMake 是跨平台的构建系统&#xff0c;支持 C/C、Objective-C、Fortran 等多种…

Git Bash环境下用perl脚本获取uuid值

在Linux环境下&#xff0c;比如在ubuntu就直接有uuidgen命令直接获取uuid值。在Windows环境下常用的git bash中没有对应的命令&#xff0c;略有不便。这里用脚本写一个uuidgen&#xff0c;模拟Linux环境下的uuidgen命令。 #! /usr/bin/perl use v5.14; use Win32;sub uuidGen {…

6-13连接两个字符串

#include<stdio.h> int main(){int i0,j0;char s1[222],s2[333];printf("请输入第一个字符串&#xff1a;\n");gets(s1);//scanf("%s",s1);printf("请输入第二个字符串&#xff1a;\n");gets(s2);while(s1[i]!\0)i;while(s2[j]!\0)s1[i]s2…