1.股票通用的辅助画线工具都有什么?
2.Python热门单元测试框架对比:pytest和unittest还傻傻分不清楚?
3.自动驾驶综述文章
4.Python接口自动化之yaml配置文件
股票通用的辅助画线工具都有什么?
通达信黄金分割压力和支撑画线主图指标公式,演示在源码下面网址里.
N1:=;
N2:=;
N3:=5;
AA:=REF(H,N1)=HHV(H,2*N1+1);
QY:=BACKSET(AA,N1+1);
CC:=FILTER(QY,N1) AND H=HHV(H,N1+1);
DDD:=BARSLAST(CC);
GDTS:=IF(CC,CURRBARSCOUNT,0);
DINGBU:=IF(DDD,REF(H,DDD),H);{ 顶部}
DINGBUTS:=IF(DDD,REF(GDTS,DDD),GDTS);
DINGBU1:=REF(DINGBU,DDD+1);
GDCS1:=CONST(DINGBUTS);
DINGBUTS1:=REF(DINGBUTS,DDD+1);
GDCS2:=CONST(DINGBUTS1);
DINGBU2:=REF(DINGBU1,DDD+1);
MM:=IF(CURRBARSCOUNT>GDCS2,0,1);
{ DRAWLINE(CURRBARSCOUNT=GDCS2,H,ISLASTBAR,REF(H,GDCS2-1),1),COLORFF,POINTDOT,LINETHICK2;
DRAWLINE(CURRBARSCOUNT=GDCS1,H,ISLASTBAR,REF(H,GDCS1-1),1),COLORYELLOW,POINTDOT,LINETHICK2;}
AA1:=REF(L,N1)=LLV(L,2*N1+1);
QY1:=BACKSET(AA1,N1+1);
CC1:=FILTER(QY1,N1) AND L=LLV(L,N1+1);
DD1:=BARSLAST(CC1);
DDTS:=IF(CC1,CURRBARSCOUNT,0);
YDB:=IF(DD1,REF(L,DD1),L);
DDTS1:=IF(DD1,REF(DDTS,DD1),DDTS);
DDCS1:=CONST(DDTS1);
ZDB:=REF(YDB,DD1+1);
DDTS2:=REF(DDTS1,DD1+1);
DDCS2:=CONST(DDTS2);
{ DRAWLINE(CURRBARSCOUNT=DDCS2,L,ISLASTBAR,REF(L,DDCS2-1),1),COLORFF,POINTDOT,LINETHICK2;
DRAWLINE(CURRBARSCOUNT=DDCS1,L,ISLASTBAR,REF(L,DDCS1-1),1),COLORYELLOW,POINTDOT,LINETHICK2;}
LAA:=REF(H,N2)=HHV(H,2*N2+1);
LQY:=BACKSET(LAA,N2+1);
LCC:=FILTER(LQY,N2) AND H=HHV(H,N2+1);
LDDD:=BARSLAST(LCC);
LGDTS:=IF(LCC,CURRBARSCOUNT,0);
LDINGBU:=IF(LDDD,REF(H,LDDD),H);{ 顶部}
LDINGBUTS:=IF(LDDD,REF(LGDTS,LDDD),LGDTS);
LDINGBU1:=REF(LDINGBU,LDDD+1);
LGDCS1:=CONST(LDINGBUTS);
LDINGBUTS1:=REF(LDINGBUTS,LDDD+1);
LGDCS2:=CONST(LDINGBUTS1);
LDINGBU2:=REF(LDINGBU1,LDDD+1);
LMM:=IF(CURRBARSCOUNT>LGDCS2,0,1);
{ DRAWLINE(CURRBARSCOUNT=LGDCS2,H,ISLASTBAR,REF(H,LGDCS2-1),1),COLORFF,POINTDOT;
DRAWLINE(CURRBARSCOUNT=LGDCS1,H,ISLASTBAR,REF(H,LGDCS1-1),1),COLORYELLOW,POINTDOT;}
LAA1:=REF(L,N2)=LLV(L,2*N2+1);
LQY1:=BACKSET(LAA1,N2+1);
LCC1:=FILTER(LQY1,N2) AND L=LLV(L,N2+1);
LDD1:=BARSLAST(LCC1);
LDDTS:=IF(LCC1,CURRBARSCOUNT,0);
LYDB:=IF(LDD1,REF(L,LDD1),L);
LDDTS1:=IF(LDD1,REF(LDDTS,LDD1),LDDTS);
LDDCS1:=CONST(LDDTS1);
LZDB:=REF(LYDB,LDD1+1);
LDDTS2:=REF(LDDTS1,DD1+1);
LDDCS2:=CONST(LDDTS2);
DDYL2:=DRAWLINE(CURRBARSCOUNT=LGDCS2,H,CURRBARSCOUNT=LGDCS1,H,1) COLORWHITE;
DDZC2:=DRAWLINE(CURRBARSCOUNT=LDDCS2,L,CURRBARSCOUNT=LDDCS1,L,1) COLORWHITE;
ZGSTAR:=(DDYL2+DDZC2)/2;
ZGEND:=CONST((DDYL2+DDZC2)/2);
STARDAY:=IF(DDCS2<GDCS2,DDCS2,GDCS2);
LLAA:=REF(H,N3)=HHV(H,2*N3+1);
LLQY:=BACKSET(LLAA,N3+1);
LLCC:=FILTER(LLQY,N3) AND H=HHV(H,N3+1);
LLDDD:=BARSLAST(LLCC);
LLGDTS:=IF(LLCC,CURRBARSCOUNT,0);
LLDINGBU:=IF(LLDDD,REF(H,LLDDD),H);{ 顶部}
LLDINGBUTS:=IF(LLDDD,REF(LLGDTS,LLDDD),LLGDTS);
LLDINGBU1:=REF(LLDINGBU,LLDDD+1);
LLGDCS1:=CONST(LLDINGBUTS);
LLDINGBUTS1:=REF(LLDINGBUTS,LLDDD+1);
LLGDCS2:=CONST(LLDINGBUTS1);
LLDINGBU2:=REF(LLDINGBU1,LLDDD+1);
LLMM:=IF(CURRBARSCOUNT>LGDCS2,0,1);
{ DRAWLINE(CURRBARSCOUNT=LLGDCS2,H,ISLASTBAR,REF(H,LLGDCS2-1),1),COLORFF,POINTDOT;
DRAWLINE(CURRBARSCOUNT=LLGDCS1,H,ISLASTBAR,REF(H,LLGDCS1-1),1),COLORYELLOW,POINTDOT;}
LLAA1:=REF(L,N3)=LLV(L,2*N3+1);
LLQY1:=BACKSET(LLAA1,N3+1);
LLCC1:=FILTER(LLQY1,N3) AND L=LLV(L,N3+1);
LLDD1:=BARSLAST(LCC1);
LLDDTS:=IF(LLCC1,CURRBARSCOUNT,0);
LLYDB:=IF(LLDD1,REF(L,LLDD1),L);
LLDDTS1:=IF(LLDD1,REF(LLDDTS,LLDD1),LDDTS);
LLDDCS1:=CONST(LLDDTS1);
LLZDB:=REF(LLYDB,LLDD1+1);
LLDDTS2:=REF(LLDDTS1,DD1+1);
LLDDCS2:=CONST(LLDDTS2);
GDYL3:=DRAWLINE(CURRBARSCOUNT=LLGDCS2,H,CURRBARSCOUNT=LLGDCS1,H,1) COLORYELLOW;
DDZC3:=DRAWLINE(CURRBARSCOUNT=LLDDCS2,L,CURRBARSCOUNT=LLDDCS1,L,1) COLORYELLOW;
LZGSTAR:=(GDYL3+DDZC3)/2;
LZGEND:=CONST((GDYL3+DDZC3)/2);
LSTARDAY:=IF(LLDDCS2<LLGDCS2,LLDDCS2,LLGDCS2);
GDYL1:=DRAWLINE(CURRBARSCOUNT=GDCS2,H,CURRBARSCOUNT=GDCS1,H,1) COLORRED;
DDZC1:=DRAWLINE(CURRBARSCOUNT=DDCS2,L,CURRBARSCOUNT=DDCS1,L,1) COLORRED;
长线压力:DDZC1+(GDYL1-DDZC1)*0.,COLORRED;
长线支撑:DDZC1+(GDYL1-DDZC1)*0.,COLORRED;
中线压力:DDZC2+(DDYL2-DDZC2)*0.,COLORGREEN;
中线支撑:DDZC2+(DDYL2-DDZC2)*0.,COLORGREEN;
短线压力:DDZC3+ (GDYL3-DDZC3)*0.,COLORBLUE;
短线支撑:DDZC3+(GDYL3-DDZC3)*0.,COLORBLUE;
L中轨:DRAWLINE(CURRBARSCOUNT=LSTARDAY,LZGSTAR,ISLASTBAR,LZGEND,1),COLORYELLOW;
中轨:DRAWLINE(CURRBARSCOUNT=STARDAY,ZGSTAR,ISLASTBAR,ZGEND,1),COLORWHITE;
长GDYL:DRAWLINE(CURRBARSCOUNT=GDCS2,H,CURRBARSCOUNT=GDCS1,H,1) COLORRED,POINTDOT;
长DDZC:DRAWLINE(CURRBARSCOUNT=DDCS2,L,CURRBARSCOUNT=DDCS1,L,1) COLORRED,POINTDOT;
中DDYL:DRAWLINE(CURRBARSCOUNT=LGDCS2,H,CURRBARSCOUNT=LGDCS1,H,1) COLORWHITE,POINTDOT;
中DDZC:DRAWLINE(CURRBARSCOUNT=LDDCS2,L,CURRBARSCOUNT=LDDCS1,L,1) COLORWHITE,POINTDOT;
短GDYL:DRAWLINE(CURRBARSCOUNT=LLGDCS2,H,CURRBARSCOUNT=LLGDCS1,H,1) COLORYELLOW,POINTDOT;
短DDZC:DRAWLINE(CURRBARSCOUNT=LLDDCS2,L,CURRBARSCOUNT=LLDDCS1,L,1) COLORYELLOW,POINTDOT;
Python热门单元测试框架对比:pytest和unittest还傻傻分不清楚?
前言
在进行自动化测试时,编写测试用例会使用到单元测试模块,其中Python中常见的单元测试模块包括unittest、pytest、nose等。其中,石家庄全脂奶粉溯源码查询unittest和pytest是被提及最多的两个框架,本文将通过简单介绍,对比这两者在断言、用例执行规则、前后置操作、测试报告、参数化功能、失败重跑、跳过用例等方面的主要区别。
unittest
unittest框架是Python内置的单元测试框架,广泛应用于各种项目中。它基于JUnit框架设计,支持多种自动化测试用例编写、前置条件和后置数据清理功能。unittest能将多个测试用例组织到测试集中,生成测试报告。llama2源码
pytest
pytest是基于Python的单元测试框架,是对unittest的扩展,更加简洁、方便,支持第三方插件,可以高效完成测试工作。pytest也支持unittest的代码框架内容。
区别
从以下几个方面对比unittest和pytest的主要区别:
断言
unittest采用自身携带的断言函数,如assertEqual、assertTrue、assertFalse等。而pytest使用Python内置的assert语句进行断言。
用例执行规则
unittest要求测试类继承unittest.TestCase,测试用例以test开头,执行顺序按ASCII排序,不能指定特定用例顺序。unittest提供多种方法(如TestCase、TestSuite、TestLoder、TextTestRunner)来方便测试用例编写和执行。
pytest则要求测试文件名以test_开头,源码素材小程序类名以Test开头,测试用例同样以test_开头。执行顺序默认从上到下,可以通过第三方插件定制。执行用例无需导入模块,通过命令行即可执行。
前后置操作
unittest支持setup()和tearDown()方法控制用例前后置操作,setupclass()和teardownclass()方法控制类级别操作。pytest支持模块级别(setup_module,teardown_module)、函数级别(setup_function,teardown_function)等操作,通过fixture和装饰器灵活使用。
测试报告
unittest没有自带测试报告,需依赖第三方插件(如HTMLTestRunner、BeautifulReport)生成报告。pytest同样没有自带报告,可使用第三方插件(如pytest-html、allure-pytest)生成详细报告。
参数化功能
unittest不支持参数化,需借助第三方库(如DDt)实现。gcc编译freetype源码pytest支持参数化,可通过@pytest.mark.parametrize或@pytest.fixture(params)实现。
失败重跑
unittest不支持用例失败后的自动重跑机制,而pytest通过第三方插件(如pytest-rerunfailures)实现用例重跑。
跳过用例
两者都有跳过用例的功能,unittest通过skip或skipif实现,pytest通过skip或skipif实现,允许在条件满足时跳过用例。
实战演示
通过请求天气和查询身份证接口的测试用例,分别使用unittest和pytest框架进行参数化测试、跳过用例的实现,并通过生成测试报告进行对比。
总结
综上所述,unittest提供基础的单元测试功能,而pytest在unittest的基础上进行了增强和扩展,支持更多的第三方插件,使得测试编写更为灵活和高效。对于初学者,建议先学习unittest,了解其源码后,再逐步接触pytest。源码链接啥意思
自动驾驶综述文章
自动驾驶综述:现状与未来技术 一、概述 本文深入探讨了自动驾驶系统(ADS)的关键元素,包括当前挑战、系统架构、新兴技术以及核心功能,如定位、建图、感知、规划和人机交互。文章还介绍了用于测试和开发的测试数据集和工具集。 二、前景与挑战 自动驾驶的目标包括减少交通事故、缓解交通拥堵、环保出行。它为驾驶员提供了新的可能性,比如优化时间分配和解决出行难题。新兴趋势包括出行服务化和物流行业的革命。 三、技术介绍 自动驾驶等级从无自动化(L0)到完全自动化(L5),L3+要求在特定条件下无需驾驶员干预。ODD定义了系统工作的前提条件,DDT则详述了驾驶任务的子任务。系统框架分为单车辆、互联车辆、模块化和端到端,每种都有其独特优势和局限。 四、传感器与硬件 保证自动驾驶系统稳定性的是高冗余的传感器,包括相机、雷达、激光雷达和本体感知设备。这些传感器各有优缺点,如相机在特定光照条件下的挑战,而雷达和激光雷达则弥补了深度信息的不足。 五、关键技术模块定位与建图:GPS-IMU融合与SLAM技术被用于定位,但存在误差和环境限制。先验地图定位依赖于地图匹配,但制作地图成本高且易受环境变化影响。
感知:目标检测、语义分割、3D目标检测等,摄像机在光照变化和外观变化下显得脆弱,传感器融合是解决方案之一。
评估与规划:风险评估、驾驶行为预测、决策制定中,使用了统计模型和深度学习技术,以优化路径规划。
六、人机交互与工具 人机交互关注驾驶员与车辆的沟通,如目的地输入和车辆状态监控。开放源代码框架如Autoware和Apollo,以及模拟器如CARLA和SUMO,是开发和测试的重要工具。Python接口自动化之yaml配置文件
在先前的Python接口自动化测试系列文章中,我们探讨了“Python接口自动化之数据驱动”,其中涉及了openpyxl操作excel并结合ddt实现数据驱动的相关内容。
在接口自动化测试过程中,配置文件的运用是不可或缺的,比如数据库信息、账号信息、域名等都需要通过配置文件来存储。
在众多配置文件类型中,yaml文件以其简洁的操作和强大的功能,成为了一种流行的选择。相较于ini或conf等配置文件,yaml文件更加简洁,且易于操作,能够存放多种类型的数据。
本文将主要介绍yaml语法的使用、yaml数据的存储方式以及如何封装类来读写yaml配置文件。
一、yaml介绍及使用
yaml简介
YAML语言的设计目标是方便人类读写,本质上是一种通用的数据串行化格式。
YAML语言非常灵活,几乎可以看作是JSON的超集。除了支持注释、换行符分隔、多行字符串、裸字符串以及更灵活的类型系统之外,YAML还支持引用文件,以避免代码重复。
yaml语法规则
基本语法规则如下:
yaml数据结构
▌对象
Map(属性和值)(键值对)的形式:
key:(空格)value:表示一对键值对,空格不可省略。
一行写法:相当于JSON格式:
▌数组
一组连词线开头的行,构成一个数组。数组前加有 “-” 符号,符号与值之间需用空格分隔。
一行写法:相当于JSON:
▌纯量
单个的、不可再分的值。(如:字符串、bool值、整数、浮点数、时间、日期、null等)
二、yaml配置文件的使用
yaml配置文件准备
在项目下新建一个目录config,在目录下新建一个文件config.yaml。
在config.yaml配置文件中写入数据库配置。
yaml配置文件格式校验
对于刚开始接触yaml的同学,可能对yaml格式的掌握不够熟练,容易出现格式错误。这里推荐一个在线网站,用于校验我们写的yaml文件格式是否正确。
在线地址:
bejson.com/validators/y...
三、yaml配置文件读写
python中读取yaml文件前需要安装pyyaml和导入yaml模块。
安装pyYaml
在python中读取yaml文件,需要用到第三方模块PyYaml。
安装命令:
pip install pyYaml
yaml模块源码解析
从yaml模块中提取出load、dump函数。
load:
将yaml流转化为python字典;
dump:
将python对象转化为yaml流;
读写yaml配置文件
将读写yaml配置文件的类进行封装。
在common目录下新建一个文件,config_handler.py用于读写yaml。
config_handler.py
运行结果为:
写入到config1.yaml的数据。
config1.yaml
总结:本文主要介绍yaml语法、yaml储存数据,封装类读取yaml配置文件。