当前位置: 首页> 健康> 科研 > 接口框架项目实战-pytest(六)csv数据驱动

接口框架项目实战-pytest(六)csv数据驱动

时间:2025/7/12 5:36:36来源:https://blog.csdn.net/will_net/article/details/139417443 浏览次数:0次

csv 数据驱动 为了解决数据量大 导致yaml文件重复太多
yaml_util.py

import osimport jsonpath
import yamlfrom pytestdemo.common.base_util import get_path
from pytestdemo.common.csv_util import analysis_parametersdef read_config_file(one_node,two_node):with open(f'{get_path()}/common/config.yml',encoding="utf-8") as f:value=yaml.load(f,yaml.FullLoader)# print(value[one_node][two_node])return value[one_node][two_node]
def read_extract_file(node_name):with open(f'{get_path()}/common/extract.yml',encoding="utf-8") as f:value=yaml.load(f,yaml.FullLoader)return value[node_name]
def write_extract_file(data):with open(f'{get_path()}/common/extract.yml',encoding="utf-8",mode="a") as f:yaml.dump(data,f,allow_unicode=True)def clean_extract_file():with open(f'{get_path()}/common/extract.yml',encoding="utf-8",mode="w") as f:f.truncate()
def read_testcase_yaml(file_path):print(f'{get_path()}{file_path}')with open(f'{get_path()}{file_path}',encoding="utf-8") as f:value = yaml.load(f, yaml.FullLoader)if len(value)==1:if jsonpath.jsonpath(value,"$..parameters"):return analysis_parameters(value)return value
if __name__ == '__main__':# print (read_config_file("base","base_php_url"))print(read_testcase_yaml("\\testcases\\get_token.yml"))

csv_util.py

import csv
import jsonfrom pytestdemo.common.base_util import get_pathdef read_csv(file_path):data_list=[]with open(f'{get_path()}{file_path}',encoding="utf-8") as f:reader = csv.reader(f)for r in reader:data_list.append(r)return data_list
def analysis_parameters(case_data):keys=dict(*case_data).keys()case_data_str=json.dumps(case_data)list=[]if "parameters" in keys:for p_key,p_value in dict(*case_data)["parameters"].items():p_list=read_csv(p_value)for r in range(1,len(p_list)):temp_case_data_str=case_data_strfor c in range(0,len(p_list[r])):temp_case_data_str=temp_case_data_str.replace("$csv{"+p_list[0][c]+"}",p_list[r][c])list.extend(json.loads(temp_case_data_str))return list
# if __name__ == '__main__':
#     print(read_csv("/testcases/data/get_token.csv"))# data=read_testcase_yaml("/testcases/get_token.yml")# analysis_parameters(data)

conftest.py

@pytest.fixture(scope="session",autouse=True)
def clean_extract():clean_extract_file()

test_demo4.py

import randomimport pytestfrom pytestdemo.common.requests_util import RequestsUtil
from pytestdemo.common.yaml_util import write_extract_file, read_testcase_yamlclass Test4Api:access_token=""@pytest.mark.parametrize("data",read_testcase_yaml("/testcases/get_token.yml"))def test_get_token(self,data):RequestsUtil("base","base_wx_url").analysis_yml_send_reqeust(data)@pytest.mark.parametrize("data", read_testcase_yaml("/testcases/get_tags.yaml"))def test_get_tags(self,data):RequestsUtil("base", "base_wx_url").analysis_yml_send_reqeust(data)

get_token.yml

- name: $csv{name}parameters:data_file: /testcases/data/get_token.csvrequest:method: geturl: /cgi-bin/tokenparams:grant_type: $csv{grant_type}appid: $csv{appid}secret: $csv{secret}extract:access_token: '"access_token":"(.*?)"'validate:- equals: {status_code: 200}- contains: $csv{assert_str}

get_token.csv

name,grant_type,appid,secret,assert_str
"获取鉴权码","client_credential","wx6b11b3efd1cdc2901","106a9c6157c4db5f6029918738f9529d2","access_token"
"appid必填检验","client_credential","","106a9c6157c4db5f6029918738f9529d2","errcode"

get_tags.yaml

- name: 获取标签request:method: geturl: /cgi-bin/tags/get?access_token={{access_token}}validate:equals: {status_code: 200}
- name: 获取标签222request:method: geturl: /cgi-bin/tags/get?access_token={{access_token}}validate:equals: {status_code: 200}
关键字:接口框架项目实战-pytest(六)csv数据驱动

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: