- 博客(82)
- 资源 (12)
- 收藏
- 关注
翻译 pytest官方文档 6.2 中文翻译版(第二十章):编写钩子方法
20.1 钩子方法的验证和执行pytest从所有注册的插件中调用符合钩子规范的方法。我们看一个典型的钩子,作用是在所有的测试被收集之后调用:pytest_collection_modifyitems(session, config, items) 。当我们在我们的插件中调用了pytest_collection_modifyitems方法,那么在插件注册的时候,pytest就会验证你使用的参数名称是不是符合规范,如果不是,就放弃。我们看看可能的实现:def pytest_collection_modi
2021-11-12 14:34:54 880
翻译 pytest官方文档 6.2 中文翻译版(第十九章):编写插件
在大多数项目中,引入本地的 conftest 插件或者使用pip安装插件都是可以的,包括第三方的项目。如果要使用一个插件而非自己写一个插件,可以参考上一章。一个插件包括一个或者多个钩子方法。下一章(编写钩子)解释了写一个钩子所需要的基本信息和详细信息。pytest通过以下插件中指定的钩子来实现 配置,收集,运行,报告等多个方面:内置的插件:从pytest内部的_pytest目录加载外部的插件:通过setuptools入口点发现的模块( setuptools entry points)19.4con
2021-11-12 09:15:07 527
翻译 pytest官方文档 6.2 中文翻译版(第十八章):安装和使用插件
安装和使用插件这一章我们来看如何安装和使用第三方插件。如果你要写自己的插件,请看下一章。可以简单的使用pip安装一个第三方插件:pip install pytest-NAMEpip uninstall pytest-NAME如果安装了一个插件,pytest会自动寻找和集成这个插件,无需激活(activate)操作。下面是一些流行插件的说明:pytest-django:为django应用编写测试,使用pytest集成pytest-twisted: 为twisted应用编写测试, 从测试函数
2021-05-31 15:46:11 499
翻译 pytest官方文档 6.2 中文翻译版(第十七章):经典XUnit风格的setup
经典XUnit风格的setup这一节描述在module/class/function上面,如何实现夹具的最经典也是最受欢迎的方法。注意:虽然说 setup/teardown 在之前的unittest和nose中都十分常见,我们也很熟悉这种写法,但是pytest的这种结合了依赖注入概念的夹具的思想是十分值得思考的,这种方式给大型的项目的测试和功能测试提供可更加模块化和更加可扩展的方式来管理测试状态。你可以在一个文件中混合这几种方式,但是继承自unittest.TestCase的类不能接收夹具参数。17.
2021-05-25 15:43:03 223 3
翻译 pytest官方文档 6.2 中文翻译版(第十五章):运行nose写的测试
译者注:由于我没有用过nose,所以这一章的翻译可能有些词不达意的地方,如有错误请指出pytest提供了对于nose写的测试的基本支持。16.1 用法在安装了pytest之后,在命令行中使用:python setup.py develop # 确定测试可以import我们的包pytest # 替换 'nosetests'这样你就可以使用pytest来运行nose风格的测试了。16.2 支持的nose风格在模块、类、方法级别的setup和teardownSkipTest异常和标记set
2021-05-25 14:59:46 213
翻译 pytest官方文档 6.2 中文翻译版(第十五章):UNITTEST.TESTCASE 支持
pytest支持开箱即用的运行以 Python unittest 为基础的测试。这是为了在已有的在以unittest为基础的(unittest-based)测试上面进行扩充,使用pytest作为运行器。同时,这也可以让测试逐步的使用pytest提供的功能以获取个别更多的优势。使用pytest运行已存在的unittest风格的测试:pytest testspytest会自动的收集 unittest.TestCase 的子类和在test_.py 或是_test.py文件中的测试方法。几乎所有的unit
2021-05-24 16:20:47 861
翻译 pytest官方文档 6.2 中文翻译版(第十四章):Cache:管理跨测试的状态
14.1 用法这个插件提供了两个命令行参数用于在测试失败的时候重新运行失败的用例:–lf, --last-failed 只重新运行失败的用例–ff, --failed-first 先重新运行失败的用例,然后运行其他的为了执行清理(通常情况下不需要),使用 --cache-clear 允许我们在测试运行之前删除所有的之前运行的cache。其他的插件可以在pytest执行的时候访问 config.cache 对象来获取一个json格式的值。注意:这个插件默认是开启的,如果你需要也可以关上:查看1
2021-05-24 11:38:44 257
翻译 pytest官方文档 6.2 中文翻译版(第十三章):参数化的夹具和测试
参数化的夹具和测试pytest在多个级别上都可以做参数化:pytest.fixture() 允许用户参数化夹具函数@pytest.mark.parametrize 允许用户给测试方法或者类定义多组参数或者多个夹具pytest_generate_tests允许用户定义自定义的参数格式或者扩展13.1 @pytest.mark.parametrize: 参数化测试方法内置的 pytest.mark.parametrize 修饰器允许测试参数的参数化。这是一个测试给定的参数的运行结果是不是等于期望
2021-05-24 09:38:23 468
翻译 pytest官方文档 6.2 中文翻译版(第十二章):skip 和 xfail处理那些无法成功的测试
你可以给那些不能在特定平台运行的测试或者那些本就期望失败的用例做个标记,这样ytest就可以处理这种用例并且提供一个测试运行的总结,同时保持测试集 green。skip的意思是你希望测试在某些情况下可以通过,否则,pytest应该整体跳过这个测试。比较通用的例子是在非windows的环境下跳过那些只能在windows下运行的用例或者在一些资源还没有准备好的时候跳过依赖这些资源的用例(例如一个数据库)。xfail表示由于一些原因我们期望测试失败。一个常见的例子是我们测试的功能还没有实现或者bug还没有被修
2021-05-16 11:33:09 289
翻译 pytest官方文档 6.2 中文翻译版(第十一章):模块和测试文件中的文档测试(doctest)集成
译者注:doctest是python标准的模块,如果要了解相关的知识可以百度doctest默认情况下,所有符合 test*.txt 模式的测试文件会被python标准的 doctest 模块执行,你可以通过命令行参数来改变这种默认行为:pytest --doctest-glob="*.rst"–doctest-glob 可以在命令行中被多次指定。假设我们有这样一个文件:# content of test_example.txthello this is a doctest>>&
2021-05-14 17:23:24 384
翻译 pytest官方文档 6.2 中文翻译版(第十章):警告捕捉
从3.1版本开始,pytest会在整个测试执行的过程中自动的捕捉警告:# content of test_show_warnings.pyimport warningsdef api_v1(): warnings.warn(UserWarning("api v1, should use functions from v2")) return 1def test_one(): assert api_v1() == 1运行pytest之后会得到下面的输出:$ pytest test_
2021-05-14 09:51:35 508
翻译 pytest官方文档 6.2 中文翻译版(第九章):捕获 STDOUT/STDERR 输出
捕获 STDOUT/STDERR 输出译者注: stdout是标准输出设备 stderr 是标准错误输出设备9.1 默认的 stdout/stderr/stdin 捕捉行为在测试执行的过程中,很多输出被 stdout 和 stderr 捕获。当一个测试或者setup方法失败的时候,相关的输出经常会与错误跟踪( failure traceback)一起显示。(这个行为可以被命令行中 --show-capture 选项配置)。另外,如果从stdin中读取失败了,它将会被设置为“null”,因为在自动
2021-05-10 11:29:10 740
翻译 pytest官方文档 6.2 中文翻译版(第八章):临时目录和文件
临时目录和文件tmp_path 夹具你可以使用 tmp_path夹具为每一个测试调用创建一个独立的临时目录,这个牡蛎的创建是基于 根临时目录的。译者注:根临时目录是所有临时目录的父目录,可以使用命令行指定,也有默认值tmp_path 是 pathlib.Path 的一个实例,下面是使用的例子:# content of test_tmp_path.pyCONTENT = "content"def test_create_file(tmp_path): d = tmp_path / "sub
2021-05-09 03:27:23 351
翻译 pytest官方文档 6.2 中文翻译版(第七章):猴子补丁/模拟模块和环境
猴子补丁(MonkeyPatch)/模拟(Mock)模块和环境有些时候,测试需要调用那些依赖于全局设置的功能或者调用例如网络访问这种不易被测试的功能。猴子补丁 夹具可以帮助你安全的设置和删除一个属性,字典中的一项或环境变量,还可以改变 sys.path。猴子补丁(monkeypatch) 家具提供了下面一些有用的方法来安全的 模拟或者补丁测试中的一些功能:monkeypatch.setattr(obj, name, value, raising=True)monkeypatch.delattr(ob
2021-05-09 02:11:01 496
翻译 pytest官方文档 6.2 中文翻译版(第六章):使用属性标记测试用例
使用属性标记测试用例使用 pytest.mark 可以帮助你在测试函数上简单的设置元数据。你可以在 API Reference 中找到完整的内置标记(marks)的列表。你也可以使用 pytest --markers 命令列出所有的内置和自定义的标记。这里是一些内置的标记:usefixtures 在测试函数或者测试类上使用夹具filterwarnings 过滤一个测试方法中的特定警告skip 总是跳过一个测试函数skipif 在一定的条件下跳过测试方法xfail 在一定条件下
2021-05-06 20:42:38 352
翻译 pytest官方文档 6.2 中文翻译版(第五章):pytest夹具:明确的,模块化的,可扩展的
软件测试夹具是用于初始化的测试功能的。它们提供了一个固定的基线,以便测试能够可靠地执行并产生一致的,可重复的结果。初始化可能会设置服务、状态或其他运行环境。测试函数可以通过参数访问测试夹具,通常在测试函数的定义中对于测试函数使用的每一个夹具都有定义。pytest 夹具对经典的xUnit风格的setup/teardown函数进行了显著的改进夹具有一个确定的名字,在测试函数,模块,类,甚至整个项目都可以声明使用夹具以一种模块化的方式实现,因为每个夹具名称都会代表一个函数,而夹具本身也可以使用其他夹具。夹
2021-04-30 16:11:47 1010
翻译 pytest官方文档 6.2 中文翻译版(第四章):测试中断言的编写和报告
测试中断言的编写和报告4.1 使用assert声明来断言pytest允许你在测试中使用标准的assert关键字来验证期望值和实际结果。例如你可以编写下面的代码:# test_assert1.pydef f(): return 3 def test_function(): assert f() == 4这段代码用于验证你的函数返回了一个特定的值。如果断言失败了你能够看到函数的实际返回值。$ pytest test_assert1.py==========================
2021-04-15 11:40:02 528
原创 python通过ctypes调用C++ DLL过程中返回值的指定和结构体数组的使用
在做自动化测试的过程中,我需要使用python调用C++的SDK,完成接口测试的工作。由于团队只提供了C++的SDK源码,所以我需要做下面几件事:封装C++的接口,进行接口的导出打包为DLL,动态链接库使用ctypes库,调用dll,完成测试网上关于python通过ctypes调用C++动态链接库的教程非常多,我就不再写了,这里就写一下我在使用过程中遇到的两个问题:接口返回为应字符串,C++代码中声明为char *,如何在python中获取字符串的返回值?参数中有结构体,返回值是结构体,返
2021-04-13 10:04:40 4452 2
翻译 pytest官方文档 6.2 中文翻译版(第三章):在现有的测试套件中使用pytest
在现有的测试套件中使用pytest译者注:这节虽然翻译是这个样子的,但事实上这节是说如何在运行测试程序,安装依赖的时候使用编辑模式(开发者模式)Pytest可以与现有的大多数测试框架一起使用,但它运行起来与nose或Python自带的unittest框架有一些一些区别。在阅读本章节之前,您需要先阅读第一章节 安装pytest。3.1 使用pytest运行一个已经存在的测试套件假设你计划向一个已存在的仓库贡献一些代码。在使用版本控制工具的一些功能拉取代码到本地之后,设置一个虚拟的运行环境(virtu
2021-03-29 10:32:33 358
翻译 pytest官方文档 6.2 中文翻译版(第二章):使用和调用
使用和调用2.1 通过python -m pytest调用pytest你可以在命令行中通过python解释起调用测试:python -m pytest [...]这种方法与在命令行中使用 pytest […] 几乎是等效的,而使用python调用比直接使用pytest多做的事情是程序将把当前目录添加至 sys.path.2.2 可能的退出代码运行pytest有六种可能的退出代码:退出代码 0:所有测试都被收集且成功通过退出代码 1:所有测试都被收集但只有部分测试通过退出代码 2:测试
2021-03-26 15:21:51 1097
翻译 pytest官方文档 6.2 中文翻译版(第一章):安装和入门指南
安装和入门指南Python版本: Python 3.6, 3.7, 3.8, 3.9, PyPy3平台: Linux and WindowsPyPI 包名: pytestDocumentation as PDF: download latestpytest 是一个测试框架,可以让你轻而易举的构建简单的和可扩展的测试。 测试没有过多的样板代码,一切都是简单易读的。可以在几分钟就写好一个针对你的应用程序或者库的小型单元测试或复杂功能测试。1.1 安装 pytest在你的命令行中运行下面的命令pi
2021-03-19 15:24:07 2873
原创 git命令学习&速查
写在前面文中用[ ]括起来的是变量,推荐使用图形化的git练习网站练习git的操作,更加的直观传送门提交git commit新建分支git branch [branch_name]切换分支git checkout [branch_name]新建并切换分支git checkout -b [branch_name]合并分支# 在main分支上合并bugfix分支git merge bugfix注意:如果处于父节点上merge子节点,则head直接跳到子节点,因为子节点拥有
2021-03-15 16:12:59 280
原创 Groovy基础速查
参考资料精通 Groovy一些特性无类型 用def定义变量和函数函数支持默认参数Groovy中不支持将函数名作为参数传递,但是支持闭包的延迟执行,所以本质上也是可以实现函数的延迟调用的函数传参,加不加括号一个样,比如 println(‘123’) 和 println ‘123’ 是一样的返回值是函数的最后一行,可以不写返回值,写了也就写了,很灵活def test(){ '123'}println(test())可以使用 ?. 的方式排除空指针异常range范围在G
2020-12-12 10:15:23 265
原创 jira测试用例管理插件synapseRT使用讲解大纲
总图注:需求跟踪矩阵用于跟踪需求的状态概念测试用例测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。测试用例是一个标准的JIRA问题类型,并且是预先定义好的。测试用例集(测试用例分组)测试用例集是对测试用例进行组织和分组的实例,在测试用例集中可以创建子测试用例集,也可以创建或者链接测试用例。注意我们使用的过程中多用树形结构组织测试用例集。测试计划(每次测试需要执行的用例)测试计划描述了测试范围和测试活动。它是在一个项目中
2020-11-10 14:36:42 3884 2
原创 Docker速查笔记
准备查看目前centos版本rpm -q centos-release打开官方文档https://docs.docker.com/engine/install/centos/#install-using-the-repository安装根据官方文档安装docker 官方文档修改镜像需要登录阿里云开发者平台,具体操作看这一篇博客容器镜像服务地址...
2020-11-02 14:05:58 343
原创 最详细的JavaScript高级教程(十九)函数表达式和闭包
这一章我们介绍函数表达式,在开始的时候我们会复习到很多之前学过的知识。定义我们之前学过函数提升相关的知识,定义的函数会提升,定义的函数作为变量则不会提升,我们还举例说过下面的代码才能达到效果var condition = false;var sayHi = null;if(condition){ sayHi = function(){ alert('true'); }}else{ sayHi = function(){ alert('fal
2020-06-05 10:47:43 414
原创 最详细的JavaScript高级教程(十八)高级原型链
经典继承(借用构造函数)为了解决之前提到的超类型构造函数中引用类型的问题,我们可以使用借用构造函数的方式 function SuperType() { this.property = ['red']; } function SubType() { SuperType.call(this); // 借用构造函数 } var instance = new SubType(); alert(instance instanceof SubType); alert(ins
2020-06-05 10:31:39 562
原创 最详细的JavaScript高级教程(十七)原型链
概述首先说明,学习原型链的知识是为了更好的理解原型和原型对象,在实际应用中很少单独使用下面介绍的原型链,具体的原因是下面提到的它的缺点。我们复习一下之前的知识:构造函数的prototype指向了原型对象原型对象中constructor指向了构造函数实例中的__proto__指向了原型对象这时候我们如果将一个实例的原型指针,指向另一个对象的实例,这时候这些实例就会串成一个链条,即A实例的__proto__指向B实例,B实例的__proto__又指向其原型对象。下面的代码是原型链的基本实现:
2020-06-05 10:25:31 356
原创 最详细的JavaScript高级教程(十六)创建对象
创建一个对象再给这个对象赋值的操作需要大量的代码,如果要创建多个对象,就要写很多重复代码,对象的创建可以使用下面这些方法来避免写大量的不好维护的重复代码。工厂模式优点:创建一个对象的大量实例缺点:无法进行对象识别,即使用工厂模式创建的对象,还是Object对象,不是一种新的对象,也就不能使用instanceof进行验证。总结就是说:工厂模式虽然创建了Person类的实例,但是却没有创建Person本身,Person的实例也无法标识出来。function createPerson(name, ag
2020-06-05 10:07:29 315
原创 最详细的JavaScript高级教程(十五)对象的属性
概念ES对于对象的定义是:无序属性的集合,其属性可以包括基本值,对象或者函数。从中我们可以发现,js中的对象有下面的特征无序的集合,这个就让js中的对象更像是散列表,是一系列无序的键值对的集合属性包括基本值,对象或者函数。这个把属性可以包括哪些数据类型说的很清楚了属性类型ES中有下面两种属性数据属性访问器属性顾名思义,数据属性可以保存一个数据值,而访问器属性本身不能保存数据值,但是可以通过getter setter进行访问控制,它的属性存储还需要额外的数据属性。数据属性中值是如何存
2020-06-04 15:30:16 316
原创 最详细的JavaScript高级教程(十四)单体内置对象
定义由语言本身实现,不依赖宿主对象,不用初始化即可使用的对象,我们可以理解在语言所有初始化开始之前就初始化完成的对象。一共由下面五个:ObjectArrayStringGlobalMathGlobal的方法全局对象,可以认为是终极对象,所有不属于其他对象的属性和函数都是全局对象的函数。它有下面这些方法:isNaN()isFinite()parseInt()parseFloat()URI编码方法,用于编码URI中例如空格这种不能包含的字符为编码值// encodeURI 智能对
2020-06-04 15:10:16 387
原创 最详细的JavaScript高级教程(十三)包装类型
概念在讲js中包装类型的概念的时候我们想到在C#中,同样有包装类型的概念。基本类型不能有属性和方法,而string,int等都是基本类型,讲道理他们不该有int.parse这种使用,但是我们在别的语言中,经常使用这种语法,为什么呢?这时候我们想到,C#中有String对象,大小写只差,string是基本类型,String是对象,这个对象就是string的包装,js中同样需要这样的包装以实现类似于下面的调用var s1 = 'text';var s2 = s1.substring(2);js中的
2020-06-04 15:02:39 324
原创 最详细的JavaScript高级教程(十二)函数
函数也是对象,也是引用类型。定义两种定义方法都是等价的function sum(arg1, arg2){ return arg1 + arg2;}var sum2 = function(arg1, arg2){ return arg1 + arg2;}函数指针需要理解,函数名只是函数的指针,可以新建指针指向一个函数,也可以将原先指向函数的指针清空function sum(arg1, arg2){ return arg1 + arg2;}var sum1 =
2020-05-19 10:24:49 530
原创 最详细的JavaScript高级教程(十一)正则表达式
正则表达式概念本节讲正则表达式在js中的使用,注意正则对象是一个引用类型。初始化:字面量和对象使用与对象的定义一样,我们可以使用字面量定义正则表达式,也可以使用正则对象来定义正则表达式,他们的区别是使用的转义有一定差别。在使用字面量的时候,使用/ /把正则表达式包起来,后面可以写上匹配模式或者不写,不写默认不是全局匹配,我们在使用的时候,一般都是使用字面量来初始化,因为这样比较简单,转义也不像字符串那么复杂。// 正则表达式 /at/g 表示匹配所有at /g表示全局搜索var patter
2020-05-14 15:54:02 8038 12
原创 最详细的JavaScript高级教程(十)日期和时间 Date对象
概念js中使用utc时间保存日期和时间,即1970年1月1日零点开始经过的毫秒数保存时间。Date类型是引用类型。定义注意新定义一个时间如果什么都不传,默认值是创建的时候的当前时间var now = new Date();var now = new Date(22334242); // 可以传入毫秒数初始化var now = new Date("1/2/2019");// 可以使用字符串作为参数,此时底层默认调用parsevar now = new Date(2000, 2, 3, 4, 5,
2020-05-14 15:10:40 341
原创 最详细的JavaScript高级教程(九)Array
Array类型是js中常用的引用类型。js中的Array最大的特点就是:数组可以容纳多种类型的元素,数组在定义的时候不用指明元素类型,一个数组中可以混杂多种数据类型。创建数组// 使用Array对象初始化// 需要预先知道元素数量var colors = new Array(10);// 传入数字,则使用数字个数初始化数组// 传入其他数据类型,则创建只有一个元素的数组var colors = new Array('red');// 使用多个元素初始化Arrayvar colors = n
2020-05-14 15:01:04 643
原创 最详细的JavaScript高级教程(八)值类型和引用类型
值类型和引用类型在js中,除了Object,其他五种基本类型都是值类型,包括String也是值类型。注意:允许给引用类型动态的添加属性值,不允许给值类型添加属性值。// 基本类型,不能添加属性,会报错var test = "sss";test.name = "W";alert(test.name);// 引用类型,可以动态添加属性,输出正常var test = new Object(); test.name = "W";alert(test.name);值类型是复制值,引用类
2020-05-11 10:57:38 258
原创 最详细的JavaScript高级教程(七)表达式
if语句推荐if语句中的表达式不管是不是单行都用大括号括起来以简化阅读。循环语句JS中支持 do while语句 和 while语句,这两种的用法与其他语言相似,这里就不多赘述了,我们看一看for的一些特殊的例子,一看便明白// 不存在块级作用域,所以外部也能访问for(var i = 0; i < 10; i++){ }alert(i) // 输出10// 无限循环for(;;){}// for当成while用var i = 0;for(;i < 10;){
2020-05-11 10:49:25 350
原创 最详细的JavaScript高级教程(六)操作符
写在前面我曾经辅导过很多人编程,其中有学霸也有学渣,而编程这个事情,学霸经常会陷入一个 误区:所有的语法都要记住,所有的特性都要了如指掌才算精通。而我们所面对的笔试甚至一些面试也加深了这种印象,事实真的如此么?对于枯燥的语法知识,我们要知其然,知其所以然,但是不需要死记硬背,我们的大脑善于记住感性的东西,所谓:一朝被蛇咬就是如此,我们讲的一些不常用的特性,大家只需要在大脑中形成这里有坑的印象,用的时候回来再看就是了,记住:书是用来查的,教程也是。自增自减自增自减的逻辑与c一致,这里不过多叙述,我们只
2020-05-11 10:39:08 371
原创 最详细的JavaScript高级教程(五)数据类型
ES5只有五种基本数据类型和一种复杂数据类型。五种基本数据类型是:UndefinedNullBooleanNumberString一种复杂类型是:Object Object本质上就是一个哈希表,有键值对构成所有的值最终都是上述六种类型。使用typeof就可以获取值的数据类型,获取的类型和基本类型稍微有点不同Undefined 值未定义Boolean 布尔值Number 数值String 字符串Object 对象或者nullfunction 函数需要注意的是type
2020-05-11 09:23:38 461
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人