zoukankan      html  css  js  c++  java
  • httprunner3.x详细教程七(三种方式实现参数化数据驱动)

    httprunner3.x详细教程七(三种方式实现参数化数据驱动)

     **欢迎加入测试交流群:自动化测试-夜行者(816489363)进行交流学习QAQ**                                                                                                                                                                                                                                                   --成都-阿木木

    httprunner3.x支持三种格式的参数化数据,Parameters的入参说明如下:

    1. """ parse parameters and generate cartesian product. 
    2. Args: 
    3.     parameters (Dict) parameters: parameter name and value mapping 
    4.         parameter value may be in three types: 
    5.             (1) data list, e.g. ["iOS/10.1", "iOS/10.2", "iOS/10.3"] 
    6.             (2) call built-in parameterize function, "${parameterize(account.csv)}" 
    7.             (3) call custom function in debugtalk.py, "${gen_app_version()}" 
    8. Returns: 
    9.     list: cartesian product list 
    10. Examples: 
    11.     >>> parameters = { 
    12.         "user_agent": ["iOS/10.1", "iOS/10.2", "iOS/10.3"], 
    13.         "username-password": "${parameterize(account.csv)}", 
    14.         "app_version": "${gen_app_version()}", 
    15.     } 
    16.     >>> parse_parameters(parameters) 
    17. """  

    总结来说,支持三种入参,返回一个列表:

    1、列表:["iOS/10.1", "iOS/10.2", "iOS/10.3"]

    2、Parameterize类的回调,例如csv:${parameterize(account.csv)}

    3、debugtalk.py的回调,${gen_app_version()}

    在使用参数化之前,首先要导入pytest包,和httprunner的Parameters这个类

     #!/user/bin/env python  

    1. # -*- coding: utf-8 -*-  
    2.   
    3. """ 
    4. ------------------------------------ 
    5. @Project : interfaceDemo 
    6. @Time    : 2020/8/20 13:47 
    7. @Auth    : chineseluo 
    8. @Email   : 848257135@qq.com 
    9. @File    : demo_baidu_request_test.py 
    10. @IDE     : PyCharm 
    11. ------------------------------------ 
    12. """  
    13. import pytest  
    14. from httprunner import Parameters  
    15. from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase  
    16.   
    17.   
    18. class TestBaiduRequestTestCase(HttpRunner):  
    19.     @pytest.mark.parametrize("param", Parameters(  
    20.         {"username": [111, 222, 333]}  
    21.     ))  
    22.     def test_start(self, param):  
    23.         super().test_start(param)  
    24.   
    25.   
    26.     config = (  
    27.         Config("get user list")  
    28.         .variables(  
    29.             **{  
    30.                 "username": "${get_username()}"  
    31.             }  
    32.         )  
    33.         .base_url("https://www.baidu.com")  
    34.         .verify(False)  
    35.     )  
    36.   
    37.     teststeps = [  
    38.         Step(  
    39.             RunRequest("get info")  
    40.             .get("/")  
    41.             .with_params(**{"username": "$username"})  
    42.             .validate()  
    43.             .assert_equal("status_code", 200)  
    44.         )  
    45.     ]  
    46.   
    47.   
    48. if __name__ == "__main__":  
    49.     TestBaiduRequestTestCase().test_start()  

    如果使用过pytest的参数化的小伙伴一定不会陌生,@pytest.mark.parametrize()会先将param作为一个动态参数,传递给param,然后由httprunner在进行参数化,httprunner在pytest的parametrize上封装了一层,增加了csv及debugtalk.py参数化的支持。

    下面演示三种参数化如何设置:

    第一种列表:

    1. #!/user/bin/env python  
    2. # -*- coding: utf-8 -*-  
    3.   
    4. """ 
    5. ------------------------------------ 
    6. @Project : interfaceDemo 
    7. @Time    : 2020/8/20 13:47 
    8. @Auth    : chineseluo 
    9. @Email   : 848257135@qq.com 
    10. @File    : demo_baidu_request_test.py 
    11. @IDE     : PyCharm 
    12. ------------------------------------ 
    13. """  
    14. import pytest  
    15. from httprunner import Parameters  
    16. from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase  
    17.   
    18.   
    19. class TestBaiduRequestTestCase(HttpRunner):  
    20.     @pytest.mark.parametrize("param", Parameters(  
    21.         {"username": [111, 222, 333]}  
    22.     ))  
    23.     def test_start(self, param):  
    24.         super().test_start(param)  
    25.   
    26.   
    27.     config = (  
    28.         Config("get user list")  
    29.         .variables(  
    30.             **{  
    31.                 "username": "${get_username()}"  
    32.             }  
    33.         )  
    34.         .base_url("https://www.baidu.com")  
    35.         .verify(False)  
    36.     )  
    37.   
    38.     teststeps = [  
    39.         Step(  
    40.             RunRequest("get info")  
    41.             .get("/")  
    42.             .with_params(**{"username": "$username"})  
    43.             .validate()  
    44.             .assert_equal("status_code", 200)  
    45.         )  
    46.     ]  
    47.   
    48.   
    49. if __name__ == "__main__":  
    50.     TestBaiduRequestTestCase().test_start()  

    结果:

    1. collecting ... collected 3 items  
    2.   
    3. demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param0]   
    4. demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param1]   
    5. demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param2]   

    第二种debugtalk.py的回调函数:

    在debugtalk.py中定义一个函数,返回列表:

    1. def get_username():  
    2.     return [  
    3.         {"username": "111111"},  
    4.         {"username": "222222"},  
    5.         {"username": "333333"},  
    6.         {"username": "444444"},  
    7.         {"username": "555555"},  
    8.         {"username": "666666"},  
    9.     ]  

    在demo_baidu_request_test.py文件调用:

    1. #!/user/bin/env python  
    2. # -*- coding: utf-8 -*-  
    3.   
    4. """ 
    5. ------------------------------------ 
    6. @Project : interfaceDemo 
    7. @Time    : 2020/8/20 13:47 
    8. @Auth    : chineseluo 
    9. @Email   : 848257135@qq.com 
    10. @File    : demo_baidu_request_test.py 
    11. @IDE     : PyCharm 
    12. ------------------------------------ 
    13. """  
    14. import pytest  
    15. from httprunner import Parameters  
    16. from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase  
    17.   
    18.   
    19. class TestBaiduRequestTestCase(HttpRunner):  
    20.     @pytest.mark.parametrize("param", Parameters(  
    21.         {"username": "${get_username()}"}  
    22.     ))  
    23.     def test_start(self, param):  
    24.         super().test_start(param)  
    25.   
    26.     config = (  
    27.         Config("get user list")  
    28.         .base_url("https://www.baidu.com")  
    29.         .verify(False)  
    30.     )  
    31.   
    32.     teststeps = [  
    33.         Step(  
    34.             RunRequest("get info")  
    35.             .get("/")  
    36.             .with_params(**{"username": "$username"})  
    37.             .validate()  
    38.             .assert_equal("status_code", 200)  
    39.         )  
    40.     ]  
    41.   
    42.   
    43. if __name__ == "__main__":  
    44.     TestBaiduRequestTestCase().test_start()  

    结果:

    1. collecting ... collected 6 items  
    2.   
    3. demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param0]   
    4. demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param1]   
    5. demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param2]   
    6. demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param3]   
    7. demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param4]   
    8. demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param5]  

    使用csv文件作为参数化输入时注意三点:

    1,csv文件中的title要为变量名

    2,csv映射的时候,参数名要以“-”分割,name和pwd使用的-进行分割

    3,csv的路径要使用相对路径,不支持绝对路径不支持\符号的路径

     **欢迎加入测试交流群:自动化测试-夜行者(816489363)进行交流学习QAQ**   

  • 相关阅读:
    Android 添加cookie
    解决安卓TextView异常换行,参差不齐等问题
    Java遍历List的时候删除item
    android setCompoundDrawables 不显示问题
    Git 操作的一些场景
    C# 函数参数中的this
    Git 常用命令
    C# 判断程序是否执行 进行启动或前台显示
    在窗体中嵌入 应用程序
    byte[] 转 2进制字符串
  • 原文地址:https://www.cnblogs.com/chineseluo/p/13703976.html
Copyright © 2011-2022 走看看