一.@pytest.mark.parametrize()基本用法
@pytest.mark.parametrize(args_name,args_value) args_name:参数名 args_value:参数值(列表,元组,字典列表,字典元组),有多少个值,用例就会执行多少次。 第一种:
import pytest
class TestApi:
@pytest.mark.parametrize('args',['百里','星耀','依然'])
def test_01_pp(self,args):
print(args)
if __name__ == '__main__':
pytest.main()
第二种:跟unittest的ddt里面的@unpack解包的一样
import pytest
class TestApi:
@pytest.mark.parametrize('name,age',[['百里','18'],['星耀','20']])
def test_01_pp(self,name,age):
print(name,age)
if __name__ == '__main__':
pytest.main()
二.YAML文件详解–实现接口自动化
1.用于全局的配置文件 ini/yaml 2.用于写测试用例(接口测试用例)
yaml简介: yaml是一种数据格式,支持注释,换行,多行字符串,裸字符串(整形,字符串)。 格式校验网址:https://www.bejson.com/validators/yaml_editor/ 语法规则:
- 区分大小写
- 使用缩进表示层级,不能是同tab健缩进,只能用空格(和python一样)
- 缩进没有数量的,只要前面是对其的就行。
- 注释是#
数据组成:
一行的写法:msxy:(name: 百里,age: 18) 多行的写法:
msxy:
name: 百里
age: 18
一行的写法:msjy:[(name: 百里),(age: 18)] 多行的写法:
-
msjy:
- name: 百里
- age: 18
三.接口自动化实战
写在py文件的用例
class TestApi:
def test_01_login(self):
url = 'https://api.weixin.qq.com/cgi-bin/token'
params = {
'grant_type': 'client_credential',
'appid': 'wx6b11b3efd1cdc290',
'secret': '106a9c6157c4db5f6029918738f9529d'
}
res = requests.get(url,params=params)
print(res.text)
数据驱动:比较粗糙
test_api.py文件(封装)
import pytest
import requests
import os
from testcase.yaml_util import YamlUtil
class TestApi:
@pytest.mark.parametrize('args',YamlUtil(os.getcwd()+'/testcase/test_api.yaml').read_yaml())
def test_01_pp(self,args):
url = args['request']['url']
params = args['request']['params']
res = requests.get(url,params=params)
print(res.text)
yaml_util.py 读取yaml文件
import yaml
class YamlUtil:
#通过init方法把yaml文件传入这个类 :yaml_file:
def __init__(self,yaml_file):
self.yaml_file = yaml_file
#读取yaml文件
def read_yaml(self):
"""
读取yaml,对yaml反序列化,就是把我们的yaml格式转换为dict格式。
:return:
"""
with open(self.yaml_file,encoding='utf-8') as f:
value = yaml.load(f, Loader=yaml.FullLoader)
return value
test_api.yaml(yaml测试用例)
#用例1
-
name: 获得token鉴权码的接口
request:
url: https://api.weixin.qq.com/cgi-bin/token
method: get
headers:
Content-Type: application/json
params:
grant_type: client_credential
appid: wx6b11b3efd1cdc290
secret: 106a9c6157c4db5f6029918738f9529d
validate:
- eq: {expires_in: 7200}
#用例2
-
name: 获得token鉴权码的接口
request:
url: https://api.weixin.qq.com/cgi-bin/token
method: get
headers:
Content-Type: application/json
params:
appid: wx6b11b3efd1cdc290
secret: 106a9c6157c4db5f6029918738f9529d
validate:
- eq: {expires_in: 7200}
#用例3
-
name: 获得token鉴权码的接口
request:
url: https://api.weixin.qq.com/cgi-bin/token
method: get
headers:
Content-Type: application/json
params:
grant_type: client_credential
secret: 106a9c6157c4db5f6029918738f9529d
validate:
- eq: {expires_in: 7200}
还需要学习:
-
断言的封装。 -
allure报告的定制。 -
关键字驱动和数据驱动结合实现接口自动化测试。 -
python的反射 正常:先初始化对象,再调方法。 反射:通过对象得到类对象,然后通过类对象调用方法 -
jenkins的持续集成和allure报告集成,并且根据自动化的报告的错误率发送电子邮件
|