天花板级,接口自动化测试Yaml文件+Excel数据驱动(史上最细)

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

Yaml文件+接口自动化

首先安装好yaml, 命令:pip install PyYAML

第一步:新建yaml文件,并写入接口数据
新建yaml文件

31

写入接口所属数据

# 【login】:登录接口名称(自定义)
login1:
  
  # 【method】:请求方法,post或get
  method: "post"
  
  # 【url】:请求地址(字符串格式)
  url: "https://www.baidu.com"
  
  # 【head】:请求头信息(字典格式)
  head:
      "Content-Type": "application/json;charset=UTF-8"
  
  # 【data】:请求体(字典格式)
  data:
      "uuid": "BD123456"
      "password": "BD111111"

# 登录接口2
login2:
  method: "post"
  url: "https://www.baidu.com"
  head:
    "Content-Type": "application/json;charset=UTF-8"
  data:
    "uuid": "BD123456"
    "password": "BD111111"

第二步:写一个打开yaml文件的公用方法(另建一个文件py)
编写打开yaml文件方法

import yaml


def load_yaml(path):
    """
    :param path: yaml文件地址
    :return: 返回yaml文件数据
    """
    file = open(path, 'r', encoding='utf-8')
    data = yaml.load(file, Loader=yaml.FullLoader) # 表示全加载文件
    return data

第三步:写一个接口请求方法(另建一个文件)

import json
import requests
from UI.Common.OpenYamlFileMethod import load_yaml

def test_url(txt='status_code'):
    """
    接口请求
    :param url_title: 需要测试的yaml文件中的接口标题
    :param txt: 需要返回相应的内容,默认返回相应状态码
    :return:
    """
    # 将yaml文件数据传入
    data_yaml = load_yaml(r'../UI/TestExampleFile/UrlYamlFile.yaml')

    # 从yaml文件中获取接口标题,并传入data。(指定哪条接口测试)
    data = data_yaml['login']

    # data是一个字典,需将数据拆分出来保存到变量中, 然后才能引用到接口中,不用变量直接引用会报错
    url = data['url']
    method = data['method']
    datas = data['data']
    heads = data['head']

    # 用于保持会话(session)
    s = requests.session()
    # getattr:对象映射。json.dumps:将datas的数据转换成json格式。(method: 请求方法;url: 请求地址;datas: 请求体;head: 请求头)
    res = getattr(s, method)(url=url, data=json.dumps(datas), headers=heads)
    # 对象映射, 默认返回相应状态码
    print(getattr(res, f'{txt}'))

test_url()

requests模块传请求体参数时, 有两种方式:
data传参:
数据报文:当传入类型为dict字典类型,默认情况下以form表单的方式传参,格式:a=1&b=2&c=3
数据报文:当传入类型为sit类型,默认情况下:text/plain

json传参:
不管是dict还是str,默认格式都为:{“a”=1,“b”=2}
数据格式转换:
json.dumps(data) 序列化:把字典格式数据转换为str格式;
json.loads(data) 反序列化:把str格式转换成字典格式;

请求方法
requests.get()
requests.post()
requests.put()

requests.session():用于保持会话(session)
除了requests.session()外,其他请求方法的参数都差不多,都包含url,params, data,headers,cookies,files,auth,timeout等等

请求参数
url:字符串格式,参数也可以直接写到url中params:url参数,字典格式
data:请求数据,字典或字符串格式
headers:请求头,字典格式
cookies:字典格式,可以通过携带cookies绕过登录
files:字典格式,用于混合表单(form-data)中上传文件
auth:Basic Auth授权,数组格式 auth=(user,password)
timeout:超时时间(防止请求一直没有响应,最长等待时间),数字格式,单位为秒

响应解析
res.status_code:响应的HTTP状态码
res.reason:响应的状态码含义
req.text:响应的文本格式,按req.encoding解码
req.content:响应的二进制格式
req.encoding:解码格式,可以通过修改req.encoding='utf-8’来解决一部分中文乱码问题
req.apparent_encoding:真实编码,由chardet库提供的明显编码
req.json():(注意,有括号),响应的json对象(字典)格式,慎用!如果响应文本不是合法的json文本,或报错
req.headers:响应头
req.cookies:响应的cookieJar对象,可以通过req.cookies.get(key)来获取响应cookies中某个key对应的值

Excel数据驱动,接口自动化

问题1:做接口测试,常常需要将上一个接口的值传入到下一个接口中,这里使用了jsonPath语法来解决;

问题2:发送请求前,常常需要传入很多变量,这里变量不一定是上一个接口的响应,有可能是时间、计算后的数据等。这里使用替换字符串来解决。

问题3:接口发送是,涉及到很多JSON格式问题,以下也是使用函数来解决。

问题4:注意使用python跑接口测试前, 需把fiddler等其它网络代理给关了,否则无法跑测试

1、创建excel,拟定好excel文件格式。

天花板级,接口自动化测试Yaml文件+Excel数据驱动(史上最细)_第1张图片

2、写两个方法,一个读取excel方法,一个发送请求方法,有注释

import json
import requests
from openpyxl import load_workbook


