五、YAML文件实现接口自动化
@pytest.mark.parametrize() 是用来给用例传递参数的一种方式@pytest.mark.parametrize(args_name,args_value) # args_name:参数名 # args_value:参数值(列表,元祖,字典列表,字典元祖),有多个值用例就会执行多少次# 创建 test_api.py 文件 import pytest class TestApi: @pytest.mark.parametrize("args", ["测试", "自动化", "学习"]) def test_api_01(self, args): # parametrize的参数"args" 和 test_api_01的参数 args一样 print(args) @pytest.mark.parametrize("name, age", [["王勇", 29], ["薇薇", 18]]) def test_api_02(self, name, age): print(name, age) if __name__ == '__main__': pytest.main(["-vs", "./test_api.py"])
二、YAML 文件操作
2.1 yaml 简介以及语法规则
yaml是一种数据格式,支持注释,换行,多行字符串,裸字符串(整形,字符串)。
1.区分大小写
2.使用缩进表示层级,不能使用tab键缩进,只能用空格(和python一样)
3.缩进没有数量的,只要前面是对其的就行。
4.注释是#
YAML、YML在线编辑(校验)器 https://www.bejson.com/validators/yaml_editor/#google_vignette
# 多行的写法 wangyong: name: "王勇" age: 29
// json 格式 { "wangyong": { "name": "王勇", "age": 29 } }
# 一行写法 wangyong: {name: 王勇, age: 29}
// json 格式 { "wangyong": { "name": "王勇", "age": 29 } }
# 多行的写法 - wangyong: - name: 王勇 - age: 29 - weiwei: - name: 薇薇 - age: 18
// json 格式 [ { "wangyong": [ { "name": "王勇" }, { "age": 29 } ] }, { "weiwei": [ { "name": "薇薇" }, { "age": 18 } ] } ]
# 一行的写法 - wangyong: [{name: 王勇}, {age: 29}] weiwei: [{name: 薇薇}, {age: 18}]
// json 格式 [ { "wangyong": [ { "name": "王勇" }, { "age": 29 } ] }, { "weiwei": [ { "name": "薇薇" }, { "age": 18 } ] } ]
三、YAML实现接口自动化
pip install pyyaml
# test_api.yaml - wangyong: - name: 王勇 - age: 29 - weiwei: - name: 薇薇 - age: 18# yaml_util.py import yaml class YamlUtil: yaml_file = None def __init__(self, yaml_file): """ 通过 init 方法 把 yaml 文件传入到这个类 :param yaml_file: """ self.yaml_file = yaml_file def read_yaml(self): """ 读取 yaml, 对 yaml 文件进行发序列化, 就是把 yaml 格式转换成 字典格式 :return: """ with open(self.yaml_file, encoding="utf-8") as f: # yaml.load(stream, Loader) # Loader 加载方式 value = yaml.load(f, Loader=yaml.FullLoader) """ [{'wangyong': [{'name': '王勇'}, {'age': 29}]}, {'weiwei': [{'name': '薇薇'}, {'age': 18}]}] <class 'list'> """ print(value, type(value)) def write_yaml(self): """ :return: """ pass if __name__ == '__main__': yaml_util = YamlUtil("./interface_testcase/test_api.yaml") yaml_util.read_yaml()
# testcase/interface_testcase/test_api.py import pytest import requests from testcase.yaml_util import YamlUtil class TestApi: # 访问微信公众号接口测试 @pytest.mark.parametrize("args", YamlUtil('./testcase/interface_testcase/test_api.yaml').read_yaml()) def test_request_url(self, args): # print(args) url = args['request']["url"] params = args["request"]["params"] res = requests.get(url, params=params) # 目前网页已经无法访问,思路是这个思路 # print(res.text) # 获取返回文本内容 # assert args["vaildate"]["eq"] in res.text 断言不全,可能存在用例失败的情况,所以断言需要封装# testcase/interface_testcase/test_api.yaml # 用例1 - name: 获取token鉴权码的接口 request: url: https://api.weixin.gg.com/cgi-bin/token method: get headers: Content-Type: application/json params: grant_type: client_credential ppid: wx6b11b3efd1cdc290 secret: 106a9c6157c4db5f6029918738f9529d vaildate: - eq: {express_in: 7200} # 用例2 - name: 获取token鉴权码的接口 request: url: https://api.weixin.gg.com/cgi-bin/token method: get headers: Content-Type: application/json params: ppid: wx6b11b3efd1cdc290 secret: 106a9c6157c4db5f6029918738f9529d vaildate: - eq: {express_in: 7200}# testcase/yaml_util.py import yaml import os class YamlUtil: yaml_file = None def __init__(self, yaml_file): """ 通过 init 方法 把 yaml 文件传入到这个类 :param yaml_file: """ self.yaml_file = yaml_file def read_yaml(self): """ 读取 yaml, 对 yaml 文件进行发序列化, 就是把 yaml 格式转换成 字典格式 :return: """ with open(self.yaml_file, encoding="utf-8") as f: # yaml.load(stream, Loader) # Loader 加载方式 value = yaml.load(f, Loader=yaml.FullLoader) """ [{'wangyong': [{'name': '王勇'}, {'age': 29}]}, {'weiwei': [{'name': '薇薇'}, {'age': 18}]}] <class 'list'> """ return value def write_yaml(self): """ :return: """ pass# all.py import os import pytest if __name__ == '__main__': pytest.main() os.system('allure generate ./temp -o ./report --clean');; pytest.ini [pytest] addopts = -vs --alluredir ./temp testpaths = ./testcase/interface_testcase/test_api.py python_files = test*.py python_classes = Test* python_functions = test markers = smoke:冒烟模块 usermanage:用户管理模块 productmanage:商品管理模块






浙公网安备 33010602011771号