python接口自动化测试(二)

一、YAML

1、接口自动化测试框架YAML数据驱动的封装

@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.1、YAML详解(也是一种数据格式)

主要作用: 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 ()

1.2、统一接口请求封装

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提取)

2、pytest中的装饰器@pytest.mark.parametrize()的基础用法。

数据驱动: 其实就是把我们测试用例的数据放到excel , yaml , csv , mysql.然后通过去改变数据到改变测试用例的执行结果。
@pytest.mark.parametrize(args_ name,args_value)
args_ name: 参数名称
args_value: 参数值(列表、元祖、字典列表、字典元祖)参数的值有多少个用例就会执行几次
[]
()
[{},{},{}]
({},{},{})

3、yaml文件语法规则详解

1、yaml简介
yamlI它是- -个数据文件,保存的- -个数据格式,支持注释,换行,裸字符串(最小单位的数据)
2、 yaml用途
(1)用于全局配置文件:环境、数据库信息、账号信息、日志格式、报告名称。
(2)用于接口自动化里面的多一些复 杂的多接口串联。
(3)用于编写接口测试用例。
3、YAML语法规则
(1)区分大小写
(2)和python-样也是通过缩进的方式来表示层级关系(不同的是不能使用tab缩进,只用空格)
(3)和缩进多少层无关,只和左边是否对齐有关系。
(4)#表示注释
4、YAML数组组成举例
(1)map对象:键:(空格)值
(2)数组(列表):用一组横线开头

你可能感兴趣的:(python,开发语言)