httprunner3.x詳細教程七(三種方式實現參數化數據驅動)
**歡迎加入測試交流群:自動化測試-夜行者(816489363)進行交流學習QAQ** --成都-阿木木
httprunner3.x支持三種格式的參數化數據,Parameters的入參說明如下:
- """ parse parameters and generate cartesian product.
- Args:
- parameters (Dict) parameters: parameter name and value mapping
- parameter value may be in three types:
- (1) data list, e.g. ["iOS/10.1", "iOS/10.2", "iOS/10.3"]
- (2) call built-in parameterize function, "${parameterize(account.csv)}"
- (3) call custom function in debugtalk.py, "${gen_app_version()}"
- Returns:
- list: cartesian product list
- Examples:
- >>> parameters = {
- "user_agent": ["iOS/10.1", "iOS/10.2", "iOS/10.3"],
- "username-password": "${parameterize(account.csv)}",
- "app_version": "${gen_app_version()}",
- }
- >>> parse_parameters(parameters)
- """
總結來說,支持三種入參,返回一個列表:
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
- # -*- coding: utf-8 -*-
- """
- ------------------------------------
- @Project : interfaceDemo
- @Time : 2020/8/20 13:47
- @Auth : chineseluo
- @Email : 848257135@qq.com
- @File : demo_baidu_request_test.py
- @IDE : PyCharm
- ------------------------------------
- """
- import pytest
- from httprunner import Parameters
- from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
- class TestBaiduRequestTestCase(HttpRunner):
- @pytest.mark.parametrize("param", Parameters(
- {"username": [111, 222, 333]}
- ))
- def test_start(self, param):
- super().test_start(param)
- config = (
- Config("get user list")
- .variables(
- **{
- "username": "${get_username()}"
- }
- )
- .base_url("https://www.baidu.com")
- .verify(False)
- )
- teststeps = [
- Step(
- RunRequest("get info")
- .get("/")
- .with_params(**{"username": "$username"})
- .validate()
- .assert_equal("status_code", 200)
- )
- ]
- if __name__ == "__main__":
- TestBaiduRequestTestCase().test_start()
如果使用過pytest的參數化的小伙伴一定不會陌生,@pytest.mark.parametrize()會先將param作為一個動態參數,傳遞給param,然后由httprunner在進行參數化,httprunner在pytest的parametrize上封裝了一層,增加了csv及debugtalk.py參數化的支持。
下面演示三種參數化如何設置:
第一種列表:
- #!/user/bin/env python
- # -*- coding: utf-8 -*-
- """
- ------------------------------------
- @Project : interfaceDemo
- @Time : 2020/8/20 13:47
- @Auth : chineseluo
- @Email : 848257135@qq.com
- @File : demo_baidu_request_test.py
- @IDE : PyCharm
- ------------------------------------
- """
- import pytest
- from httprunner import Parameters
- from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
- class TestBaiduRequestTestCase(HttpRunner):
- @pytest.mark.parametrize("param", Parameters(
- {"username": [111, 222, 333]}
- ))
- def test_start(self, param):
- super().test_start(param)
- config = (
- Config("get user list")
- .variables(
- **{
- "username": "${get_username()}"
- }
- )
- .base_url("https://www.baidu.com")
- .verify(False)
- )
- teststeps = [
- Step(
- RunRequest("get info")
- .get("/")
- .with_params(**{"username": "$username"})
- .validate()
- .assert_equal("status_code", 200)
- )
- ]
- if __name__ == "__main__":
- TestBaiduRequestTestCase().test_start()
結果:
- collecting ... collected 3 items
- demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param0]
- demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param1]
- demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param2]
第二種debugtalk.py的回調函數:
在debugtalk.py中定義一個函數,返回列表:
- def get_username():
- return [
- {"username": "111111"},
- {"username": "222222"},
- {"username": "333333"},
- {"username": "444444"},
- {"username": "555555"},
- {"username": "666666"},
- ]
在demo_baidu_request_test.py文件調用:
- #!/user/bin/env python
- # -*- coding: utf-8 -*-
- """
- ------------------------------------
- @Project : interfaceDemo
- @Time : 2020/8/20 13:47
- @Auth : chineseluo
- @Email : 848257135@qq.com
- @File : demo_baidu_request_test.py
- @IDE : PyCharm
- ------------------------------------
- """
- import pytest
- from httprunner import Parameters
- from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
- class TestBaiduRequestTestCase(HttpRunner):
- @pytest.mark.parametrize("param", Parameters(
- {"username": "${get_username()}"}
- ))
- def test_start(self, param):
- super().test_start(param)
- config = (
- Config("get user list")
- .base_url("https://www.baidu.com")
- .verify(False)
- )
- teststeps = [
- Step(
- RunRequest("get info")
- .get("/")
- .with_params(**{"username": "$username"})
- .validate()
- .assert_equal("status_code", 200)
- )
- ]
- if __name__ == "__main__":
- TestBaiduRequestTestCase().test_start()
結果:
- collecting ... collected 6 items
- demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param0]
- demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param1]
- demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param2]
- demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param3]
- demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param4]
- demo_baidu_request_test.py::TestBaiduRequestTestCase::test_start[param5]
使用csv文件作為參數化輸入時注意三點:
1,csv文件中的title要為變量名
2,csv映射的時候,參數名要以“-”分割,name和pwd使用的-進行分割
3,csv的路徑要使用相對路徑,不支持絕對路徑不支持\\符號的路徑
**歡迎加入測試交流群:自動化測試-夜行者(816489363)進行交流學習QAQ**