Python3+Pytest 接口自动化测试全方案设计与开发-No.2接口自动化框架编写-3-配置文件

结果

{‘person1’: {‘name’: ‘xiaoming’, ‘age’: ’18’}, ‘person2’: {‘name’: ‘xiaohong’, ‘age’:

’20’}}​​​​​​​

字典嵌套列表​​​​​​​​​​​​​​​​​​​​​

  • 需求
  • {person: [“1”, “2”, “3”]}
  • 示例

persion:

  • “1”

  • “2”

  • “3”

  • 结果

  • {‘person’: [‘1’, ‘2’, ‘3’]}

列表嵌套字典

  • 需求

[{

“username1”: “test1”

}, {

“password1”: “111”,

“username2”: “test2”,

“password2”: “222”

}]

示例

  • username1: “test1”

  • password1: “111”

username2: “test2”

password2: “222”

结果

[{‘username1’: ‘test1’}, {‘password1’: 111, ‘username2’: ‘test2’, ‘password2’: 222}]

列表嵌套列表

  • 需求
  • [[“a”,”b”,”c”],[“1″,”2″,”3”]]
  • 示例

  • “a”

  • “b”

  • “c”

  • “1”

  • “2”

  • “3”

结果

[[‘a’, ‘b’, ‘c’], [1, 2, 3]]

注意:

pycharm 会自动将 yaml 中的 tab 转化成空格。但是不能复制 “tab 键 ” ,不会进行转化。

同级别左侧必须要对齐,少个空格无所谓。

读取 Yaml 文件

读取单个 Yaml 文档

yaml 文档

#data.yaml
"用户名称": "test123"
"密码": "123456"

示例函数: demo.py 中文问题 (windows) :

encoding=’utf-8′ import yaml

import  yaml
2)打开文件
with open("./data.yml","r",encoding='utf-8') as f:
3)使用yaml读取文件
    data= yaml.safe_load(f)
3、输出这个文件
    print(data)

读取实际上就是先使用 with open 的形式获取文件对象,再使用 yaml 中的 load 方法加载这个文件对象 , 通过

load 方法,一个字符串变成了一个字典

结果

{‘ 用户名称 ‘: ‘test123’, ‘ 密码 ‘: ‘123456’}

5.4.2 读取多个 Yaml 文档

多个文档在一个 yaml 文件,使用 — 分隔方式来分段

yaml 文档

” 用户名称 2″: “test456”

” 密码 “: “123456”

示例

import yaml
with open("./data.yaml",'r') as f:
    data = yaml.safe_load_all(f)
    for i in data:
        print(i)

​​​​​​​ 结果

{‘ 用户名称 1’: ‘test123’, ‘ 密码 ‘: ‘123456’}

{‘ 用户名称 2’: ‘test456’, ‘ 密码 ‘: ‘123456’}

yaml 封装

@File : YamlUtil.py

1、创建类
import os
import yaml

class YamlReader:
2、初始化,文件是否存在
    def __init__(self,yamlf):
        if os.path.exists(yamlf):
            self.yamlf = yamlf
        else:
            raise FileNotFoundError("文件不存在")
        self._data = None
        self._data_all = None
3、yaml读取
    #单个文档
    def data(self):
        #第一次调用data,读取yaml文档,如果不是,直接返回之前保存的数据
        if not self._data:
            with open(self.yamlf,'rb') as f:
                self._data = yaml.safe_load(f)
            return self._data
    #多个文档
    def data_all(self):
        #第一次调用data,读取yaml文档,如果不是,直接返回之前保存的数据
        if not self._data_all:
            with open(self.yamlf,'rb') as f:
                self._data_all = list(yaml.safe_load_all(f))
            return self._data_all

配置文件设置

配置文件 conf.yaml

BASE:
#log等级
log_level: "debug"
#扩展名
log_extension: ".log"
test:
url: "http://211.103.136.242:8064"
case_file: "testdata.xlsx"
case_sheet: "美多商城接口测试"

基本目录配置​​​​​​​

@File : Conf.py
import os
from utils.YamlUtil import YamlReader
1、获取项目基本信息
#获取当前项目的绝对路径
current = os.path.abspath(__file__)
BASE_DIR = os.path.dirname(os.path.dirname(current))
#定义config目录的路径
_config_path = BASE_DIR+os.sep+"config"
#定义conf.yml文件的路径
_config_file = _config_path+os.sep+"conf.yml"
def get_config_path():
    return _config_path
def get_config_file():
    return _config_file
#2、读取配置文件
#创建类
class ConfigYaml:
初始化yaml读取配置文件
    def __init__(self):
        self.config = YamlReader(get_config_file()).data()
