1、pytest介绍

pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。

它具有如下特点:

•非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考

•能够支持简单的单元测试和复杂的功能测试

•支持参数化

•执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败

•支持重复执行失败的case

•支持运行由nose, unittest编写的测试case

•具有很多第三方插件,并且可以自定义扩展

•方便的和持续集成工具集成

2、pytest的安装

pip install pytest

安装完成后,可以验证安装的版本:

pytest --version

3、pytest的命令格式

usage: pytest [options] [file_or_dir] [file_or_dir] [...]

positional arguments:file_or_dir

4、测试用例

1)编写单个测试函数

编写测试文件sample.py,如下:

def func(x):

return x+1

def test_func():

assert func(3) == 5

定义一个被测试函数func,该函数将传递进来的参数加1后返回。还定义了一个测试函数test_func(可以任意命名,但是必须以test开头)用来对func进行测试。test_func中,我们使用基本的断言语句assert来对结果进行验证。执行测试的时候,我们只需要在测试文件sample.py所在的目录下,运行python -m pytest -v sample.py即可

2)编写测试类

当需要编写多个测试样例的时候,我们可以将其放到一个测试类当中

测试文件dd.py

class TestClass:

def test_one(self):

x = "this"

assert 'h' in x

def test_two(self):
x = "hello"
assert hasattr(x, 'check')

运行测试文件pytest dd.py即可

5、如何编写pytest测试样例

规范写法:

•测试文件以test_开头(以_test结尾也可以)

•测试类必须以Test开头,并且不能带有 init 方法(带__init__方法,会报waring)

•测试函数或方法以test_开头,函数体里面使用assert ,调用被测试的函数

•断言使用基本的assert即可

备注:

1、其实测试函数或方法只要以test开头就可以被运行的

2、测试文件的名字,其实可以是任意的文件名,不过以非test_开头的命名时,运行时,必须以指定测试文件名的方式才可以搜索到并执行它,使用pytest,pytest 文件目录,这样的命令,执行测试文件时,是找不到非test_开头的测试文件的

6、如何执行pytest测试样例

pytest # run all tests below current dir

在当前测试文件的目录下,寻找以test开头的文件(即测试文件),找到测试文件之后,进入到测试文件中寻找test_开头的测试函数并执行

pytest test_mod.py # run tests in module 执行某一个指定的测试文件

pytest somepath # run all tests below somepath 运行某一个目录下的所有测试用例

pytest -k stringexpr # only run tests with names that match the

# the "string expression", e.g. "MyClass and not method"

# will select TestMyClass.test_something

# but not TestMyClass.test_method_simple

pytest xxx.py::test_func # 执行某一测试文件中的某一指定函数

7、测试报告

pytest可以方便的生成测试报告,即可以生成HTML的测试报告,也可以生成XML格式的测试报告用来与持续集成工具集成

生成HTML格式报告:

pytest --resultlog=path #默认生成的是html格式

生成XML格式的报告:

pytest --junit-xml=path #不同版本的pytest该命令可能不一样

8、如何获取帮助信息

pytest --version # shows where pytest was imported from

pytest -h | --help # show help on command line and config file options

9、最佳实践

其实对于测试而言,特别是在持续集成环境中,我们的所有测试最好是在虚拟环境中。这样不同的虚拟环境中的测试不会相互干扰的。由于我们的实际工作中,在同一个Jekins中,运行了好多种不同项目册的测试,因此,各个测试项目运行在各自的虚拟环境中。

将pytest安装在虚拟环境中

1、将当前目录创建为虚拟环境

1)virtualenv . # create a virtualenv directory in the current directory

2)source bin/activate # on unix

2、在虚拟环境中安装pytest:

pip install pytest

