关于allure和pycharm的运行模式

案例
新建一个项目allure_mode

新建一个python代码test_allure_001.py

代码如下

 import pytest, os
 
 def test_001():
     assert 1 == 1
 
 if __name__ == '__main__':
     pytest.main(['-sv', __file__, '--alluredir', './html', '--clean-alluredir'])
     os.system(f'allure serve ./html')
 

右键运行(注意样式)


运行结果:注意底部右侧的测试结果区域


用例看着没问题,但问题来了。

pytest.main那一行的作用是测试该代码(好像测了),--alluredir参数的意思是会生成一个allure报告所需的json到当前目录下的html文件夹下,然后清空上次的内容。现在看很奇怪的是执行了部分?压根就没有生成allure报告所需的内容

os.system这一行的作用是打开html目录中的文件,生成一个allure的报告(启动一个web 服务器)。压根就没做。

测试
在pytest.main之前加一句打印

 ...
 if __name__ == '__main__':
     print('发生了什么')
     pytest.main..
     os.system

结果是:print也不会打印

证明了:if这个判断似乎就不成立?

跟我们以前学的python基础略有冲突,因为我们当前文件的__name__就是等于__main__的

你认识的没有问题,一切都是因为现在的这个模式,第一张图。你现在是pytest在运行你的测试用例,它并不会关心if这个判断下的内容(为啥?不知道了。)

所以我们都会让你修改模式

修改pycharm的运行模式
文件->设置->工具->Python 集成工具-> 测试- > 默认测试运行程序:改为unittest(注意自动检测是pytest的)


注意此时的右键运行菜单


 D:\Python39\python.exe D:/pythonProject/AutoTest/allure_mode/test_allure_001.py
 发生了什么
 ============================= test session starts =============================
 platform win32 -- Python 3.9.6, pytest-7.1.2, pluggy-1.0.0 -- D:\Python39\python.exe
 cachedir: .pytest_cache
 metadata: {'Python': '3.9.6', 'Platform': 'Windows-10-10.0.19044-SP0', 'Packages': {'pytest': '7.1.2', 'py': '1.11.0', 'pluggy': '1.0.0'}, 'Plugins': {'allure-pytest': '2.9.45', 'anyio': '3.5.0', 'Faker': '13.3.4', 'assume': '2.4.3', 'base-url': '1.4.2', 'dependency': '0.5.1', 'forked': '1.4.0', 'html': '3.1.1', 'instafail': '0.4.2', 'metadata': '1.11.0', 'ordering': '0.6', 'repeat': '0.9.1', 'rerunfailures': '10.2', 'sugar': '0.9.4', 'timeout': '2.1.0', 'xdist': '2.5.0'}, 'JAVA_HOME': 'D:\\Java\\jdk1.8.0_301\\', 'Base URL': ''}
 rootdir: D:\pythonProject\AutoTest\allure_mode
 plugins: allure-pytest-2.9.45, anyio-3.5.0, Faker-13.3.4, assume-2.4.3, base-url-1.4.2, dependency-0.5.1, forked-1.4.0, html-3.1.1, instafail-0.4.2, metadata-1.11.0, ordering-0.6, repeat-0.9.1, rerunfailures-10.2, sugar-0.9.4, timeout-2.1.0, xdist-2.5.0
 collecting ... collected 1 item
 
 test_allure_001.py::test_001 PASSED
 
 ============================== 1 passed in 0.06s ==============================
 Generating report to temp directory...
 Report successfully generated to C:\Users\SONGQI~1\AppData\Local\Temp\6816591429229290427\allure-report
 Starting web server...
 2022-08-23 15:17:07.287:INFO::main: Logging initialized @1991ms to org.eclipse.jetty.util.log.StdErrLog
 Server started at <http://192.168.10.147:2587/>. Press <Ctrl+C> to exit
输出了print的内容

当前目录下也有了html目录,及里面的内容


报告也自动打开了


结论:当时unittest模式的情况下,if下面的语句能正常执行,不会被抛弃,所以都生效了(print语句,pytest.main,os.system等)

