前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >httprunner 3.x学习11 - 参数化(parameters)引用外部 csv 数据文件

httprunner 3.x学习11 - 参数化(parameters)引用外部 csv 数据文件

作者头像
上海-悠悠
发布于 2021-06-24 14:44:59
发布于 2021-06-24 14:44:59
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

前言

httprunner 3.x参数化(parameters)数据源支持三种方式:

  • 在 YAML/JSON/py 中直接指定参数列表:该种方式最为简单易用,适合参数列表比较小的情况
  • 通过内置的 parameterize(可简写为P)函数引用 CSV 文件:该种方式需要准备 CSV 数据文件,适合数据量比较大的情况
  • 调用 debugtalk.py 中自定义的函数生成参数列表:该种方式最为灵活,可通过自定义 Python 函数实现任意场景的数据驱动机制,当需要动态生成参数列表时也需要选择该种方式 本篇讲解内置的 parameterize(可简写为P)函数引用 CSV 文件

独立参数

对于已有参数列表,并且数据量比较大的情况,比较适合的方式是将参数列表值存储在 CSV 数据文件中。 对于 CSV 数据文件,需要遵循如下几项约定的规则:

  • CSV 文件中的第一行必须为参数名称,从第二行开始为参数值,每个(组)值占一行;
  • 若同一个 CSV 文件中具有多个参数,则参数名称和数值的间隔符需实用英文逗号;
  • 在 YAML/JSON 文件引用 CSV 文件时,文件路径为基于项目根目录(debugtalk.py 所在路径)的相对路径。

例如,user_id 的参数取值范围为 1001~2000,那么我们就可以创建 user_id.csv,并且在文件中按照如下形式进行描述。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user_id
1001
1002
...
1999
2000

然后在 YAML/JSON 测试用例文件中,就可以通过内置的 parameterize(可简写为 P)函数引用 CSV 文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
config:
    name: "demo"
    base_url: ${ENV(base_url)}
    parameters:
        user: ${P(data/user.csv)}

即 P 函数的参数(CSV 文件路径)是相对于项目根目录的相对路径。 当然,这里也可以使用 CSV 文件在系统中的绝对路径,不过这样的话在项目路径变动时就会出现问题,因此推荐使用相对路径的形式。

csv文件存放user数据

先准备测试数据,准备四组登录用的账号和密码,账号为test1,test2,test3,test4,密码统一设置为123456。

data/user.csv文件测试数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user
test1
test2
test3
test4

testcases/params_csv.yml 文件引用 data/user.csv 文件语法${P(user.csv)}

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# testcases/params_csv.yml
# 上海-悠悠,httprunner QQ交流群:717225969

config:
    name: login case
    base_url: ${ENV(base_url)}
    variables:
        user: test
        password: 123456
    parameters:
        user: ${P(data/user.csv)}

teststeps:
-
    name: step login
    request:
        url: /api/v1/login
        method: POST
        json:
            username: $user
            password: $password
    validate:
        - eq: [status_code, 200]
        - eq: [content.code, 0]
        - eq: [content.msg, login success!]
        - len_eq: [content.token, 40]

对应pytest脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# NOTE: Generated By HttpRunner v3.1.4
# FROM: testcases\params_csv.yml

import pytest
from httprunner import Parameters

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

class TestCaseParamsCsv(HttpRunner):
    @pytest.mark.parametrize("param", 
                             Parameters({"user": "${P(data/user.csv)}"}))
    def test_start(self, param):
        super().test_start(param)

    config = (
        Config("login case")
        .variables(**{"user": "test", "password": 123456})
        .base_url("${ENV(base_url)}")
    )

    teststeps = [
        Step(
            RunRequest("step login")
            .post("/api/v1/login")
            .with_json({"username": "$user", "password": "$password"})
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.code", 0)
            .assert_equal("body.msg", "login success!")
            .assert_length_equal("body.token", 40)
        ),
    ]

if __name__ == "__main__":
    TestCaseParamsCsv().test_start()

csv存放user和psw数据

data/user_password.csv 文件测试数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user,password
test1,123456
test2,123456
test3,123456
test4,123456

testcases/params_csv2.yml 文件引用 data/user_password.csv 文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

