pytest框架的安装与使用

一,pytest了解

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

  优点:

  1.第一个优点肯定是简单,灵活,易上手

  2.支持参数化,pytest直接使用@pytest.mark.parametrize装饰器

  3.能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)

  4.pytest有丰富的第三方插件库,比如pytest-HTML、allure插件,专门用作与测试报告。pytest-selenium插件,集成测试。pytest-rerunfailures插件,用于失败重跑。pytest-assume插件,多重效验。pytest-ordering设定执行顺序等实用插件。

  5.pytest断言直接在assert 后面接表达式

  6.conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置,可供多个py文件调用。

  7.scope="session" 以实现多个.py跨文件使用一个session来完成多个用例

二,安装

  1.安装pytest

   2种安装方法。

    1是直接通过pip安装。安装命令为:pip install pytest,

    检测是否安装成功命令:pytest --version ,如果他显示了版本名称,就表示已经安装成功。

    2是通过官网直接下载然后放进python插件库里。

    下载地址:https://pypi.org/project/pytest/

  2.安装插件

  安装html插件命令:pip install pytest-html

  除开 pytest-html插件外 ,pytest还具备丰富的插件库,pytest插件汇总站点:http://plugincompat.herokuapp.com/

三,pytest执行测试需要遵循的规则(重要)

  · .py测试文件必须以test_开头或者_test结尾

   · 测试类必须以Test开头,并且不能有init方法

   · 测试方法必须以test_开头

   · 测试断言用assert

  使用:

  1,先创一个以test_开头的文件

  2,创建一个Test_code

  3,创建测试方法

 # -*- coding: utf-8 -*-

 class Test_code:
def test_jian(self):
assert 520==520

执行有两种方法:

1,是通过dos命令或者pycharm的命令窗口输入pytest。

  我这是通过pytest 地址 指定搜索的目录下的文件,直接执行文件中所有的用例,也可以精确到类,某个用例。
  还可以通过输入pytest直接所搜用例并执行。会在默认从当前目录中搜索用例,即在哪个目录下运行pytest命令,则从哪个目录中搜索。

2是通过在主函数中用代码执行。需要导入pytest包。

  可以在mian()中填上哪个用例方法就执行哪个。

 

# -*- coding: utf-8 -*-
import pytest
class Test_code:
def test_jian(self):
assert 520==520 if __name__ == '__main__':
pytest.main()

四,全能的mark

  1,标签

    我们在运行测试用例的时候,有时候不需要全部测试,那我们就可以通过给用例打标签的方式来执行用例。

    使用:

    1,创建一个pytest.ini文件,在文件中按照以下格式添加标签名:

    2,我们通过 (@pytest.mark.标签名) 这个代码放在用例上面来标明。一个用例可以用多个标签来表示

    冒号前是标签名,冒号后面是注释,方便明白标签是什么意思。

    注意:这个文件中不能含任何中文。

[pytest]
markers=
smoke:smoke test
demo:demo test

    给用例赋予标签,代码如下:

    注意:可以给类赋予标签,也可以给用例赋予标签

# -*- coding: utf-8 -*-
import pytest @pytest.mark.demo
class Test_code:
@pytest.mark.smoke
def test_jian(self):
assert 520==520

    运行:dos命令     pytest -m 标签名

或者

if __name__ == '__main__':
pytest.main(['-m','demo'])

  2,fifixture功能  

  在执行测试用例前往往需要进行环境的准备,在执行完用例,将环境销毁。在unittest中一般通过 setUp与tearDown来进行用例前的环境准备和用例后的环境销毁。而在pytest中还有另外一种方式——fifixture。与setup和teardown相比,fifixture使用起来更加灵活,更加方便。
  

  Fixture的使用
  这是fixture在页面中代码使用方法
  使用@pytest.mark.usefixtures("环境方法名") 代码放在用例或者类前,放在类前就是这个类里面的用例都会先执行环境。
 
# -*- coding: utf-8 -*-
import pytest
#把前置
@pytest.mark.demo
class Test_code:
 
   @pytest.mark.usefixtures("aa1")  #把环境放在用例前,会在执行用例前执行这个环境aa1
@pytest.mark.smoke
def test_jian(self):
assert 520==520 @pytest.fixture() #声明这是fixture函数,
def aa(seif):
print("先执行我,然后再执行用例方法")
aa=1+1
yield aa1 # 类似分隔符号, yield 后面接变量名 再执行后可以输出aa
print("执行完用例后再执行我")

  多个文件共享一个fixture

  可以可以将fixture放在指定文件conftest.py中,来实现多个文件共享一个fixture(文件名不可更改)

import pytest

@pytest.fixture()       #声明这个是fixture函数
def aa(seif):
print("先执行我,然后再执行用例方法")
aa=1+1
yield aa # 类似分隔符号, yield 后面接变量名 再执行后可以输出aa
print("执行完用例后再执行我")

  3,参数化

  pytest参数化 和unittest中的ddt相似。都是把数据放入用例中执行。

  使用@pytest.mark.parametrize() 代码将数据代入用例中,括号中必须声明代入用例中的变量名,用引号引起,变量名必须一样

list=([('741852963', '123456', '123456'),
    ('122886', '123456', '123456')])
@pytest.mark.parametrize('urer,passd,ex',list) # 代入数据代码
def test_shuju(self,urer,pwd,ex): #变量名要和parametrize里面一样
print('这个是用户名'.format(urer))
print('这个是密码{}'.format(pwd))
assert pwd==ex

  4,失败重跑

   我们使用:pip3 install pytest-rerunfailures  代码来下载插件

   使用:@pytest.mark.flaky() 代码放在用例前面