还没完
是的,上面似乎已经解决了你的问题。但pycharm会这么low吗?默认检测的不对?而且如果是新建的项目,你可能还要再次设置。

你可以做以下测试

删除新生成的html目录

把if语句及其下面的都去掉

模式改回pytest

复制一个001为002

像这样:很简单


编写一个run_cases.py,命名并无要求,意思就是运行所有的case

 import pytest
 import os
 
 pytest.main(['-sv', '--alluredir', './html', '--clean-alluredir'])
 os.system(f'allure serve ./html')

注意去掉了__file__

没有if main啥的了

注意右键菜单


执行效果:很好,就是pytest,allure报告也生成了,就不截图了

 D:\Python39\python.exe D:/pythonProject/AutoTest/allure_mode/run_cases.py
 ============================= test session starts =============================
 platform win32 -- Python 3.9.6, pytest-7.1.2, pluggy-1.0.0 -- D:\Python39\python.exe
 cachedir: .pytest_cache
 metadata: {'Python': '3.9.6', 'Platform': 'Windows-10-10.0.19044-SP0', 'Packages': {'pytest': '7.1.2', 'py': '1.11.0', 'pluggy': '1.0.0'}, 'Plugins': {'allure-pytest': '2.9.45', 'anyio': '3.5.0', 'Faker': '13.3.4', 'assume': '2.4.3', 'base-url': '1.4.2', 'dependency': '0.5.1', 'forked': '1.4.0', 'html': '3.1.1', 'instafail': '0.4.2', 'metadata': '1.11.0', 'ordering': '0.6', 'repeat': '0.9.1', 'rerunfailures': '10.2', 'sugar': '0.9.4', 'timeout': '2.1.0', 'xdist': '2.5.0'}, 'JAVA_HOME': 'D:\\Java\\jdk1.8.0_301\\', 'Base URL': ''}
 rootdir: D:\pythonProject\AutoTest\allure_mode
 plugins: allure-pytest-2.9.45, anyio-3.5.0, Faker-13.3.4, assume-2.4.3, base-url-1.4.2, dependency-0.5.1, forked-1.4.0, html-3.1.1, instafail-0.4.2, metadata-1.11.0, ordering-0.6, repeat-0.9.1, rerunfailures-10.2, sugar-0.9.4, timeout-2.1.0, xdist-2.5.0
 collecting ... collected 2 items
 
 test_allure_001.py::test_001 PASSED
 test_allure_002.py::test_002 PASSED
 
 ============================== 2 passed in 0.06s ==============================
 Generating report to temp directory...
 Report successfully generated to C:\Users\SONGQI~1\AppData\Local\Temp\2213206012790709893\allure-report
 Starting web server...
 2022-08-23 15:29:58.558:INFO::main: Logging initialized @3280ms to org.eclipse.jetty.util.log.StdErrLog
 Server started at <http://192.168.10.147:4502/>. Press <Ctrl+C> to exit
 

多数情况下你测试你的cases的时候并不会去写if main,那是调试一个case的一种方式,你要批量运行的,所以pycharm的模式并没有问题。

我偏要测试一个文件,还要用pytest模式,可以吗?
真倔哎(自说自话)

答案:当然是可以!这本来就是可以的。

前面我们已经证明了,if语句下的在pytest模式下并不会运行,改为unittest模式可以了。

那就不要if!

 import pytest,os
 def test_001():
     assert 1 == 1
 
 pytest.main(['-sv', __file__,'--alluredir', './html', '--clean-alluredir'])
 os.system(f'allure serve ./html')
 

执行的话也能看到报告

但是!你不可能就一个case的,你如果要多用例一起调用,这个case里面的这2行(pytest.main和os.system)就不应该有。

所以...

说在最后
也可以通过修改pytest项目的配置来解决这个问题,此处不表


实践是最好的理解方式,老师给你的往往是他的理解,其实也未必就100%对,当然现在这种做法我也只是探究了部分,也有不太理解的方式,没必要深究,能完成你的任务就ok了吧。 

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

 全套资料获取方式:点击下方小卡片自行领取即可

 

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

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