python测试模块-pytest介绍的更多相关文章

  1. python测试框架-pytest

    一.pytest 介绍.运行.参数化和数据驱动.Fixture pytest安装与介绍 官网 : pip install -U pytest 查看版本号:pytest --version 为何选择py ...

  2. python shutil模块简单介绍

    python shutil模块简单介绍 简介 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作. shutil 模块方法: copy(src, ...

  3. Python测试框架pytest入门基础

    Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...

  4. Python测试模块doctest

    面试被问到了却没有用过,很尴尬:今天看了一下,真的是一个很简单的测试模块 方便起见,这里直接拿菜鸟教程的介绍和例子过来 开发高质量软件的方法之一是为每一个函数开发测试代码,并且在开发过程中经常进行测试 ...

  5. Python测试框架pytest命令行参数用法

    在Shell执行pytest -h可以看到pytest的命令行参数有这10大类,共132个 序号 类别 中文名 包含命令行参数数量 1 positional arguments 形参 1 2 gene ...

  6. python paramiko 模块简单介绍

    背景,公司的很多服务包括数据库访问都需要通过跳板机访问,为日常工作及使用带来了麻烦,特别数python直接操作数据更是麻烦了,所以一直想实现python 通过跳板机访问数据库的操作. 首先了解到了 p ...

  7. 『无为则无心』Python日志 — 64、Python日志模块logging介绍

    目录 1.日志的作用 2.为什么需要写日志 3.Python中的日志处理 (1)logging模块介绍 (2)logging模块的四大组件 (3)logging日志级别 1.日志的作用 从事与软件相关 ...

  8. python numpy 模块简单介绍

    用python自带的list去处理数组效率很低, numpy就诞生了, 它提供了ndarry对象,N-dimensional object, 是存储单一数据类型的多维数组,即所有的元素都是同一种类型. ...

  9. Python datetime模块的介绍

    datetime模块常用的主要有下面这四个类:(要清楚import datetime : 导入的是datetime这个包,包里有各种类) 1. datetime.date   用于表示年月日构成的日期 ...

随机推荐

  1. Codeforces 455C Civilization:树的直径 + 并查集【合并树后直径最小】

    题目链接:http://codeforces.com/problemset/problem/455/C 题意: 给你一个森林,n个点,m条边. 然后有t个操作.共有两种操作: (1)1 x: 输出节点 ...

  2. Mysql远程链接访问权限设置

    Host 'XXX' is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号 如何开启MySQL的远程帐号-1)首先以 r ...

  3. scanf ---------未完待续

    1.不可读入空格 #include<iostream> #include<stdio.h> using namespace std; int main() { char c[5 ...

  4. Javascript-- jQuery事件篇(3)

    on()的多事件绑定 之前学的鼠标事件,表单事件与键盘事件都有个特点,就是直接给元素绑定一个处理函数,所有这类事件都是属于快捷处理.翻开源码其实可以看到,所有的快捷事件在底层的处理都是通过一个&quo ...

  5. C++如何拒绝编译器自动生成的函数

    每一个class,编译器都会自动生成四个特殊成员函数: destructor(析构函数) default constructor(默认构造函数) copy constructor(copy构造函数) ...

  6. hdp 集群问题解决记录

    2019-04-23 14:16:21,769 WARN namenode.FSImage (EditLogFileInputStream.java:scanEditLog(359)) - Caugh ...

  7. 【C++ Primer 5th】Chapter 1

    1. 每个C++都包含至少一个函数,其中一个必须为main函数,且 main 函数的返回类型必须为 int. 2. 函数定义包括:返回类型,函数名,形参列表,函数体 3. main 函数返回值用来指示 ...

  8. python中文件打开的各个标识含义

    w代表清空后写入 r代表打开后追查 +代表可以写 b代表二进制写入

  9. strcmp strcpy的使用 char类型

    //判断从控制台输入的密码是否正确 BOOL varifyPassWord(char passWord[] , int index) { BOOL result = YES; int count = ...

  10. CSS 关于文本 背景 边框整理

    文本与字体 1)阴影:text-shadow 格式:text-shadow:5px 5px 3px #FFFFFF分别对应 水平方向 垂直方向 模糊程度 颜色值 代码: <!DOCTYPE ht ...