数据驱动yaml
yaml是一种数据序列化格式
1、yaml支持的数据格式
字典:键值对(key:value)
数组:[],使用时yaml文件前加“-”
字符、布尔值、整数、浮点数、NULL、时间、日期
2、读取、写入、清空方法(common->yaml.util.py)
import os
import yaml
class YamlUtil:
# 读取extract.yml文件
def read_extract_yaml(self, key):
with open(os.getcwd()+"/extract.yml", mode='r', encoding='utf-8') as f:
# 读取f文件流 读取方式FullLoader,然后复制给value
value = yaml.load(stream=f, Loader=yaml.FullLoader)
return value[key]
# 写入extract.yml文件
def write_extract_yaml(self, data):
with open(os.getcwd()+"/extract.yml", mode='a', encoding='utf-8') as f:
# 写入的数据从data传入
yaml.dump(data, stream=f, allow_unicode=True)
# 清空extract_yaml文件(将这个方法放入到前置后置文件中(conftest.py),每次运行用例 他就会自动清空yaml文件内容,无需调佣,自动执行=True)
def clear_extract_yaml(self):
# 打开yaml文件
with open(os.getcwd()+'/extract.yml', mode='w', encoding='utf-8') as f:
# 清空yaml文件
f.truncate()
# 读取extract.yml文件
def read_gettoken_yaml(self, yaml_name):
with open(os.getcwd()+"/TestSaasWork/"+yaml_name, mode='r', encoding='utf-8') as f:
# 读取f文件流 读取方式FullLoader,然后复制给value
value = yaml.load(stream=f, Loader=yaml.FullLoader)
return value
3、yaml文件(TestSaasWork->get_token.yml)
-
name: 获取统一鉴权码token
request:
method: post
url: url
data:
account: 账号
password: 密码
headers:
Content-Type: application/x-www-form-urlencoded
clientAppId: xxx
validate: None
4、 测试用例(test_login.py)
import pytest
import requests
from common.yaml_util import YamlUtil
class TestLoginRequest:
# @staticmethod
# def setup(self):
# print('在每个用例之前执行一次')
# @staticmethod
# def teardown(self):
# print('在每个用例之后执行一次')
# @pytest.mark.smoke
@pytest.mark.parametrize('caseinfo', YamlUtil().read_gettoken_yaml('get_token.yml'))
def test_login(self, caseinfo):
print('获取token')
print(caseinfo['name'])
name = caseinfo['name']
method = caseinfo['request']['method']
url = caseinfo['request']['url']
data = caseinfo['request']['data']
headers = caseinfo['request']['headers']
response = requests.request(method, url=url, params=data, headers=headers)
login_token = response.json()['data']['token']['token']
authorization = response.json()['data']['token']['principal']
print('login_token', login_token)
print('authorization', authorization)
if __name__ == '__main__':
# TestLoginRequest().test_login()
pytest.main(['-vs'])