首页 > 其他分享 > httprunner 4.x学习 - 10.参数化(parameters)引用外部 csv 数据文件 和函数

httprunner 4.x学习 - 10.参数化(parameters)引用外部 csv 数据文件 和函数

时间:2023-05-09 23:00:30浏览次数:43  
标签:10 csv httprunner name parameters 参数 user password

前言

httprunner 4.x 实现参数化使用parameters 关键字,数据源有三种方式

  • 1.在yaml 文件中直接写测试数据源
  • 2.测试数据源写到csv文件
  • 3.自定义函数,函数返回列表形式数据

独立参数

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

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

例如,user 的参数取值范围为 test1,test2,test3, test4,那么我们就可以创建 user.csv,放到项目根目录下的data目录下,并且在文件中按照如下形式进行描述。
data/ user.csv

user
test1
test2
test3
test4

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

config:
    name: login case
    parameters:
        user: ${P(data/user.csv)}

teststeps:
-
  name: post
  request:
    method: GET
    url: http://www.example.com/
    params:
      username: ${user}
      password: "12345"
  validate:
  - eq: [status_code, 200]

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

使用命令行执行

hrp run test_csv.yml --gen-html-report

会自动生成4个测试用例

csv 存放 user 和 password 数据

data/user_password.csv 文件测试数据

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

teststeps:
-
  name: post
  request:
    method: GET
    url: http://www.example.com/
    params:
      username: ${user}
      password: ${password}
  validate:
  - eq: [status_code, 200]

测试数据读取外部函数

用 debugtalk.py 中自定义的函数生成参数列表,生成的参数列表必须为 list of dict 的数据结构。

需对 user_id 进行参数化数据驱动,参数取值范围为 1001~1004,那么就可以在 debugtalk.py 中定义一个函数,返回参数列表。
debugtalk.py

def get_user_id():
    return [
        {"user_id": 1001},
        {"user_id": 1002},
        {"user_id": 1003},
        {"user_id": 1004}
    ]

然后,在 YAML/JSON 的 parameters 中就可以通过调用自定义函数的形式来指定数据源。

config:
    name: "demo"
    parameters:
        user_id: ${get_user_id()}

另外,通过函数的传参机制,还可以实现更灵活的参数生成功能,在调用函数时指定需要生成的参数个数。

对于具有关联性的多个参数,实现方式也类似。

例如,在 debugtalk.py 中定义函数 get_account,生成指定数量的账号密码参数列表。

def get_account(num):
    accounts = []
    for index in range(1, num+1):
        accounts.append(
            {"user": "test%s" % index, "password": "123456"},
        )

    return accounts

那么在 YAML/JSON 的 parameters 中就可以调用自定义函数生成指定数量的参数列表。

config:
    name: "demo"
    parameters:
        username-password: ${get_account(4)}

在 debugtalk.py 中定义 get_user_password 函数,返回 4 个用户名和密码数据。

def get_account(num):
    accounts = []
    for index in range(1, num+1):
        accounts.append(
            {"user": "test%s" % index, "password": "123456"},
        )
    return accounts

if __name__ == '__main__':
    print(get_account(4))

生成 list of dict 数据格式

[
{'user': 'test1', 'password': '123456'}, 
{'user': 'test2', 'password': '123456'}, 
{'user': 'test3', 'password': '123456'}, 
{'user': 'test4', 'password': '123456'}
]

params_func.yml 文件内容

config:
    name: login case
    parameters:
      user-password: ${get_account(4)}

teststeps:
-
  name: post
  request:
    method: GET
    url: http://www.example.com/
    params:
      username: ${user}
      password: ${password}
  validate:
  - eq: [status_code, 200]

标签:10,csv,httprunner,name,parameters,参数,user,password
From: https://www.cnblogs.com/yoyoketang/p/17386615.html

相关文章

  • httprunner 4.x学习 -9.parameters 参数化
    前言httprunner4.x实现参数化使用parameters关键字,数据源有三种方式1.在yaml文件中直接写测试数据源2.测试数据源写到csv文件3.自定义函数,函数返回列表形式数据参数配置参数名称的定义分为两种情况:独立参数单独进行定义;多个参数具有关联性的参数需要将其定义在一起......
  • 3-10 编写函数把华氏温度转换为摄氏温度,公式为:C=5/9(F-32),在主程序中提示用户输入一个华
    设计思路:c++函数的定义、引用以及c++语言运算的规则 代码:#include<iostream>usingnamespacestd;floatf(floata){floatx=5.0/9*(a-32);returnx;}intmain(){floatf(floata);floata;cin>>a;floatn;n=f(a);cout<<n;}总结:函数的定义与......
  • 两个线程交替打印100以内的数字
    共享内存classtest{privatestaticintcount=0;//共享的计数器publicstaticvoidmain(String[]args){Threadt1=newThread(newPrinter(0));Threadt2=newThread(newPrinter(1));t1.start();t2.start();......
  • 1009 说反话(C++)
    一、问题描述:给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有......
  • C#设计模式10——享元模式的写法
    1.什么是享元模式?享元模式是一种结构型设计模式,目的是通过共享对象来尽量减少内存使用和对象数量。它通过将对象分为可共享的和不可共享的来实现这一目的。2.为什么要使用享元模式?使用享元模式可以大大减少系统中对象的数量,从而减少了内存的使用。在对象数量较大,且需要相同状......
  • 10. 列表
    列表是可变的1.1什么是列表一个排列整齐的队伍,Python采用顺序表实现列表内的个体称作元素,由若干元素组成列表元素可以是任意对象(数字、字符串、对象、列表等)列表内元素有顺序,可以使用索引线性的数据结构使用[]表示列表是可变的1.2列表的构造ls1=[]ls2=li......
  • ASEMI代理ADI亚德诺LT6230CS6-10#TRPBF车规级芯片
    编辑-ZLT6230CS6-10#TRPBF特点:低噪声电压:1.1nV/√Hz低电源电流:3.5mA/Amp(最大值)低失调电压:350μV(最大值)增益带宽积:LT6230:215MHz;V≥1__LT6230-10:1450MHz;V≥10__宽电源范围:3V至12.6V轨到轨输出摆幅共模抑制比:115dBTyp输出电流:30mA工作温度范围:–40°C至85°CL......
  • httprunner 4.x学习 -8.base_url 环境地址的使用
    前言config中有个base_url关键字可以设置环境地址,这样其它接口就只需写相对地址了base_url环境地址比如我要测试的API接口如下http://httpbin.org/get第一个是get请求http://httpbin.org/post第二个是post请求如果一个测试用例,有多个步骤中,测试环境地址不变http://......
  • 计讯物联环保数采仪TS910在扬尘预警监测解决方案的应用
    方案背景随着我国经济高速发展和城市化进程的加速,城市建设工程规模不断扩大,工程施工给居住区、学校、医院等周边环境带来了巨大的影响,特别是扬尘污染带来的细颗粒物,严重危害到人体健康和大气环境质量。 因此,计讯物联以可持续发展为设计理念,践行国家“双碳”发展战略,实力打造稳......
  • 1000个已成功入职的软件测试工程师简历经验总结:软件测试工程师简历项目经验怎么写?(含
    一、前言:浅谈面试 面试是我们进入一个公司的门槛,通过了面试才能进入公司,你的面试结果和你的薪资是息息相关的。那如何才能顺利的通过面试,得到公司的认可呢?面试软件测试要注意哪些问题呢?下面和笔者一起来看看吧。这里分享一下笔者十年测试生涯的面试总结!软件测试面试常......