HttpRunner自动化工具之实现参数化传递

参数化实现及重复执行

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

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

方式三:调用 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层:

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值