pytest之yaml格式测试用例读写封装
- pytest之parametrize()实现数据驱动
- YAML格式测试用例读/写/清除/封装
- 结构类型
- Maps类型
- 数组类型
- pytest+parametrize+yaml
- test_api.py
- get_token.yaml
pytest之parametrize()实现数据驱动
@pytest.mark.parametrize(“参数名”,列表数据)
参数名:用来接收每一项数据,并作为测试用例的参数。
列表数据:一组测试数据。
import pytest@pytest.mark.parametrize("参数名", [列表数据])
def test_example(参数名):# 在这里编写测试用例,可以使用参数名作为测试数据pass
- 第一种用法:列表
class TestApi(CommonUtil):@pytest.mark.parametrize('caseinfo', ['百里','汤姆','一瑶'])def test_01_get_token(self,caseinfo):print("获取统一接口鉴权码"+caseinfo)
- 第二种用法:字典列表
class TestApi(CommonUtil):@pytest.mark.parametrize('arg1,arg2', [['name', '百里'], ['age', '18']])def test_01_get_token(self, arg1, arg2):print("获取统一接口鉴权码" + str(arg1)+ " "+ str(arg2))
YAML格式测试用例读/写/清除/封装
结构类型
# 读取yaml
import osimport yaml# 获取项目的根目录
def get_obj_path():# 获取当前文件的目录路径,并使用字符串 'common_01' 进行分割,返回分割后的第一个部分,即 'common_01' 之前的路径。return os.path.dirname(__file__).split('common_01')[0]def read_yaml(yaml_path):# 使用 with 语句打开文件,并使用模式 'r' 以只读方式打开文件with open(get_obj_path()+yaml_path, mode='r', encoding='utf-8') as f:# 使用 yaml 模块的 load 函数从文件中读取数据,并使用 FullLoader 加载器value = yaml.load(stream=f, Loader=yaml.FullLoader)# 返回从文件中读取的数据return valueif __name__ == '__main__':print(read_yaml('testcases/user_manage/get_token.yaml'))
Maps类型
Map为字典,一对key:value键值对
键:(空格)值。
# 示例 YAML 文件
person:name: Johnage: 30city: New York
数组类型
使用‘-’表示列表。
# Example YAML file: get_token.yaml
tokens:- token1- token2- token3
pytest+parametrize+yaml
test_api.py
import pytest
import requestsfrom common_01.common_util import CommonUtil
from common_01.yaml_util import read_yamlclass TestApi(CommonUtil):session = requests.session()# 定义一个参数化测试函数@pytest.mark.parametrize('caseinfo', read_yaml('testcases/user_manage/get_token.yaml'))def test_01_get_token(self, caseinfo):# 打印测试用例信息print("获取统一接口鉴权码: ")print(caseinfo)# 打印请求信息name = caseinfo['name']method = caseinfo['request']['method']url = caseinfo['request']['url']data = caseinfo['request']['data']print(caseinfo['validate'])# 发送 HTTP 请求res = self.session.request(method=method, url=url, params=data)# 打印返回结果print(res.json())#断言result =res.json()assert 'access_token' in result
get_token.yaml
-name: 获取统一的接口鉴权request:method: geturl: https://api.weixin.qq.com/cgi-bin/tokendata:grant_type: client_credentialappid: wx6b11b3efd1cdc290secret: 106a9c6157c4db5f6029918738f9529dvalidate: None