定义方法获取需要信息
    def get_conf_url(self):
        return self.config['BASE']['test']['url']

if __name__ == '__main__':
    conf_read = ConfigYaml()
    print(conf_read.get_conf_url())

Python3+Pytest 接口自动化测试全方案设计与开发-No.2接口自动化框架编写-3-配置文件

修改测试用例

-*- coding: utf-8 -*-
@Time : 2021/12/7 13:47
@Author : jeffky
@File : Test_Mail.py
1、导包
from pprint import pprint
from utils.RequestsUtil import requests_get, requests_post, Request
from config.Conf import ConfigYaml
#登录
'''
登录成功
http://211.103.136.242:8064
/authorizations/
        POST
        json
        {
            "username":"python",
            "password":"12345678"
        }
        user_id': 1, 'username': 'python'
'''

import requests
2、定义登录方式

conf_y = ConfigYaml()
url_path = conf_y .get_conf_url()
def login():

3、定义测试数据
    url = url_path+'/authorizations/'
    data = {
            "username":"python",
            "password":"12345678"
        }

4、发送POST请求
    r = requests_post(url,json=data)
    request = Request()
    r = request.post(url, json=data)
5、输出结果
    pprint(r)
    return r['body']

'''
个人信息
获取个人信息正确
/user/
get
认证:
js
 headers: {
           'Authorization': 'JWT ' + this.token
 },
'''
def info():
    # 1、参数
    url = url_path+'/user/'
    token = login()['token']
    headers={
        'Authorization': 'JWT ' + token
    }
    # 2、get请求
    # r = requests_get(url,headers = headers)
    request =Request()
    r = request.get(url,headers = headers)
    # 3、输出
    pprint(r)
'''
商品列表数据正确
请求方式: GET /categories/(?P<category_id>\d+)/skus?page=xxx&page_size=xxx&ordering=xxx`
/categories/115/skus/
get json
 {
 "page":"1",
 "page_size": "10",
 "ordering": "create_time"
 }

'''
def goods_list():
    # 1&#x3001;&#x53C2;&#x6570;
    url =  url_path+'/categories/115/skus/'
    data = {
 "page":"1",
 "page_size": "10",
 "ordering": "create_time"
 }

    # 2&#x3001;get&#x8BF7;&#x6C42;
    # r = requests_get(url,json= data)
    request =Request()
    r = request.get(url,json=data)
    # 3&#x3001;&#x8F93;&#x51FA;
    pprint(r)

'''
&#x6DFB;&#x52A0;&#x8D2D;&#x7269;&#x8F66;&#x6210;&#x529F;
/cart/
login_4 post
json
{"sku_id": "3","count": "1", "selected": "true"}

{"Authorization": "JWT ${token}$"}

'''
def cart():
    # 1&#x3001;&#x53C2;&#x6570;
    url =  url_path+'/cart/'
    token = login()['token']
    headers={
        'Authorization': 'JWT ' + token
    }
    data = {"sku_id": "3","count": "1", "selected": "true"}
    # 2&#x3001;get&#x8BF7;&#x6C42;
    # r = requests_post(url,headers = headers,json=data)
    request =Request()
    r = request.get(url,headers = headers,json=data)
    # 3&#x3001;&#x8F93;&#x51FA;
    pprint(r)
'''
&#x4FDD;&#x5B58;&#x8BA2;&#x5355;
/orders/
post
login_4 post
json
{ "address":"1","pay_method":"1" }
{"Authorization": "JWT ${token}$"}
'''
def order():
    # 1&#x3001;&#x53C2;&#x6570;
    url =  url_path+'/orders/'

    token = login()['token']
    headers={
        'Authorization': 'JWT ' + token
    }
    data = { "address":"1","pay_method":"1" }
    # 2&#x3001;get&#x8BF7;&#x6C42;
    # r = requests_post(url,headers = headers,json=data)
    request =Request()
    r = request.post(url,headers = headers,json=data)
    # 3&#x3001;&#x8F93;&#x51FA;
    pprint(r)

if __name__ == '__main__':
    login()
    # info()
    # goods_list()
    # cart()
    # order()</category_id>

