学会这套HttpRunner(17):实现参数化传递,测试开发都直呼内行

news2024/11/15 21:48:19

参数化实现及重复执行

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

在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层:


 自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

方式三:调用 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/1230296.html

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

相关文章

创建自定义日志筛选器

Windows的事件查看器中的日志包含了很多信息,但是系统自带的筛选器只能筛选固定的字段和内容。有时候想根据某个事件中的用户名或者IP筛选的时候就没办法了。此时需要创建自定义筛选器来实现。 首先找到希望筛选的日志,调整成详细的XML视图。 这里面就有…

海外代理IP如何找到靠谱的?

现在市面上有很多代理服务商,大家可以根据自己的需求选择一个适合自己业务的的IP代理服务商,现在也有一些免费的,但如果力求稳定安全,还是选择付费的。 这里提醒一句,在买代理IP时最好找这种可以免费试用的&#xff0…

城市生命线丨桥梁健康监测系统应用详情

现代城市当中,桥梁的重要性以及危险性是最高的,因此,对于桥梁的安全健康监测就会变得更加的重要,在科技发展的今天,新型基础设施已经能够准确、实时的监测桥梁的安全和健康。 WITBEE万宾助力建设更健康,智慧…

transformer学习资料

一、NLP 自然语言处理 NLP 是机器学习在语言学领域的研究,专注于理解与人类语言相关的一切。NLP 的目标不仅是要理解每个单独的单词含义,而且也要理解这些单词与之相关联的上下文之间的意思。 常见的NLP 任务列表: 对整句的分类&#xff1…

大数据时代,怎样通过日志分析保护我们的数据!

在今天的大数据时代,大量的数据被生成和存储。对于IT行业来说,日志文件是宝贵的信息财富。 通过合理的日志分析和解读,可以帮助企业提高运维效率、加强安全防护、改进产品质量和优化用户体验,本文将深入探讨日志分析在IT中的重要性…

excel-gen.js 导出excel 功能

目录 概要 整体架构流程 html部分: js部分: json部分: 小结 概要 功能会使用到如下插件: jszip.min.js FileSaver.js jquery.min.js excel-gen.js highcharts.js exporting.js export_data.js 主要是highcharts图表…

WhatsApp新营销全解:如何才能真正留住你的客户

WhatsApp营销这件事上,从获取线索、留存客户、成交转化到复购推荐的整个流程中,方方面面的因素影响着最终的转化效果。今天开始,我们会在公众号内新增WhatsApp新营销全解系列,结合前人踩过的坑和成功经验,来为大家说说…

彻底删除的文件如何恢复?分享正确方法!

“求救!我在清理电脑的过程中,把一些比较久远的文件彻底删除了。但是我突然想起好像有些非常重要的数据也一同被删掉了,这可怎么办?有方法恢复彻底删除的文件么?” 在日常使用电脑的过程中,很多用户或许都会…

海外IP代理如何助力跨境电商?

黑五作为下半年年度尤为重要的一个节日,是各大商家的必争之地,那么海外代理是如何帮助跨境商家做好店铺管理和营销呢? 为什么跨境人都关注海外代理,下面我们来进行介绍。 一、什么是海外代理 海外代理就是我们所说的&#xff1a…

如何写好一篇软文?怎样写软文比较有吸引力?

软文,即柔性广告,是一种通过文字、图片等形式,将广告信息融入到内容中,以达到宣传、推广、营销目的的文章。企业和品牌每天都会在互联网上投放大量软文,软文起到润物细无声的作用,可以在无形中影响用户心智…

手写promis(1)

目录 前言 核心功能--构造函数 核心功能--状态及原因 then方法 成功和失败回调 异步及多次调用 异步任务--核心api Promise.then: queueMicrotask: MutationObserver: setImmediate: setTimeout: 异步任务---函数封装 前言 Promise(承诺)…

虾皮台湾站点如何选品

在互联网时代,电商平台成为了越来越多人购物的首选。虾皮作为台湾地区最大的电商平台之一,为商家提供了良好的销售渠道。然而,在虾皮上选择适合的商品对于商家来说并不容易。本文将介绍如何通过虾皮选品工具-知虾来查看台湾地区各大类目的热销…

预包装食品备案与食品经营许可证两者的关系

在食品行业中,预包装食品备案和食品经营许可证是两个重要的概念。它们之间存在一定的关系,但又不完全相同。本文将详细介绍两者的定义、区别和联系。 一、预包装食品备案 预包装食品备案,是指对预包装食品的生产者或进口商进行备案登记的一种…

scapy No such device exists (No such device exists)

使用python编写一个小的网络程序时,程序如下: import scapy.all as scapydef scan(ip):arp_request ARP(pdstip)arp_request.show()broadcast scapy.Ether(dst "ff:ff:ff:ff:ff:ff")arq_request_broadcast broadcast/arp_requestanswered,…

5.什么是Spring的依赖注入(DI)?IOC和DI的区别是什么

很多人把IOC和DI说成一个东西,笼统来说的话是没有问题的,但是本质上还是有所区别的,希望大家能够严谨一点, IOC和DI是从不同的角度描述的同一件事,IOC是从容器的角度描述,而DI是从应用程序的角度来描述,也…

kernel32.dll丢失都有什么解决办法,帮助大家解决kernel32.dll丢失的问题

kernel32.dll丢失是电脑中常出现的情况,今天就想和大脚聊聊这个kernel32.dll 文件,这个文件它的功能是干什么的,如果电脑中kernel32.dll 丢失都有什么解决办法,帮助大家解决kernel32.dll丢失的问题,本篇文章给大家提供…

LINUX入门篇【7】--git提交指令以及代码调试工具gdb

前言: 我们今天来介绍一下我们工具篇的最后两个工具,即git提交指令以及代码调试工具gdb,再结合前面的知识点,我们就可以基本完成我们VS上的基本的功能:编写,调试,编译,执行程序的这些过程。 1…

SpringDoc基础配置和集成OAuth2登录认证教程

本期内容 学会通过注解和Java代码的方式添加SpringDoc配置。在swagger-ui提供的页面上提供OAuth2登录认证,在集成Security的情况下便捷获取access_token并在请求时按照OAuth2规范携带。 为什么集成OAuth2登录认证? 现在大部分教程是在swagger-ui页面添…

为什么要建设渲染私有云?

生活中,其实各行各业都离不开渲染技术。建筑行业需要进行场景的渲染,以展示设计方案的效果;工业设计需要进行产品的渲染,以展示产品的外观和设计特点;游戏开发需要进行大量的游戏场景渲染,以测试游戏的视觉…

App性能测试工具Soloπ(四)---性能测试

一、性能测试录制 前提:手机已连接电脑,并已开启可调试及获取各种权限点击性能测试,进入性能数据监控项 如需开启启动耗时计算,进入录屏设置无需修改默认项 勾选监测项后则点击开始按钮(绿色小三角)进行…