• 解密Python中的*args和**kwargs函数


    Python编程中,*args和**kwargs是两个常用的函数参数形式,它们提供了灵活性和扩展性,使函数能够处理不定数量的参数。本文将详细解释*args和**kwargs的概念、用法以及在实际接口自动化工作中的示例代码。

    *args的使用

    *args是一个特殊的参数,表示接受任意数量的位置参数。

    在函数定义时,可以使用*args作为参数名,它会将传入的位置参数打包成一个元组。

    函数内部可以通过遍历元组或使用索引来访问这些位置参数。

    示例代码:

    1. def print_args(*args):
    2. for arg in args:
    3. print(arg)
    4. print_args("Hello", "World", 2022) # 输出:Hello World 2022

    同时,我也为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接点击文末小卡片免费领取资料文档

    软件测试视频教程观看处:

    B站封神的接口测试教程,30天练完70个项目实战(含自动化测试、性能测试),学完即就业,永久白嫖!

    **kwargs的使用

    **kwargs是一个特殊的参数,表示接受任意数量的关键字参数。

    在函数定义时,可以使用**kwargs作为参数名,它会将传入的关键字参数打包成一个字典。

    函数内部可以通过字典的键值对来访问这些关键字参数。

    示例代码:

    1. def print_kwargs(**kwargs):
    2. for key, value in kwargs.items():
    3. print(f"{key}: {value}")
    4. print_kwargs(name="Alice", age=25) # 输出:name: Alice, age: 25

    *args和**kwargs的组合使用

    *args和**kwargs可以同时在函数定义中使用,允许接受任意数量的位置参数和关键字参数。

    函数调用时,可以同时传递位置参数和关键字参数。

    示例代码:​​​​​​​

    1. def print_args_kwargs(*args, **kwargs):
    2. for arg in args:
    3. print(arg)
    4. for key, value in kwargs.items():
    5. print(f"{key}: {value}")
    6. print_args_kwargs("Hello", "World", name="Alice", age=25)
    7. # 输出:
    8. # Hello
    9. # World
    10. # name: Alice
    11. # age: 25

    在实际接口自动化工作中,*args和**kwargs也有很多应用场景。例如,当编写一个通用的请求函数时,可以使用*args和**kwargs来接受不同接口的参数,实现灵活的请求。

    示例代码:

    1. import requests
    2. def send_request(url, method="GET", *args, **kwargs):
    3. if method == "GET":
    4. response = requests.get(url, *args, **kwargs)
    5. elif method == "POST":
    6. response = requests.post(url, *args, **kwargs)
    7. else:
    8. raise ValueError("Unsupported method")
    9. return response
    10. # 调用send_request函数,发送不同类型的请求
    11. response1 = send_request("https://api.example.com/data", params={"id": 1})
    12. response2 = send_request("https://api.example.com/data", method="POST", json={"name": "Alice"})

    当进行接口自动化测试时,*args和**kwargs可以用于以下几个方面的应用

    发送请求时的参数化

    在接口测试中,往往需要传递不同的请求参数,如请求头、查询参数、请求体等。使用*args和**kwargs可以方便地实现参数的动态传递。例如:

    1. import requests
    2. def send_request(url, method="GET", *args, **kwargs):
    3. response = requests.request(method, url, *args, **kwargs)
    4. return response
    5. # 调用send_request函数,发送带有请求头和查询参数的GET请求
    6. response = send_request("https://api.example.com/data", headers={"Authorization": "Bearer xxx"}, params={"page": 1})

    断言结果的灵活性

    在接口自动化测试中,需要对接口返回的结果进行断言。使用*args和**kwargs可以实现对返回结果的灵活性断言。例如:

    1. def assert_response(response, expected_status_code=200, *args, **kwargs):
    2. assert response.status_code == expected_status_code, "Invalid status code"
    3. # 其他断言逻辑...
    4. # 调用assert_response函数,对接口返回结果进行断言
    5. assert_response(response, expected_status_code=200, headers={"Content-Type": "application/json"})

    动态生成测试数据

    在接口自动化测试中,有时需要动态生成测试数据,例如生成随机的用户名、密码等。使用*args和**kwargs可以方便地传递这些动态生成的测试数据。例如:

    1. def generate_user_data(*args, **kwargs):
    2. # 生成用户名、密码等测试数据
    3. username = generate_random_username()
    4. password = generate_random_password()
    5. # 其他测试数据生成逻辑...
    6. return username, password
    7. # 调用generate_user_data函数,获取动态生成的测试数据
    8. username, password = generate_user_data()

    在接口自动化测试中,有时需要封装一系列的测试步骤,使用*args和**kwargs可以方便地传递不同的测试参数。例如:

    1. def login_and_assert_response(url, username, password, expected_status_code=200, *args, **kwargs):
    2. # 登录步骤
    3. login_response = send_login_request(url, username, password)
    4. assert_response(login_response, expected_status_code=200)
    5. # 其他测试步骤...
    6. # 调用login_and_assert_response函数,执行登录并断言响应结果
    7. login_and_assert_response("https://api.example.com/login", username="admin", password="password", expected_status_code=200)

    总结

    通过上述示例,我们可以看到*args和**kwargs在接口自动化测试中的灵活运用。它们可以帮助我们实现参数化、灵活断言、动态生成数据和封装测试步骤等功能,提高测试代码的可维护性和可扩展性。

    PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近100个G。

    ☑ 240集-零基础到精通全套视频课程
    ☑ [课件+源码]-完整配套的教程
    ☑ 18套-测试实战项目源码
    ☑ 37套-测试工具软件包
    ☑ 268道-真实面试题
    ☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)

    这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

  • 相关阅读:
    【爬虫教程】2023最详细的爬虫入门教程~
    addEventListener与useeffect相撞的火花
    JavaScript
    Vue2.0开发之——Vue基础用法-vue-cli(30)
    vue项目中使用 NProgress 进度加载插件
    【MySql】数据库的聚合查询
    【Socket】解决UDP丢包问题
    大数据ClickHouse进阶(五):副本与分片
    ClickHouse复合数据类型
    常见的应用层协议都有哪些?【面试官可能会问系列】
  • 原文地址:https://blog.csdn.net/HUA1211/article/details/133027760