IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Pytest测试框架系列 - pytest 常见问题解决方案汇总 -> 正文阅读

[开发测试]Pytest测试框架系列 - pytest 常见问题解决方案汇总

问题列表

  • 如何在pycharm 里面使用pytest运行用例(默认为unittest)
  • 遇见 pytest: error: unrecognized arguments: xxx
  • parametrize 参数化时使用ids时控制台中文不能正常显示,显示为unicode编码样式(不是乱码)
  • pytest-html报告中中文标题显示乱码
  • 解决pytest.ini 配置日志文件每次都覆盖上一次的日志
  • pytest.ini 配置每天生成一个日志文件
  • pytest.ini 文件存放路径问题

问题一:如何在pycharm 里面使用pytest运行用例(默认为unittest)

当脚本文件命名为test_xx.py和用例使用test开头时,运行代码pycharm会自动识别到以unittest方式运行

  • 如果要以pytest方式运行,需要修改设置默认的运行器:file->Setting->Tools->Python Integrated Tools->Testing->Default test runner->选择pytest
    设置pytest运行

  • 修改完成之后,删除所有的unittest运行配置
    编辑运行器
    将unittest的运行配置全部删除

  • 再次右键执行,查看都会显示pytest运行器
    运行器

问题二:遇见 pytest: error: unrecognized arguments: --count=2

这种情况有两种情况:

  • 查看参数是否拼写正确
  • 使用的插件是否安装
    • 未安装可以使用 pip install pytest-repeat 进行安装,安装对应插件,在进行使用

问题三:parametrize 参数化时使用ids时控制台中文不能正常显示,显示为unicode编码样式(不是乱码)

现象:参数用例描述有中文时,在控制台输出会显示unicode编码,中文不能正常显示
中文显示
解决办法:在conftest.py文件使用pytest_collection_modifyitems 钩子函数,对输出的 item.name 和 item.nodeid 重新编码

def pytest_collection_modifyitems(items):
    """
    测试用例收集完成时,将收集到的item的name和nodeid的中文显示在控制台上
    :return:
    """
    for item in items:
        item.name = item.name.encode("utf-8").decode("unicode_escape")
        item._nodeid = item.nodeid.encode("utf-8").decode("unicode_escape")

再次执行,查看结果:
修改后执行结果

问题四:pytest-html报告中中文标题显示乱码

现象:HTML报告里面用例标题中文显示乱码
中文乱码
解决方案:修改pytest-html目录下的plugin.py里面test_id编码方式,修改路径为:../site-packages/pytest_html/plugin.py
修改位置
修改代码为:

self.test_id = report.nodeid.encode("utf-8").decode("unicode_escape")

修改为: self.test_id = re.sub(r'(\\u[\s\S]{4})', lambda x: x.group(1).encode("utf-8").decode("unicode-escape"), report.nodeid)

plugin.py 文件 140 行左右

    class TestResult:
        def __init__(self, outcome, report, logfile, config):
            # self.test_id = report.nodeid.encode("utf-8").decode("unicode_escape")
            self.test_id = re.sub(r'(\\u[\s\S]{4})', lambda x: x.group(1).encode("utf-8").decode("unicode-escape"),
                                  report.nodeid)
            if getattr(report, "when", "call") != "call":
                self.test_id = "::".join([report.nodeid, report.when])
            self.time = getattr(report, "duration", 0.0)
            self.outcome = outcome
            self.additional_html = []
            self.links_html = []
            self.self_contained = config.getoption("self_contained_html")
            self.logfile = logfile
            self.config = config
            self.row_table = self.row_extra = None

再次通过命令行生成HTML报告:pytest -v -s --html=reports.html --self-contained-html test_params.py
中文标题

问题五:解决pytest.ini 配置日志文件每次都覆盖上一次的日志

现象:每次运行脚本,都会将上一次日志覆盖

解决方案:修改日志写入模式,mode="a"

  • 通过修改源码的写入方式可以保存所有执行日志,改成 a 模式
  • 修改文件位置 ../Lib/site-packages/_pytest/logging.py
  • 将 552行 的 self.log_file_handler = _FileHandler(log_file, mode="w", encoding="UTF-8")
  • 修改为:self.log_file_handler = _FileHandler(log_file, mode="a", encoding="UTF-8")
    修改写入模式

问题六:pytest.ini 配置每天生成一个日志文件

解决方案:修改 pytest下的 logging 模块,主要是给文件名拼接一个日期信息

  • 修改文件位置 ../Lib/site-packages/_pytest/logging.py
    pytest.ini 配置:
    pytest.ini文件
    logging.py 修改:
    修改文件
  • 代码
    注意在logging文件import time模块
import time

log_file_s = log_file.partition('.')
log_file = log_file_s[0]+time.strftime('_%Y_%m_%d', time.localtime(time.time()))+log_file_s[1]+log_file_s[2]

问题七:pytest.ini 文件存放路径问题

注意:pytest.ini 特别建议放到项目根目录,如果不放在根目录,注意里面 testpathsnorecursedirslog_file 与路径相关的参数配置

pytest.ini 里面配置路径查找方法,已 pytest.ini 文件所在路径为根路径,继续往下查找

以上为内容纯属个人理解,如有不足,欢迎各位大神指正,转载请注明出处!

如果觉得文章不错,欢迎关注微信公众号,微信公众号每天推送相关测试技术文章
个人微信号

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:23:20  更:2021-08-07 12:24:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 9:12:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码