专栏首页从零开始学自动化测试httprunner 2.x学习8-参数化(引用 debugtalk 函数)

httprunner 2.x学习8-参数化(引用 debugtalk 函数)

前言

httprunner 参数化数据源指定支持三种方式:

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

环境:httprunner==2.5.7

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

单个参数

需对 user_id 进行参数化数据驱动,参数取值范围为 1001~1004,那么就可以在 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"

testcases:
    testcase1_name:
        testcase: /path/to/testcase1
        parameters:
            user_id: ${get_user_id()}

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

引用自定义函数

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

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

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

    return accounts

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

config:
    name: "demo"

testcases:
    testcase1_name:
        testcase: /path/to/testcase1
        parameters:
            username-password: ${get_account(10)}

使用案例

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

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

    return user_password

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

生成 list of dict 数据格式

[
{'user': 'test1', 'password': '123456'},
{'user': 'test2', 'password': '123456'},
{'user': 'test3', 'password': '123456'},
{'user': 'test4', 'password': '123456'},
{'user': 'test5', 'password': '123456'},
{'user': 'test6', 'password': '123456'},
{'user': 'test7', 'password': '123456'},
{'user': 'test8', 'password': '123456'},
{'user': 'test9', 'password': '123456'},
{'user': 'test10', 'password': '123456'}
]

testsuites/test_params_function.yml 文件内容

# testsuites/test_params_function.yml
# 上海-悠悠,httprunner QQ交流群:1121184576
config:
    name: "test login parameters"

testcases:
   login-参数化:
        testcase: case/test_login.yml
        parameters:
            user-password: ${get_account(5)}

运行结果,生成 5 条用例

(venv_hrun) D:\soft\venu_hrun>hrun testsuites/test_params_function.yml
INFO     HttpRunner version: 2.5.7
INFO     Start to run testcase: login-参参数数化化
login-setup
INFO     POST http://127.0.0.1:8000/api/v1/login/
INFO     status_code: 200, response_time(ms): 369.83 ms, response_length: 110 bytes

.

----------------------------------------------------------------------
Ran 1 test in 0.385s

OK
INFO     Start to run testcase: login-参参数数化化
login-setup
INFO     POST http://127.0.0.1:8000/api/v1/login/
INFO     status_code: 200, response_time(ms): 347.42 ms, response_length: 110 bytes

.

----------------------------------------------------------------------
Ran 1 test in 0.347s

OK
INFO     Start to run testcase: login-参参数数化化
login-setup
INFO     POST http://127.0.0.1:8000/api/v1/login/
INFO     status_code: 200, response_time(ms): 338.0 ms, response_length: 110 bytes

.

----------------------------------------------------------------------
Ran 1 test in 0.338s

OK
INFO     Start to run testcase: login-参参数数化化
login-setup
INFO     POST http://127.0.0.1:8000/api/v1/login/
INFO     status_code: 200, response_time(ms): 331.99 ms, response_length: 110 bytes

.

----------------------------------------------------------------------
Ran 1 test in 0.332s

OK
INFO     Start to run testcase: login-参参数数化化
login-setup
INFO     POST http://127.0.0.1:8000/api/v1/login/
INFO     status_code: 200, response_time(ms): 354.24 ms, response_length: 110 bytes

.

----------------------------------------------------------------------
Ran 1 test in 0.354s

OK
INFO     Start to render Html report ...
INFO     Generated Html report: D:\soft\venu_hrun\reports\20200613T030252.852803.html

本文分享自微信公众号 - 从零开始学自动化测试(yoyoketang),作者:上海悠悠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python测试开发django-16.JsonResponse返回中文

    django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3...

    上海-悠悠
  • httprunner学习5-参数化与数据驱动

    参数化是自动化测试离不开的话题,httprunner里面只要把上一篇声明变量学会了,参数化也就自然会了。 不同的地方在于声明变量时对应值只有一个,参数化是多个值...

    上海-悠悠
  • Selenium2+python自动化34-获取输入框联想词

    前言 最近有小伙伴问百度输入后,输入框下方的联想词如何定位到,这个其实难度不大,用前面所讲的元素定位完全可以定位到的。 本篇以百度输入框输入关键字匹配后,打印出...

    上海-悠悠
  • 探讨Java参数传递问题

    可能很多人都知道参数有形参和实参之分,却不知道区别到底是什么;知道Java中内存分为栈、堆、方法区等5片内存,不知道每片内存中保存的都是什么;关于参数的传递到底...

    贪挽懒月
  • [日常] Redis中set集合的使用思考

    公司部门同事有个需求,就是需要把当前另一个部门a中存储的数据全部导出来,自己当前业务b的数据全部导出来,两个要取一下差集,把a中存在,b中不存在的记下来,要去调...

    陶士涵
  • 跟着大彬读源码 - Redis 10 - 对象编码之整数集合

    整数集合是 Redis 集合键的底层实现之一。当一个集合只包含整数值元素,并且元素数量不多时,Redis 就会使用整数集合作为集合键的底层实现。

    北国风光
  • 2018-09-21 JAVA的集合类关系总结,基础知识太不扎实了

    *面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。

    Albert陈凯
  • SpringMVC 提交表单400 Bad Request

    第一种: 后台:  @RequestMapping(value="/add",method=RequestMethod.POST)     public Str...

    冷冷
  • Flask 统计在线人数

    服务端完成以后,如果检验应用的效果呢,在线人数/客户端是一个不错的指标。但是客户端的连接通常是短连接「请求建立一次连接,请求完成连接即断开」,基于这种情况服务端...

    keinYe
  • 介绍一个MonoTouch开发的伦敦官方城市指南应用

    让大多数伦敦无与伦比的文化、娱乐、著名景点,今年夏天,如没有其它,使用免费的伦敦官方城市指南应用。 你是否正在寻找免费活动,必须看到事件或当地的旅游景点,你可以...

    张善友

扫码关注云+社区

领取腾讯云代金券