class ExcelOperate:
    """
    excel文件操作工具包
    """

    #  读取excel
    def read_excel(self, filename, sheet_name, cases_title):
        """
        :param filename: excel文件名称
        :param sheet_name: sheet页名称
        :param cases_title: 用例标题名称
        :return:
        """
        excel = load_workbook(rf'../data/{filename}')  # 读取excel 【如果使用相对路径,参照路径为调用这个方法的路径】
        sheet = excel[sheet_name]  # 读取sheet页
        data_list = []  # 定义空列表,将获取到excel的数据存放至此

        # 定义个false值,后面做判断用
        false = False

        # 遍历获取到的excel的值(行行遍历)
        for i in sheet.values:

            # 将(用例标题)为None的用例存放至data_list
            if false:
                if i[2] is None:
                    data_list.append(i)
                else:
                    break
            # 将(用例标题)为True的用例存放至data_list
            if str(i[2]) in cases_title:
                data_list.append(i)
                false = True

        #  将列表转换成元组,方便后面的接口方法接收
        tup1 = tuple(data_list)
        # 返回元组
        return tup1

# 接口请求方法
    def url_request(self, po, ur, he, da):
        """
        po请求方式,ur请求地址,he请求头,da请求体。传入的he和da必须是json格式文本
        json.dumps:转换成json格式,json.loads转换成python可识别的JSON格式,requests模块默认的是拉丁语,需要转换成utf-8
        有些请求头是空的, 有些请求体是空的, 所以用到if
        :param po: 请求方法
        :param ur: 请求地址
        :param he: 请求头
        :param da: 请求体
        :return:
        """
        if po and ur and he and da:
            res = getattr(requests, po)(
                url=ur,
                data=json.loads(json.dumps(da)).encode("utf-8"),
                headers=eval(he)
            )
            # 获取接口响应
            text_ = getattr(res, "text")
            # 返回接口响应(返回的是str)
            return text_
        if (he is None) and da:
            res = getattr(requests, po)(
                url=ur,
                data=json.loads(json.dumps(da)).encode("utf-8")
            )
            text_ = getattr(res, "text")
            return text_
        if (da is None) and he:
            res = getattr(requests, po)(
                url=ur,
                headers=eval(he)
            )
            text_ = getattr(res, "text")
            return text_
        if (he is None) and (da is None):
            res = getattr(requests, po)(
                url=ur
            )
            text_ = getattr(res, "text")
            return text_

3、然后就可以发送请求了。

# 实例化
ua = UrlClass()
# 调用read_excel方法,获取excel('1.登录')接口值
dt = ua.read_excel('1.登录')
# 调用url_request方法发送请求
ra = ua.url_request(dt[1], dt[2], dt[3], dt[4])
# 使用jsonpath语法, 提取token
token = jsonpath(json.loads(ra), "$.data.uucToken")
uuid = jsonpath(json.loads(ra), "$.data.uuid")

# 调用read_excel方法,获取excel('2.查询用户')接口值
dt2 = ua.read_excel('2.查询用户')
# 将token值替换自定义变量,替换后传回变量,以达到替换目的
dt2 = str(dt2).replace('test_2214', str(token[0]))
dt2 = str(dt2).replace('test_2215', str(uuid[0]))
# 替换变量需是str,调用接口请求需是元组, 所以替换完后需将str转成元组
dt2 = tuple(eval(dt2))
# 发送请求
ra2 = ua.url_request(dt2[1], dt2[2], None, None)
# 打印响应
print(ra2)
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

天花板级,接口自动化测试Yaml文件+Excel数据驱动(史上最细)_第2张图片

二、接口自动化项目实战

天花板级,接口自动化测试Yaml文件+Excel数据驱动(史上最细)_第3张图片

三、Web自动化项目实战

天花板级,接口自动化测试Yaml文件+Excel数据驱动(史上最细)_第4张图片

四、App自动化项目实战

天花板级,接口自动化测试Yaml文件+Excel数据驱动(史上最细)_第5张图片

五、一线大厂简历

天花板级,接口自动化测试Yaml文件+Excel数据驱动(史上最细)_第6张图片

六、测试开发DevOps体系

天花板级,接口自动化测试Yaml文件+Excel数据驱动(史上最细)_第7张图片

七、常用自动化测试工具

天花板级,接口自动化测试Yaml文件+Excel数据驱动(史上最细)_第8张图片

八、JMeter性能测试

天花板级,接口自动化测试Yaml文件+Excel数据驱动(史上最细)_第9张图片

九、总结(尾部小惊喜)

不要因为困难而退缩,不要因为失败而气馁,奋斗是人生的密码,只有坚持不懈,才能书写出辉煌的篇章。相信自己的力量,勇往直前,你将创造属于自己的壮丽人生,成就无限可能。

每一次努力都是为了让自己变得更好,每一次奋斗都是为了实现更大的梦想。不要停下脚步,不要放弃追求,勇往直前,你将创造出属于自己的辉煌人生。相信自己,坚持奋斗,未来将无限可能。

不论前方多险峻,只要坚持向前,勇往直前,你就能攀登高峰,收获辉煌。相信自己的能力,坚守信念,努力奋斗,你将创造属于自己的辉煌人生。不要停下脚步,勇敢追逐,只要不放弃,就能创造属于自己的辉煌人生。

你可能感兴趣的:(软件测试,自动化测试,接口自动化测试,软件测试,接口测试,接口自动化,接口自动化测试,python自动化测试,自动化测试,测试开发)