list=([('741852963', '123456', '123456'),
    ('122886', '123456', '123456')]) @pytest.mark.flaky(reruns=5, reruns_delay=1) # 如果失败则延迟1s后重跑 最多跑五次
@pytest.mark.parametrize('urer,passd,ex',list)
def test_shuju(self,urer,pwd,ex):
print('这个是用户名'.format(urer))
print('这个是密码{}'.format(pwd))
assert pwd==ex

  

  

pytest框架的安装与使用的更多相关文章

  1. pytest 简介与安装

    前面我们已经基本上掌握了unittest测试框架,下面我们将学习新的pytest测试框架.之于原因嘛,太流行啦!掌握一个框架是不够的,急需另外一个,于是瞅上了pytest. pytest是什么? py ...

  2. pytest 框架自动化Selenium 之yield 使用

    环境 python 3.7 由于3.0-3.5以下部分pytest可能有部分兼容问题安装建议2.7-2.9,3.5-最新 pip install pytest专属 pytest框架包 pip inst ...

  3. Pytest框架介绍

    Pytest框架介绍.安装 pytest是python测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,功能更强大 pytest特征 1:断言提示信 ...

  4. pytest框架之rerunfailures失败重运行机制

    web自动化测试中,稳定性在整个测试运行中都至关重要,但不能保证测试脚本或者测试环境一直都能够稳定,它牵扯到诸多因素,在这里就不赘述,pytest框架相较于unittest的一大优势就在于拥有用例失败 ...

  5. 【Pytest01】全网最全最新的Pytest框架快速入门

    一.Pytest简介pytest是一个非常成熟的全功能的Python测试框架,主要有一下几个特点:1.简单灵活,容易上手,支持参数化2.能够支持简单的单元测试和复杂的功能测试,还可以用来做seleni ...

  6. pytest框架使用教程

    Pytest框架 一.简介 pytest:基于unittest之上的单元测试框架 有什么特点? 自动发现测试模块和测试方法 断言更加方便,assert + 表达式,例如 assert 1 == 1 灵 ...

  7. requests接口自动化-pytest框架

    pytest框架规则 测试文件以test_开头或者以_test结尾 测试类以Test开头,并且不能带有init方法 测试函数以test_开头 断言使用assert pytest框架运行用例 运行单个文 ...

  8. 自从学会了Python自动化Pytest框架,领导再也不敢在我背后指手划脚了

    前言 大家都知道Python有自带的单元测试框架unittest,那为什么还要学习Pytest呢?先了解下Pytest优点 pytest: pytest是一个非常成熟的全功能的Python测试框架,是 ...

  9. 『德不孤』Pytest框架 — 2、Pytest的基本使用

    目录 1.Pytest安装 2.Pytest常用插件 3.Pytest运行的第一个例子 4.Pytest框架的运行方式 5.在PyCharm中以Pytest的方式运行测试用例 1.Pytest安装 C ...

随机推荐

  1. 【JMeter_06】JMeter逻辑控制器__If控制器<If Controller>

    If控制器<If Controller> 业务逻辑: 根据表达式的结果来决定是否执行控制器下的脚本内容,与编程语言中的if判断逻辑大致相同,表达式结果为布尔值 true或false; 当表 ...

  2. Java 多线程基础(六)线程等待与唤醒

    Java 多线程基础(六)线程等待与唤醒 遇到这样一个场景,当某线程里面的逻辑需要等待异步处理结果返回后才能继续执行.或者说想要把一个异步的操作封装成一个同步的过程.这里就用到了线程等待唤醒机制. 一 ...

  3. 认证授权方案之JwtBearer认证

    1.前言 回顾:认证方案之初步认识JWT 在现代Web应用程序中,即分为前端与后端两大部分.当前前后端的趋势日益剧增,前端设备(手机.平板.电脑.及其他设备)层出不穷.因此,为了方便满足前端设备与后端 ...

  4. 3D 立体动态图 代码:

    CSS样式: <style>*{ margin:0; padding:0;}body{ max-width: 100%; min-width: 100%; height: 100%; ba ...

  5. .Net Core 中GC的工作原理

    前言 .NET 中GC管理你服务的内存分配和释放,GC是运行公共语言运行时(CLR Common Language Runtime)中,GC可以帮助开发人员有效的分配内存和和释放内存,大多数情况下是不 ...

  6. Java闭包概念

    闭包又称词法闭包 闭包最早定义为一种包含<环境成分>和<控制成分>的实体. 解释一:闭包是引用了自由变量的函数,这个被引用的变量将和这个函数一同存在. 解释二:闭包是函数和相关 ...

  7. 【服务器】CentOs7系统使用宝塔面板搭建网站,有FTP配置(保姆式教程)

    内容繁多,请耐心跟着流程走,在过程中遇到问题请在下面留言(我只是小白,请专业人士喷轻点). 这次用thinkphp5.1做演示,单纯的做演示,我打算下一篇文章用typecho(博客框架)演示. 前言 ...

  8. Spring IoC component-scan 节点详解

    前言 我们在了解 Spring 容器的扩展功能 (ApplicationContext) 之前,先介绍下 context:component-scan 标签的解析过程,其作用很大是注解能生效的关键所在 ...

  9. 写给.NET开发者的Python教程(一):引言

    距离上一篇博文已过去8个月了,这段时间发生了很多事情导致没能持续更新博客.这段时间除了工作繁忙,业余时间都投入到AI技术的学习中,后面一段时间将会给大家分享我作为一个.NET开发人员在深度学习领域学习 ...

  10. node+ajax实战案例(6)

    8.删除客户 8.1.发送id到后台 删除用户信息比较简单,只需要把对应行的id发送到后台就可以了 oTable.onclick = function (ev) { var ev = ev || ev ...