以Kotti项目为例使用pytest测试项目

news2024/10/6 16:31:16

在维护和构建大型项目时,单独一个一个手工测试代码已经不适用了,这时候就要用专门的测试框架进行测试。让我们以Kotti项目为例,用pytest这个测试框架进行实践测试吧。

使用python3.10 @Ubuntu 系统

准备工作

下载和安装kotti库

pip install https://atomgit.com/skywalk/Kotti
cd Kotti
pip install -r requirements.txt
python3 setup.py develop --user

其它项目代码操作也是一样,将代码git clone到本地,然后安装依赖库,依赖库一般写到requirements.txt文件里。有的项目像Kotti还需要在python下安装。

安装好pytest和相关的库

pip install pytest
pip install mock
pip install pytest-flake8 pytest-cov
pip install webtest zope.testbrowser

 不同的python环境,可能会缺失不同的库,按照错误提示缺什么pip安装什么即可。

开始测试

在Kotti目录执行pytest

~/github/Kotti$ pytest

输出类似:

pytest
=============================== test session starts ===============================
platform linux -- Python 3.10.12, pytest-8.1.1, pluggy-1.4.0
rootdir: /home/skywalk/github/kotti
configfile: pytest.ini
plugins: cov-5.0.0, flake8-1.1.1, Kotti-2.0.10.dev0
collected 454 items                                                               

kotti/__init__.py F
kotti/alembic/env.py F
kotti/alembic/versions/1063d7178fa_add_node_path_column.py F
kotti/alembic/versions/37a05f6246af_enlarge_name_title_path.py F
kotti/alembic/versions/413fa5fcc581_add_filedepot.py F
kotti/alembic/versions/4a3de0d0804a_add_foreignkey_indices.py F
kotti/alembic/versions/559ce6eb0949_update_node_path_column.py F
kotti/alembic/versions/57fecf5dbd62_initialize_workflow.py F
kotti/alembic/versions/814c4ec72f1_add_file_columns_to_images_table.py F
kotti/alembic/versions/9398ccf41c2_add_content_state_fo.py F
kotti/events.py F
kotti/fanstatic.py F
kotti/filedepot.py F

kotti/tests/__init__.py F
kotti/tests/conftest.py F
kotti/tests/test_app.py F................
kotti/tests/test_cache.py F......

F表示测试失败,后面的绿点表示测试成功,每个文档第一个测试是flake8,这个可以先不用去管,具体见文档:pytest的时候输出一个F后面跟很多绿色的点解读-CSDN博客

最后,应该将pytest测试集成到你的持续集成/持续部署(CI/CD)流程中,这样每次代码变更时都会自动运行测试。这有助于及早发现和修复问题,保持代码的健康和稳定。

调试

报错No module named 'webtest' 'zope.testbrowser'

===================================== ERRORS ======================================
_________________ ERROR collecting kotti/tests/test_functional.py _________________
ImportError while importing test module '/home/skywalk/github/kotti/kotti/tests/test_functional.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/lib/python3.10/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
kotti/tests/test_functional.py:3: in <module>
    from webtest.forms import Upload
E   ModuleNotFoundError: No module named 'webtest'
___________________ ERROR collecting kotti/tests/test_upload.py ___________________
ImportError while importing test module '/home/skywalk/github/kotti/kotti/tests/test_upload.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/lib/python3.10/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
kotti/tests/test_upload.py:4: in <module>
    from zope.testbrowser.browser import LinkNotFoundError
E   ModuleNotFoundError: No module named 'zope.testbrowser'
================================ warnings summary =================================

不明白为什么有时候会缺库,不过解决的方法很简单,缺什么装什么

安装需要的库:pip install webtest zope.testbrowser

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1574165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试下的AI之路(4)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

智慧公厕升级为多功能城市智慧驿站,助力智慧城市发展

在现代城市的建设中&#xff0c;公共厕所作为基础必备的民生设施&#xff0c;一直是城市管理的重要组成部分。随着科技的不断发展&#xff0c;智慧公厕应运而生&#xff0c;成为了公共厕所信息化、数字化、智慧化的应用解决方案。而近年来&#xff0c;智慧公厕也进行了升级发展…

Java设计模式—享元(FlyWeight)模式

享元模式&#xff08;Flyweight&#xff09;&#xff0c;运用共享技术有效地支持大量细粒度的对象 public abstract class Piece {protected PieceColor m_color;protected PiecePos m_pos;public Piece(PieceColor color ,PiecePos pos){m_color color;m_pos pos;}public ab…

利用甘特图实现精细化项目管控

在项目管理中,通过精细化管控,项目经理能够有效规划、监督和协调各项任务,从而最大限度控制风险,优化资源配置,并确保按时、按质、按量完成项目目标。而在众多项目管理工具中,甘特图无疑是实现精细化项目管控的利器。zz-plan 是一个非常好用的在线甘特图制作工具&#xff0c;一…

浮点数在内存中的存储【详解】

浮点数在内存中的存储 浮点数存储规则小数点后数值的二进制转换float和double存储图示优化存储方案E不全为0或不全为1E全为0E全为1 浮点数存储规则 大家都知道整型数据是以补码的方式存放在内存中。以下几个概念是需要知道的&#xff1a; 原码&#xff0c;补码&#xff0c;反…

爬虫与数据分析——爬虫基础知识

