当前位置:   article > 正文

HttpRunner(17):实现参数化传递

HttpRunner(17):实现参数化传递

参数化实现及重复执行

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

在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层 (但每次只能传递一个参数

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386   

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click

 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文件中的代码示例:

  1. # 参数化
  2. def search_key():
  3. # return ["猫","狗","大象"]
  4. return [["猫","猫_百度搜索"],["狗","狗_百度搜索"],["大象","大象_百度搜索"]]

testsuites层:

testcases层:

 

api层:

 由于debugtalk.py可以采用python代码的形式组织参数,故可以实现各种随机参数,如:随机整数、随机字符串,随机手机号等,只要最终函数返回的数据类型能兼容即可。

 随机整数、随机字符串、随机手机号 代码示例:

  1. import random
  2. # 随机整数
  3. def get_random_param(min,max,count=3):
  4. random_list = []
  5. for i in range(count):
  6. random_list.append(random.randint(min,max))
  7. return random_list
  8. # 随机字符串
  9. def get_random_string(base_str,str_len,count=3):
  10. random_list = []
  11. for i in range(count):
  12. str = ''
  13. for j in range(0,str_len):
  14. str = str+base_str[random.randint(0,len(base_str)-1)]
  15. random_list.append(str)
  16. return random_list
  17. # 随机手机号
  18. def get_random_phone(*mobile_num,count=2):
  19. phone_list = []
  20. for i in range(0,count):
  21. str_start = random.choice(mobile_num)
  22. str_end = ''.join(random.sample('0123456789',8))
  23. str_phone = str(str_start) + str_end
  24. phone_list.append(str_phone)
  25. 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中编写代码

代码示例:

  1. from faker import Faker
  2. # 随机姓名
  3. def get_random_name(count=5):
  4. f = Faker(locale='zh_CN')
  5. name_list = []
  6. for i in range(0,count):
  7. name_list.append(f.name())
  8. return name_list

3,再通过在yaml文件中调用该函数  ${函数()};

testsuites层:

testcases层:

api层:

 

 方法六:通过debugtalk.py调用 pymysql库 实现参数化

 利用pymysql库链接并获取mysql数据的方式

前置条件:

mysql数据库中的数据:

在debugtalk.py中编写 链接mysql数据库的函数

代码示例:

  1. import pymysql
  2. def get_mysql_data(case_name):
  3. # 创建mysql数据库链接
  4. db = pymysql.Connect(host='192.168.1.3',port=3306,user='root',
  5. password='root',db='test',charset="utf8")
  6. # 创建游标对象,查询数据默认是元组
  7. cursor = db.cursor()
  8. # 创建游标对象,查询数据默认是元组,此处设置字典类型
  9. # cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
  10. # 编写 sql 语句
  11. sql = 'select test_data,result FROM test_case_data where case_name like "{}_%";'.format(case_name)
  12. # 执行sql 语句,并返回行数
  13. cursor.execute(sql)
  14. # cursor.fetchone() # 一行
  15. case_data = cursor.fetchall() # 所有数据
  16. # 关闭游标
  17. cursor.close()
  18. # 关闭数据库链接
  19. db.close()
  20. # 由于返回的数据是元组,所以需要把元组做成List类型
  21. list_case_data = list(case_data)
  22. for i in range(len(list_case_data)):
  23. list_case_data[i] = list(list_case_data[i])
  24. return list_case_data

在套件层中引用上述的函数

testsuites层:

testcases层:

 

api层:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/402289
推荐阅读
相关标签
  

闽ICP备14008679号