栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python-配置文件和log

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-配置文件和log

1. 配置文件 1.1 什么是配置setting?
  • 计算机屏幕宽度
  • 环境变量
  • 手机wifi开关,4g,True
  • 命令行配置选项
  • 一个自动化的测试用例里面哪些东西可以作为配置选项
1.2 配置文件是什么? 

配置文件是用于配置计算机程序的参数和初始化设置的文件。如果没有这些配置,程序可能无法执行。

比如现在你要开发一款app,当部署app时,需要配置它的host地址、数据库地址、数据库名称,这些可以作为配置项写入配置文件。当项目上线,需要换一个环境运行时,只需要修改配置文件,不需要去代码当中导出查找。

通俗的讲配置文件就是把程序需要的一些参数或者设置保存到文件当中。而参数,数据主要就是程序运行的依赖数据,没有这些参数,程序可能无法运行。参数实际上就是提供软件的运行环境。说白了,就是程序运行时的常量(常量:通常不会变化,比如你想改变程序的运行的环境的时候(比如手动修改字体);变量:根据程序的运行,可能时刻会变化(程序自动获取和修改)),比如,数据库地址,域名。端口号。数据库连接数,测试账户,excel文件名等。

好处:对于改变程序的运行,只需要修改配置文件,不需要再修改代码。

配置文件通常是key/value的形式存在,任何支持解析key/value形式的文件都是可以作为配置文件的。

现在主流的配置文件格式非常多,比如:

  • linux系统中的.bashrc.
  • yaml
  • ini
  • xml
  • json
  • toml

这些都是常用的配置文件格式。接下来,我们来看看用的最多的几种配置文件怎么编写,又是如何通过python语言解析的。

1.3 yaml

文件格式为:filename.yaml 或者 filename.yml

yaml文件内容编写规范:key: value 键值之间使用冒号(英文冒号)隔开,且冒号后必须有空格。

yaml表示字符串,建议初期加引号,减少bug。

yaml支持的数据类型很丰富。

demo1.yaml:

#字符串
username: 'kunkun'
#数字
password: 123
database: '127.0.0.1'
#列表
list: [1,2,3]

list1:
  - 1
  - 2
  - 3
    
#字典
info: {'name':'kunkun','age':'18'}
# info == info1 等价
info1:
  name: 'kunkun'#前面空两格
  age: 18

读取yaml文件的步骤: 

a)安装pyyaml,安装位置:File->Setting->Project Interpreter->+->搜索“pyyaml”->点击【Install Package】,如下图所示:

 b)导入yaml: import yaml

import yaml
import pprint

# 读取yanml文件
with open('demo1.yaml', encoding='utf-8') as f:
    # 安全加载,检查格式
    data = yaml.safe_load(f)
# data是一个字典
print(data)
pprint.pprint(data)

运行结果:

可以看出读取yaml文件,data是个字典,如果需要获取某一项配置,再通过字典的操作获取:

user_name = data['username']

c)自动化测试可以使用yaml文件保存设置选项,也可以用yaml文件测试用例数据。

其他很多的配置文件格式,不需要每个都懂。

1.4 ini

ini格式的数据默认只支持字符串类型。

demo3.ini:

[default]
host=http://www.baidu.com

[db]
host=""
port=3306
name="py"

读取ini文件:

from configparser import ConfigParser

parser = ConfigParser()
parser.read('demo3.ini', encoding='utf-8')

host = parser.get("default", "host")
db_host = parser.get("db", "host")
print(host)
print(db_host)

运行结果:

 2.log日志

日志:程序运行过程中产生的信息。程序如何运行的信息。

日志既可以在终端中显示,也可以直接在文件中。

日志的作用:方便定位。

日志包含的信息:时间 ,等级,日志信息。

日志等级:

  • 1.noset ,0,等于没写
  • 2.debug,10,调试信息
  • 3.info,20,记录日志操作的信息,比如做了些啥?
  • 4.warning,30,警告,下次可能要出错了
  • 5.error,40,报错信息
  • 6.critical,50,极其严重的错误

等级排序: debug < info < warn < error < critical

注意:设置了日志等级后,只会输出大于等于当前设置的等级的日志记录

2.1 python当中怎么去记录日志?

1.安装loguru,安装位置:File->Setting->Project Interpreter->+->搜索“loguru”->点击【Install Package】,如下图所示:

 2.导入loguru:from loguru import logger

from loguru import logger


logger.debug("调试信息")
logger.info("记录信息")
logger.warning("警告信息")
logger.error("错误信息")
logger.critical("极其严重的信息")

运行结果:

 2.2 如何在项目中写入日志以及将日志保存到文件?
# 将日志保存到文件中
logger.add(sink='demo.log',#保存日志的文件
           encoding='utf-8',
           #记录大于等于指定等级的日志信息
           evel='ERROR',
           #定义每个文件的大小或者生成时间
           rotation='100 MB',
           #压缩文件大小
           compression='zip')
参数说明
logger.add(sink='demo.log', encoding='utf-8',rotation='12:00') # 每天12点生成新的文件
logger.add(sink='demo.log', encoding='utf-8',rotation='1 week') # 每隔一周
logger.add(sink='demo.log', encoding='utf-8',rotation='10 days') # 每隔10天
logger.add(sink='demo.log', encoding='utf-8',compression='zip') # 压缩文件大小
import unittest
from loguru import logger

# 将日志保存到文件中
logger.add(sink='demo.log', encoding='utf-8',
           # level='ERROR',
           rotation='100 MB')


def login(username=None, password=None):
    if username is None or password is None:
        return {"code": "400", "msg": "用户名或密码为空"}
    if username == 'yuz' and password == '123':
        return {"code": "200", "msg": "登录成功"}
    return {"code": "300", "msg": "用户名或密码错误"}


class TestLogin(unittest.TestCase):
    # 测试用例
    def test_login_1(self):
        username, password = 'yuz', '123'
        actual = login(username, password)
        expected = {"code": "200", "msg": "登录成功"}
        logger.info("正在执行测试用1")
        try:
            self.assertEqual(actual, expected)
        except AssertionError as e:
            # 在日志中记录断言异常
            logger.error("测试用例1断言失败")
            raise e
        logger.info("测试用1执行完毕")

    def test_login_2(self):
        username, password = 'yuz', '123'
        actual = login(username, password)
        expected = {"code": "100", "msg": "登录成功"}
        logger.info("正在执行测试用2")
        try:
            self.assertEqual(actual, expected)
        except AssertionError as e:
            # 在日志中记录断言异常
            logger.error("测试用例2断言失败")
            raise e
        logger.info("测试用2执行完毕")

    def test_login_3(self):
        username, password = '', '123'
        actual = login(username, password)
        expected = {"code": "400", "msg": "用户名或密码为空"}
        logger.info("正在执行测试用3")
        try:
            self.assertEqual(actual, expected)
        except AssertionError as e:
            # 在日志中记录断言异常
            logger.error("测试用例3断言失败")
            raise e
        logger.info("测试用3执行完毕")

运行结果:

 demo.log信息:

从上面例子可以看出日志信息主要包含了时间,日志等级,py文件名,用例方法名,代码行,日志信息。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/315799.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号