目录 一、开发环境二、爬虫的概念三、爬虫与Python&#xff08;一&#xff09;爬虫常用语言&#xff08;二&#xff09;python的特点 四、爬虫环境依赖&#xff08;一&#xff09;python第三方库&#xff08;二&#xff09;第三方库的安装 五、爬虫与HTTP&#xff08;一&#x…

深入理解JVM的内存结构及GC机制(2)

虚拟机栈占用的是操作系统内存&#xff0c;每个线程对应一个虚拟机栈&#xff0c;它是线程私有的&#xff0c;生命周期和线程一样&#xff0c;每个方法被执行时产生一个栈帧&#xff08;Statck Frame&#xff09;&#xff0c;栈帧用于存储局部变量表、动态链接、操作数和方法出…

Docker中Mysql报 mbind: Operation not permitted

问题 我们在docker中安装的mysql运行时报 mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted原因 这是Docker的Seccomp安全限…

python之遍历求二叉树的深度、先序遍历、中序遍历、后序遍历

二叉树的结点用一个数组顺序存储&#xff0c;-1表示该节点为空&#xff0c;实现求该二叉树的深度、先序遍历、中序遍历、后序遍历 首先定义一个 Node 类 &#xff0c;用于表示二叉树中的节点。 class Node:def __init__(self, val):self.val valself.left Noneself.right …

python开发poc

学习使用python做到批量化的漏洞脚本 1.通过fofa搜索结果来采集脚本 2.批量化扫描漏洞 ---glassfish存在任意文件读取在默认48484端口&#xff0c;漏洞验证的poc为: "glassfish" && port"4848" && country"CN" http://loca…

PCF8591(ADDA转换芯片)

工具 1.Proteus 8 仿真器 2.keil 5 编辑器 原理图 讲解 PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行IC总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程&#xff0c;允许在同个I2C总线上接…

序列超图的下一项推荐 笔记

1 Title Next-item Recommendation with Sequential Hypergraphs&#xff08;Jianling Wang、Kaize Ding、Liangjie Hong、Huan Liu、James Caverlee&#xff09;【SIGIR 2020】 2 Conclusion This study explores the dynamic meaning of items in realworld scenarios and p…

回合制游戏战斗模块的制作

回合制游戏战斗模块的制作 回合制游戏相信大家没玩过也见过&#xff0c;了解它的玩法。回合制&#xff0c;那就是你来我回的&#xff0c;你一回合我一回合&#xff0c;直到把对方打败。市面上的回合制游戏比较经典的有梦幻西游&#xff0c;问道&#xff0c;神武&#xff0c;完…

【机器学习入门】集成学习之梯度提升算法

系列文章目录 第1章 专家系统 第2章 决策树 第3章 神经元和感知机 识别手写数字——感知机 第4章 线性回归 第5章 逻辑斯蒂回归和分类 第5章 支持向量机 第6章 人工神经网络(一) 第6章 人工神经网络(二) 卷积和池化 第6章 使用pytorch进行手写数字识别 实操练习 使用Yolo模型进…

二分法题集2

目录 1 山脉数组的峰顶索引 分析&#xff1a; 代码展示&#xff1a; 2 寻找峰值 分析&#xff1a; 代码展示&#xff1a; 3 寻找旋转排序数组中的最小值 分析&#xff1a; 代码展示&#xff1a; 4 点名 分析&#xff1a; 代码展示&#xff1a; 1 山脉数组的峰顶…

【代码随想录】哈希表

文章目录 242.有效的字母异位词349. 两个数组的交集202. 快乐数1. 两数之和454. 四数相加 II383. 赎金信15. 三数之和18. 四数之和 242.有效的字母异位词 class Solution {public boolean isAnagram(String s, String t) {if(snull || tnull || s.length()!t.length()){return …

Linux信号机制:进程间高效传递事件与操控指令的桥梁

在Linux操作系统中&#xff0c;信号是一种进程间通信机制&#xff0c;用于通知进程某些事件的发生或请求进程执行特定的动作。信号分为两类&#xff1a;编号1至31的传统UNIX信号&#xff0c;被称为不可靠信号&#xff0c;以及编号32至63的扩展信号&#xff0c;即可靠信号&#…

CMU15/445 2023 Spring-project1 LRU-K 替换策略

在写个demo之前&#xff0c;专门学习了LRU:【LeetCode刷题】146. LRU 缓存-CSDN博客 使用哈希表 双向链表可以满足删除/增加的时间复杂度为O(1)。 在通读完15/445这块的说明之后&#xff0c;发现和LRU还是有些差别的。 官方文档中对LRU-K的解释是&#xff1a;LRU-K算法根据所…

LABVIEW--正弦+高斯噪声信号及滤波

前面板信号 后面板 LABVIEW源程序链接&#xff1a;https://pan.baidu.com/s/11B-75i4fHZwWQyjxn9yCyQ?pwd7tfj 提取码&#xff1a;7tfj

JavaWeb--JavaScript Part 01

1. JavaScript概述 JavaScript&#xff08;简称JS&#xff09;是一种轻量级的、解释执行的客户端脚本语言&#xff0c;主要用于增强网页的交互性和动态性。它起源于Netscape的LiveScript&#xff0c;并在1995年发布时更名为JavaScript。尽管名称中包含"Java"&#xf…