相关文章

【异常解决】postman请求提示Full authentication is required to access this resource

Full authentication is required to access this resource解决办法 报错问题&#xff1a;在使用 postman 测试接口时&#xff0c;该接口需要在 Header 中传入 access_token&#xff0c;实际上也在请求的 Header 中添加上了 access_token 参数&#xff0c;但是服务端还是返回4…

qt与opencv学习记录

qtopencv开发入门&#xff1a;4步搞定环境配置-1_哔哩哔哩_bilibili qtopencv开发入门&#xff1a;4步搞定opencv环境配置2_哔哩哔哩_bilibili 文章内容来自上面两个视频&#xff0c;感谢创作者。 ps&#xff1a;配置环境的过程中&#xff0c;遇到了很多问题&#xff0c;我…

性能测试工具 Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能

目录 前言 ActiveMQ 介绍 准备工作 编写jndi.properties添加到ApacheJMeter.jar 中 下载 ActiveMQ 配置 Jmeter 进行测试 点对点 (Queues 队列) 配置 Jmeter 进行测试 发布/订阅 (Topic 队列) 配置发布 Publisher 配置订阅 Subscriber 总结 前言 JMeter是一个功能强大…

Windows搭建Nginx实现RTMP转为HLS流

所需软件 nginx-1.7.11.3-Gryphon&#xff08;这个包含必须的RTMP模块&#xff0c;普通的Ngxin没有这个&#xff09;ffmpegVLC 配置Nginx 1为Nginx配置RTMP和HLS 这里定义了一个叫live的RTMP路径。同时设置其开启HLS功能&#xff0c;那么所有推送到这个地址的RTMP流都会自动生…

吴恩达ML2022-用于手写数字识别的神经网络

1 用到的包 导入在这个分配过程中需要的所有包。 Numpy 是使用 Python 进行科学计算的基本软件包。Matplotlib 是在 Python 中绘制图形的流行库。tensorflow是一种流行的机器学习平台。 import numpy as np import tensorflow as tf from tensorflow.keras.models import Se…

IIS Express本地开发测试如何映射到外网访问?

1.IIS Express是什么 IIS Express是为开发人员优化的轻量级、自包含版本的IIS。它具有IIS 7及以上的所有核心功能&#xff0c;以及为简化网站开发而设计的附加功能。 IIS Express&#xff08;跟ASP.NET开发服务器一样&#xff09;可以快速地从硬盘上的某个文件夹上启动网站…

【LeetCode周赛】2022上半年题目精选集——动态规划

文章目录 2140. 解决智力问题解法1——倒序DP&#xff08;填表法&#xff09;解法2——正序DP&#xff08;刷表法&#xff09;⭐⭐⭐ 2167. 移除所有载有违禁货物车厢所需的最少时间⭐⭐⭐解法1——前缀和⭐⭐⭐⭐⭐解法2——前后缀分解 动态规划代码1——看了思路之后自己写的…

亚信科技荣任「DBL电信行业工作组」副组长单位,AntDB数据库连年入选《中国数据库产品图谱》

日前&#xff0c;“2023可信数据库发展大会”在京圆满召开。亚信科技凭借自研的电信级核心交易数据库AntDB在通信行业15年的技术积累和行业贡献&#xff0c;成功当选为数据库应用创新实验室&#xff08;DBL&#xff09;电信行业工作组副组长单位。AntDB数据库连续两年入选《全球…

星火认知大模型,让我感受到了国产AI的崛起

文章目录 一、申请和测试代码二、实测GPT4.0和星火认知大模型的对比2.1 测试网站2.2 经典问题提问对比2.3 代码问题提问对比2.4 论文问题对比2.5 评价 一、申请和测试代码 在我之前的一篇文章中&#xff0c;我分享了如何申请星火认知大模型的内测&#xff0c;并提供了一份可以…