Original: https://blog.csdn.net/python_jeff/article/details/121778175
Author: tester Jeffky
Title: Python3+Pytest 接口自动化测试全方案设计与开发-No.2接口自动化框架编写-3-配置文件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/774758/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • pandas读取和写入数据

    1.CSV文件的读取 import pandas as pd df = pd.read_csv(‘D:/desktop/example.csv’,encoding = ‘gbk’)…

    Python 2023年8月8日
    091
  • 安科瑞配电室环境监控系统解决方案-Susie 周

    1、概述 配电室综合监控系统包括智能监控系统屏、通讯管理机、UPS电源、视频监控子系统(云台球机、枪机)、环境监测子系统(温度、湿度、水浸、烟感)、控制子系统(灯光、空调、除湿机、…

    Python 2023年9月16日
    026
  • 前端面试第一周快速复盘,不标准的面试经验分享 (一)

    壹 ❀ 引 从深圳离职回武汉也一周多了,上周不慌不忙的安排了两场面试,到本周一为止两家都收到了offer,考虑到某些原因还是把两个offer都拒了。其实说实话也没想到面试能有这么顺…

    Python 2023年10月22日
    050
  • Anaconda如何安装库(包)?

    博主的专业是地理信息,并不是编程这个专业的,但是地理信息这个专业就很难受,想学好这个专业,像做一些科研方面的工作,就必须用到编程的知识。并且平时老师也会留一些作业要用到代码来完成,…

    Python 2023年8月1日
    0102
  • Pandas进阶柒 缺失数据

    Pandas进阶柒 缺失数据 pandas进阶系列根据datawhale远昊大佬的joyful pandas教程写一些自己的心得和补充,本文部分引用了原教程,并参考了《利用Pyth…

    Python 2023年8月22日
    049
  • 排序算法python版(7)-计数排序算法

    推荐文章 很多小伙伴都发现了,用户自主「申请上首页」的按钮取消了,那博主们写的文章还有上首页曝光的机会吗?我们的回答是”当然有!!!”虽然我们取消了上首页申…

    Python 2023年5月24日
    082
  • 终于实现了一门属于自己的编程语言

    前言 都说程序员的三大浪漫是:操作系统、编译原理、图形学;最后的图形学确实是特定的专业领域,我们几乎接触不到,所以对我来说换成网络更合适一些,最后再加上一个数据库。 这四项技术如果…

    Python 2023年10月22日
    035
  • Scrapy分布式爬虫实战(一):Scrapy基础知识

    是一个非常优秀的爬虫框架,通过 框架,可以非常轻松地实现强大的爬虫系统,我们只需要将精力放在抓取规则以及如何处理抓取的数据上即可,本章介绍 的基础架构、安装以及 Scrapy Sh…

    Python 2023年10月1日
    044
  • 一行Python代码即可实现数据可视化大屏

    今天分享一个 Python 可视化大屏项目,GitHub 地址: https://github.com/TurboWay/big_screen,项目结构简单使用方便,直接传数据就可…

    Python 2023年8月9日
    057
  • 【Java-注解】RequestMapping中produces属性作用

    可以设置返回数据的类型以及编码,可以是json或者xml `@ResponseBody@RequestMapping(value=”/xxx”,produc…

    Python 2023年6月10日
    093
  • 二、JavaScript——Hello World

    1. 创建文件 提前在本地新建好文件夹用于存储项目代码,再通过VSode打开指定存储代码的指定文件夹,并新建HelloWorld.html文件 HelloWorld.html文件新…

    Python 2023年9月15日
    057
  • 随机数种子(seed)

    在科学技术和机器学习等其他算法相关任务中,我们经常需要用到随机数,为了把握随机数的生成特性,从随机数的随机无序中获得确定和秩序。我们可以利用随机数种子(random seed)来实…

    Python 2023年8月24日
    086
  • Django Rest Framework中文文档:Serializer relations

    文章目录 一,django模型间的关系 二,检查序列化器实例详情 三,序列化关系字段 * (一)StringRelatedField (二)PrimaryKeyRelatedFie…

    Python 2023年8月4日
    0101
  • [Pandas] 按轴标签.loc VS 按数字索引.iloc

    美图欣赏2022/06/24 iloc和loc的区别1.loc是基于索引值的,切片是左闭右闭的2.iloc是基于位置的,切片是左闭右开的 1.按轴标签.loc .loc的格式是df…

    Python 2023年8月9日
    068
  • VS Code拓展–Language Support for Java(TM) by Red Hat(1.3.0)

    注意:版本问题,可能会有部分出入 功能目录 java.home 作用: 指定用于启动 Java 语言服务器的 JDK (11或更近版本)的文件夹路径。在 Windows 上,反斜杠…

    Python 2023年6月3日
    0152
  • ping

    import os,threading,requests ip=input(‘请输入要检测的ip:’).strip().split(‘.’)[0:3] ip=’.’.join(ip…

    Python 2023年6月6日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球