@pytest.mark.parametrize(args_name,args_value)
args_name.参数名
args_value :参数值(使用ist列表, tuple元祖,字典列表,字典元素等)在数据中有多少个值,那么
接口用例就会执行多少次。
创建test_api.py文件
import pytest
class TestApi:
#基础用法
@pytest.mark.parametrize('args', ['百里', '星瑶', '依然'])
def test_api(self, args):
print(args)
#解包
@pytest.mark.parametrize('name,age', [['百里', 13], ['星瑶', 14], ['依然', 10]])
def test_api(self, name, age):
print(name, age)
if __name__ == '__main__':
pytest.main(['-vs','test_api.py'])
主要作用: 1、配置文件 2、测试用例
数据组成:
1、map对象:键(空格)值 name:百里
2、列表,用 - 开头的
datas:
- name1: 百里
- name2: 星瑶
- name3: 依然
创建get_token.yml
-
name: 获得统一的鉴权码token
request:
method: get
url: https://api.weixin.qq.com/cgi-bin/token
data:
grant_type: client_credential
appid: wx6b11b3efd1cdc290
secret: 106a9c6157c4db5f602991873819529d
validate: None
创建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:
value = yaml.load(stream=f, Loader=yaml.FullLoader)
return value[key]
# 写入extract.yml文件
def read_extract_yaml(self, data):
with open(os.getcwd() + "./extract.yml", mode="w", encoding="utf-8") as f:
yaml.load(data=data, stream=f, allow_unicode=True)
# 清除extract.yml文件
def clearn_extract_yaml(self):
with open(os.getcwd() + "./extract.yml", mode="w", encoding="utf-8") as f:
f.truncate()
# 读取测试用例yml文件
def read_testcase_yaml(self, yaml_name):
with open(os.getcwd() + "/testcases/" + yaml_name, mode="r", encoding="utf-8") as f:
value = yaml.load(stream=f, Loader=yaml.FullLoader)
return value
创建testcase目录下test_send_request.py文件
import requests
import re
import pytest
from ui.common.yaml_util import YamlUtil
class Test:
@pytest.mark.parametrize('caseinfo',YamlUtil().read_testcase_yaml('get_token.yml') )
def test_get_token(self, caseinfo) :
#发送get请求Ctr1+左键
method =caseinfo['request'][ 'method']
url = caseinfo['request']['url']
data = caseinfo['request']['data']
rep =Test.session.request (method, url=url, params=data)
print(rep.json() )
YamlUtil().write_extract_yaml ({ 'access_token':rep.json() ['access_token'] })
assert 'access_token' in rep.json ()
rep =Test.session.request (method, url=url, params=data)
在common目录下创建requests_util.py文件
import json
import requests
class RequestsUtil:
session = requests.session()
def send_requests(self, method, url, data, **kwargs):
method = str(method).lower()
rep = None
if method == 'get':
rep = RequestsUtil.session.request(method, url=url, params=data, **kwargs)
else:
data = json.dumps(data)
rep = RequestsUtil.session.request(method, url=url, data=data, **kwargs)
return rep.text
打通接口自动化还需要掌握哪些技能?
遗留问题:
(1) YAML文件里面没有办法使用动态参数。(直 接在YAML调用外部的方法)
(2) YAML文件里面没有办法使用文件,上传(直接在YAML里面写文件路径即可)
(3) YAML文件里面无法实现断言? (在YAML里面写实现)
(4) YAML文件里面数据量太大怎么办? (使用csv )
(5)接口关联(支持正则提取以及json提取)
数据驱动: 其实就是把我们测试用例的数据放到excel , yaml , csv , mysql.然后通过去改变数据到改变测试用例的执行结果。
@pytest.mark.parametrize(args_ name,args_value)
args_ name: 参数名称
args_value: 参数值(列表、元祖、字典列表、字典元祖)参数的值有多少个用例就会执行几次
[]
()
[{},{},{}]
({},{},{})
1、yaml简介
yamlI它是- -个数据文件,保存的- -个数据格式,支持注释,换行,裸字符串(最小单位的数据)
2、 yaml用途
(1)用于全局配置文件:环境、数据库信息、账号信息、日志格式、报告名称。
(2)用于接口自动化里面的多一些复 杂的多接口串联。
(3)用于编写接口测试用例。
3、YAML语法规则
(1)区分大小写
(2)和python-样也是通过缩进的方式来表示层级关系(不同的是不能使用tab缩进,只用空格)
(3)和缩进多少层无关,只和左边是否对齐有关系。
(4)#表示注释
4、YAML数组组成举例
(1)map对象:键:(空格)值
(2)数组(列表):用一组横线开头