java项目之班级同学录网站(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的班级同学录网站。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&a…

UE5 DLC

前言 在网上找了很多文档,并没有介绍DLC如何创建,但是对比多篇文档后,可以总结为DLC也是Pak包,本质上还是补丁包,B站上有一篇视频介绍了: [UE4]如何在虚幻4游戏里添加DLC的教程(中英机翻)_哔哩哔哩_bilibili 但是也感觉不对,因为要改Build.cs文件。故研究了一下插件式…

day40-Mybatis(resultMap拓展)

0目录 Mybatis-resultMap拓展 1.2.3 1.数据库字段和javabean实体类属性不一致时 解决方案1&#xff1a;将sql语句中给予别名&#xff08;别名同javabean中实体类保持一致&#xff09; 解决方案2&#xff1a;使用resultMap 2.两表关联&#xff08;用户表和角色表关联查询&…

迅镭激光赋能工程机械,客户连续复购激光加工设备达双赢!

工程机械是装备制造业的重要组成部分&#xff0c;当前&#xff0c;我国已成为门类齐全、规模庞大、基础坚实、竞争力强的工程机械设备制造大国。 随着工程机械产业正在全面向智能化、绿色化转型&#xff0c;激光加工成为推动工程机械产业转型升级的重要工具&#xff0c;越来越多…

mysql日志管理、备份与恢复

mysql日志管理、备份与恢复 一、数据备份重要性数据备份类型二、数据库备份类型2.1物理备份1.冷备份(脱机备份):2.热备份(联机备份)∶3.温备份: 2.2逻辑备份1.完全备份2.差异备份3.增量备份 三、常见的备份方法3.1物理冷备3.2专用备份工具3.3启用二进制日志进行增量备份3.4第三…

【C#】并行编程实战:使用延迟初始化提高性能

在前面的章节中讨论了 C# 中线程安全并发集合&#xff0c;有助于提高代码性能、降低同步开销。本章将讨论更多有助于提高性能的概念&#xff0c;包括使用自定义实现的内置构造。 毕竟&#xff0c;对于多线程编程来讲&#xff0c;最核心的需求就是为了性能。 延迟初始化 - .NET…

GoFrame v2.5 版本发布,企业级 Golang 开发框架

大家好啊&#xff0c;GoFrame 框架今天发布了 v2.5.0 正式版本啦&#xff01;&#x1f44f;&#x1f44f;&#x1f44f;&#x1f44f; 本次版本主要是对已有功能组件以及开发工具上的改进工作。其中&#xff0c;开发工具新增了 gf gen ctrl 命令&#xff0c;以规范化定义、开发…

Bash 第十行

195 第十行 给定一个文本文件 file.txt&#xff0c;请只打印这个文件中的第十行。 示例: 假设 file.txt 有如下内容&#xff1a; Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10 你的脚本应当显示第十行&#xff1a; Line 10 来源&#xff1a;…

Hive概述

Hive 一 Hive基本概念 1 Hive简介 学习目标 - 了解什么是Hive - 了解为什么使用Hive####1.1 什么是 Hive Hive 由 Facebook 实现并开源&#xff0c;是基于 Hadoop 的一个数据仓库工具&#xff0c;可以将结构化的数据映射为一张数据库表&#xff0c;并提供 HQL(Hive SQL)查询…

【uni-app】自定义导航栏

【uni-app】自定义导航栏 新手刚玩uniapp进行微信小程序&#xff0c;甚至多端的开发。原生uniapp的导航栏&#xff0c;并不能满足ui的需求&#xff0c;所以各种查阅资料&#xff0c;导航栏自定义内容 整理如下&#xff1a; 需要修改的文件如下&#xff1a; 1、pages.json 修…

SpringBoot读取配置的6种方式

1. 概述 通过了解springboot加载配置&#xff0c;可以更方便地封装自定义Starter。 在SpringBoot中&#xff0c;可以使用以下6种方式读取 yml、properties配置&#xff1a; 使用Value注解&#xff1a;读取springboot全局配置文件单个配置。使用Environment接口&#xff1a;通过…