config:
    name: login case
    base_url: ${ENV(base_url)}
    parameters:
        user-password: ${P(data/user_password.csv)}

teststeps:
-
    name: step login
    request:
        url: /api/v1/login
        method: POST
        json:
            username: $user
            password: $password
    validate:
        - eq: [status_code, 200]
        - eq: [content.code, 0]
        - eq: [content.msg, login success!]
        - len_eq: [content.token, 40]

对应pytest脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# NOTE: Generated By HttpRunner v3.1.4
# FROM: testcases\params_csv2.yml
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

import pytest
from httprunner import Parameters

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

class TestCaseParamsCsv2(HttpRunner):
    @pytest.mark.parametrize(
        "param", Parameters({"user-password": "${P(data/user_password.csv)}"})
    )
    def test_start(self, param):
        super().test_start(param)

    config = Config("login case").base_url("${ENV(base_url)}")

    teststeps = [
        Step(
            RunRequest("step login")
            .post("/api/v1/login")
            .with_json({"username": "$user", "password": "$password"})
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.code", 0)
            .assert_equal("body.msg", "login success!")
            .assert_length_equal("body.token", 40)
        ),
    ]

if __name__ == "__main__":
    TestCaseParamsCsv2().test_start()

V3.x版本支持相对路径,文件路径为基于项目根目录(debugtalk.py 所在路径)的相对路径。如:data/user_id.csv

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
ChatGPT的Canvas画布功能竟然能做到这些!
图片展示了一款垂直工具栏,包含五个按列排列的图标,背景为柔和的粉彩色调。顶部起第三个图标是一本打开的书,其旁边有标签标注为“阅读等级”。
JavaEdge
2024/12/25
6380
ChatGPT的Canvas画布功能竟然能做到这些!
OpenAI官宣推出canvas!超强AI编码研究神器,ChatGPT再次颠覆人机交互
这一次,OpenAI官宣推出canvas。它不再是简单的对话框,而是能与ChatGPT「并肩作战」的全新界面。
AiCharm
2024/10/05
2170
OpenAI官宣推出canvas!超强AI编码研究神器,ChatGPT再次颠覆人机交互
『建议收藏』ChatGPT Canvas功能进阶使用指南!
OpenAI 已正式推出 ChatGPT Canvas 功能,并且对所有模型开放,而且免费!,旨在直接在 ChatGPT 界面内增强协作写作和编码。该公告是在 OpenAI 的“12 Days of Shipmas”活动第四天发布的,产品负责人 Kevin Weil 与工程师 Lee Byron 和 Alexi Christakis 一起演示了增强的功能。
一个正经的AI
2024/12/19
5580
『建议收藏』ChatGPT Canvas功能进阶使用指南!
别傻傻只知道GPT-4!用原版ChatGPT最新模型一年发2篇SCI![附论文教程]
OpenAI最近半年推出的3款新模型——o1-preview、Canvas、GPT-4o,能力吊打GPT-4.0,尤其是在科研细分领域的表现,各项能力都远超GPT-4.0!
用户11203141
2025/03/06
950
别傻傻只知道GPT-4!用原版ChatGPT最新模型一年发2篇SCI![附论文教程]
ChatGPT 4o with Canvas — 新特性详解
最近猫哥也感受到 Canvas 的强大,顺手开了个会员体验了一天,今天给大家简单分享一下,有想体验的伙伴可以文末名片私信我哈!
猫头虎
2024/10/12
4830
ChatGPT 4o with Canvas — 新特性详解
ChatGPT上线全新功能Canvas - 我消灭你,与你无关。
但是,ChatGPT更新了,虽然不是那种王炸级的新模型模型更新,但是更新了一个极度优雅,对普通人极度友好的功能。
数字生命卡兹克
2025/04/14
630
ChatGPT上线全新功能Canvas - 我消灭你,与你无关。
ChatGPT全年更新大总结!重看「大模型风向标」进化之路
而作为领跑者,ChatGPT也一直是大模型届的指南针,无论是去年发布的大模型o1-pro,Sora Turbo,还是各种小功能,比如视频模式、打断说话等,甚至是每月200美元的高额定价,OpenAI的每一场发布会都能给广大AI爱好者带来一些新震撼、新思路。
新智元
2025/02/15
1370
ChatGPT全年更新大总结!重看「大模型风向标」进化之路
Canvas编写Python代码也太好用了!
大家知道这个月OpenAI密集发布新产品,连续12天以短视频方式每天公布一个产品功能。
派大星的数据屋
2024/12/19
1380
Canvas编写Python代码也太好用了!
GPT-4o 屠龙式震撼!多模态、实时交互、全员免费可用,丝滑语音交互的 ChatGPT 这把赢麻了
OpenAI 发布 GPT-4o,ChatGPT 基于GPT-4o 实现了语音交互,并在文本与视觉能力上有显著提升。
HyperAI超神经
2024/05/14
6960
GPT-4o 屠龙式震撼!多模态、实时交互、全员免费可用,丝滑语音交互的 ChatGPT 这把赢麻了
OpenAI重磅升级:GPT-4.1 登场,编码能力提升,成本优化,附API KEY获取与实用代码示例
北京时间2025年4月15日,OpenAI通过其应用程序接口(API)发布了新的GPT-4.1模型系列,包括GPT-4.1、GPT-4.1 mini和GPT-4.1 nano 。此次发布标志着OpenAI在大型语言模型领域,特别是针对开发者社区需求的持续演进。关键特性得到确认:相较于其前代模型GPT-4o,GPT-4.1在编码能力上实现了显著提升 ;该模型系列在发布初期仅通过API提供访问 ;并且其API定价相较于GPT-4o有所降低,提供了更优的成本效益 。
网名重要么
2025/04/23
2580
满血版o1深夜震撼上线,奥特曼怼脸演示超强推理!终极Pro版每月1450元
这次,Sam Altman本人正式出镜,和研究科学家Hyung Won Chung、Max,以及思维链提出者Jason Wei一起,在短短15分钟内速速完成了发布。
新智元
2025/02/15
710
满血版o1深夜震撼上线,奥特曼怼脸演示超强推理!终极Pro版每月1450元
猫头虎分享:ChatGPT 模型家族全解析 —— 从 GPT-4、GPT-4o、GPT-4o with Canvas、o1-preview、o1-mini、o1 pro以及最新的Sora的对比与选择
OpenAI的ChatGPT模型家族不断壮大,近期推出了多款模型,包括GPT-4、GPT-4o、GPT-4o with Canvas、o1-preview、o1-mini、o1 pro以及最新的Sora。本文将详细解析这些模型的特点、适用场景,并为您提供选择建议。
猫头虎
2024/12/13
1.2K0
发力了,Mistral对标ChatGPT全面升级le Chat,还祭出超大杯多模态模型
就在今天,Mistral AI 多模态家族迎来了第二位成员:一个名为 Pixtral Large 的超大杯基础模型。
机器之心
2025/02/14
770
发力了,Mistral对标ChatGPT全面升级le Chat,还祭出超大杯多模态模型
[AI OpenAI] 引入 GPT-4o 及更多工具至免费版 ChatGPT 用户
与我们的使命一致,我们专注于推进人工智能技术,并确保它对所有人都可访问且有益。今天,我们推出了最新的模型 GPT-4o,并将向 ChatGPT 免费用户提供更多智能和高级工具。
从零开始学AI
2024/05/15
3110
[AI OpenAI] 引入 GPT-4o 及更多工具至免费版 ChatGPT 用户
【AIGC】ChatGPT的@提及功能与 AI Agent 交互模式的转型之路
在本文中,我们全面探讨了ChatGPT最新推出的“@”提及功能。这项功能不仅展示了人工智能技术的突破,也为多模型集成与智能交互开创了新的应用空间。通过对多个实际应用场景的分析,我们发现这一功能在项目管理、学术研究、医疗咨询、内容创作与营销、以及教育辅导等领域中展现了显著的优势。它能够大幅提高任务处理效率,简化操作流程,并通过更高的灵活性和个性化服务优化用户体验。
CSDN-Z
2024/10/17
1410
【AIGC】ChatGPT的@提及功能与 AI Agent 交互模式的转型之路
GPT-4和ChatGPT大比拼,究竟谁胜?
作为人工智能史上里程碑事件之一的ChatGPT,自2022年11月30日发布至今,一直备受热议。在ChatGPT热潮尚未见减弱之势,2023年3月14日,OpenAI公司继续发布新一代AI语言大模型GPT-4,并官宣称GPT-4是“OpenAI最先进的系统”“能够产生更安全、更有用的响应”。
零点有数科技
2023/05/31
1.8K0
GPT-4和ChatGPT大比拼,究竟谁胜?
【愚公系列】《AI智能化办公:ChatGPT使用方法与技巧从入门到精通》 001-ChatGPT是什么(ChatGPT引发全球关注)
ChatGPT是一种基于深度学习的对话生成模型。它使用了一种称为Transformer的预训练模型架构,该架构使其能够理解和生成自然语言。
愚公搬代码
2024/09/30
1590
ChatGPT 大师
随着技术的不断发展,营销人员可用的工具和策略也必须适应变化和创新。在这个创新的海洋中,有一个
ApacheCN_飞龙
2024/05/24
1550
[AI OpenAI] 您好,GPT-4o
GPT-4o(“o”代表“omni”)是朝着更加自然的人机交互迈出的一步——它可以接受任何组合的文本、音频和图像作为输入,并生成任何组合的文本、音频和图像输出。它可以在短至232毫秒内响应音频输入,平均响应时间为320毫秒,这与人类在对话中的响应时间相似。它在英文文本和代码处理方面与GPT-4 Turbo的性能相当,在非英语语言的文本处理上有显著提升,同时API的速度更快且成本降低50%。与现有模型相比,GPT-4o在视觉和音频理解方面特别出色。
从零开始学AI
2024/05/14
1690
[AI OpenAI] 您好,GPT-4o
GPT-4o:深夜炸场,她 来了!
在我们的深夜、太平洋时间的上午 10 点,OpenAI 召开春季发布会,推出了一款名为GPT-4o的“旗舰级”生成式人工智能模型,并将在未来几周内在公司面向开发者和消费者的产品中迭代推出。该模型将向免费客户开放,这意味着任何人都可以通过 ChatGPT 访问 OpenAI 最先进的技术。
NewBeeNLP
2024/05/14
3790
GPT-4o:深夜炸场,她 来了!
推荐阅读
ChatGPT的Canvas画布功能竟然能做到这些!
6380
OpenAI官宣推出canvas!超强AI编码研究神器,ChatGPT再次颠覆人机交互
2170
『建议收藏』ChatGPT Canvas功能进阶使用指南!
5580
别傻傻只知道GPT-4!用原版ChatGPT最新模型一年发2篇SCI![附论文教程]
950
ChatGPT 4o with Canvas — 新特性详解
4830
ChatGPT上线全新功能Canvas - 我消灭你,与你无关。
630
ChatGPT全年更新大总结!重看「大模型风向标」进化之路
1370
Canvas编写Python代码也太好用了!
1380
GPT-4o 屠龙式震撼!多模态、实时交互、全员免费可用,丝滑语音交互的 ChatGPT 这把赢麻了
6960
OpenAI重磅升级:GPT-4.1 登场,编码能力提升,成本优化,附API KEY获取与实用代码示例
2580
满血版o1深夜震撼上线,奥特曼怼脸演示超强推理!终极Pro版每月1450元
710
猫头虎分享:ChatGPT 模型家族全解析 —— 从 GPT-4、GPT-4o、GPT-4o with Canvas、o1-preview、o1-mini、o1 pro以及最新的Sora的对比与选择
1.2K0
发力了,Mistral对标ChatGPT全面升级le Chat,还祭出超大杯多模态模型
770
[AI OpenAI] 引入 GPT-4o 及更多工具至免费版 ChatGPT 用户
3110
【AIGC】ChatGPT的@提及功能与 AI Agent 交互模式的转型之路
1410
GPT-4和ChatGPT大比拼,究竟谁胜?
1.8K0
【愚公系列】《AI智能化办公:ChatGPT使用方法与技巧从入门到精通》 001-ChatGPT是什么(ChatGPT引发全球关注)
1590
ChatGPT 大师
1550
[AI OpenAI] 您好,GPT-4o
1690
GPT-4o:深夜炸场,她 来了!
3790
相关推荐
ChatGPT的Canvas画布功能竟然能做到这些!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档