pytest是python语言中一款强大的单元测试框架,用来管理和组织测试用例,可应用在单元测试、自动化测试工作中。

unittest也是python语言中一款单元测试框架,但是功能有限,没有pytest灵活。

就像:苹果电脑mac air 和mac pro一样。都是具备同样的功能,但是好用,和更好用。

本文包含以下几个内容点:

1)pytest的简单示例

2)pytest的安装

3)pytest的特征、与unittest的区别。

4)  pytest如何自动识别用例。

5)pytest框架中,用例的运行顺序。

1)pytest写用例很简单,下面是一个简单的例子:

 import random

 def test_demo():
assert 7 == random.randint(0,10)

运行结果如下:

============================= test session starts =============================
platform win32 -- Python 3.7.2, pytest-4.6.3, py-1.8.0, pluggy-0.12.0
rootdir: D:\Pychram-Workspace\STUDY_PYTEST
plugins: allure-pytest-2.6.5, html-1.21.1, metadata-1.8.0, rerunfailures-7.0collected 1 item simple.py F
simple.py:10 (test_demo)
7 != 6 Expected :6
Actual :7 ========================== 1 failed in 0.14 seconds ===========================

2)pytest的安装

     安装命令:pip install pytest

3)pytest的特征、与unittest的区别。

    pytest的特征如下:

3.1  自动识别测试用例。(unittest当中,需要引入TestSuite,主动加载测试用例。)

3.2  简单的断言表达:assert 表达式即可。(unittest当中,self.assert*)

3.3  有测试会话、测试模块、测试类、测试函数级别的fixture。(unittest当中是测试类、测试函数级别的fixture)

3.4 有非常丰富的插件,目前在600+,比如allure插件。(unittest无)

3.5 测试用例不需要封装在测试类当中。(unittest中需要自定义类并继承TestCase)

那么pytest是如何自动识别测试用例的呢?我们在编写pytest用例的时候,需要遵守哪些规则呢?

  4)  pytest如何自动识别用例

   识别规则如下:

    1、搜索根目录:默认从当前目录中搜集测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索;

2、搜索规则:

1)搜索文件:符合命名规则 test_*.py 或者 *_test.py 的文件

2)在满足1)的文件中识别用例的规则:

2.1)以test_开头的函数名;

2.2)以Test开头的测试类(没有__init__函数)当中,以test_开头的函数

示例:在D:\pycharm_workspace目录下,创建一个python工程,名为study_pytest。在工程下,创建一个python包,包名为TestCases。

在包当中,创建一个测试用例文件:test_sample_1.py。文件内容如下:

 #!/usr/bin/python3
# -*- coding: utf-8 -*-
# Name: test_sample_1.py
# Author: 简
# Time: 2019/6/27 # 定义py文件下的测试用例
def test_sample():
print("我是测试用例!") class TestSample: def test_ss(self):
print("我也是测试用例!") def hello_pytest(self):
print("hi,pytest,我不是用例哦!!")

按照上面定义的搜索规则,需要跳转到工程目录,然后再执行命令:pytest -v 。 执行结果如下:

让我们愉快的加进来第2个测试文件:test_sample_2.py,内容如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Name: test_sample_2
# Author: 简
# Time: 2019/6/27 def add(a,*args):
sum = a
for item in args:
sum += item
return sum def test_add_two_number():
assert 33 == add(11,22)
assert 55.55 == add(22.22,33.33) def test_add_three_number():
assert 101 == add(10,90,1)

再次运行命令:pytest -v   得到如下结果:

通过多个用例文件的执行,可以看出用例的执行顺序。

 5)  pytest中用例的执行顺序

   原则:先搜索到的py文件中的用例,先执行。在同一py文件当中,按照代码顺序,先搜索到的用例先执行。

pytest系列(一):什么是单元测试界的高富帅?的更多相关文章

  1. Pytest系列(一)初次了解

    在之前,我分享过unittest系列,后来有很多人问我,能不能出pytest的教程,正好最近在整理pytest相关的资料,那么,就趁着这个机会,去和大家分享一下pytest系列. pytest是一个非 ...

  2. 单元测试系列之三:JUnit单元测试规范

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6762032.html Junit测试代 ...

  3. pytest系列(二):筛选用例新姿势,mark 一下,你就知道。

    pytest系列(一)中给大家介绍了pytest的特性,以及它的编写用例的简单至极. 那么在实际工作当中呢,我们要写的自动化用例会比较多,不会都放在一个py文件里. 如下图所示,我们编写的用例存放在不 ...

  4. Pytest系列(1) - 快速入门和基础讲解

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 目前有两种纯测试的测试框架, ...

  5. Pytest系列(2) - assert断言详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 与unittest不同,py ...

  6. Pytest系列(4) - fixture的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 前面一篇讲了setup.te ...

  7. Pytest系列(5) - 用例执行的几种状态

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 用例执行状态 用例执行完成后,每条 ...

  8. Pytest系列(6) - conftest.py的详细讲解

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 什么是conftest.py 可以 ...

  9. Pytest系列(7) - skip、skipif跳过用例

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest.mark.sk ...

随机推荐

  1. HDU1907 Jhon

    Little John is playing very funny game with his younger brother. There is one big box filled with M& ...

  2. CoderForces Round526 (A~E)题解

    A. The Fair Nut and Elevator time limit per test 1 second memory limit per test 256 megabytes input ...

  3. Multiplication Game

    Description Alice and Bob are in their class doing drills on multiplication and division. They quick ...

  4. Python3 并发编程3

    目录 GIL全局解释器锁 基本概念 多线程的作用 死锁现象 递归锁 信号量 线程队列 GIL全局解释器锁 基本概念 global interpreter lock 全局解释器锁 GIL不是Python ...

  5. CSS3(2)--- 过渡(transition)

    CSS3(2)--- 过渡(transition) 一.概念 1.什么是过渡 通俗理解 是从一个状态 渐渐的过渡到 另外一个状态. 比如一个盒子原先宽度为100px,当鼠标点击时盒子的宽度变成200p ...

  6. nginx 自启动设置

    首先,在linux系统的/etc/init.d/目录下创建nginx文件,使用如下命令: 1 vim /etc/init.d/nginx 在脚本中添加如下命令: #!/bin/sh # # nginx ...

  7. 使用python实现数组、链表、队列、栈

    引言 什么是数据结构? 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表,集合和字 ...

  8. 关于eclipse码代码时光标自动消失要重新点击输入框的问题

    前几天码代码时在两个电脑都出现了同样的问题,就是在输入的时候,输入法突然从程序框切换到某不可名状的位置,要重新点击输入框才能解决.(后发现不但是eclipse,任何带有输入框的都会出现此问题) 经排查 ...

  9. Maven使用教程一:Maven基础

    使用Maven快速创建一个工程 为了加快速度,在setting.xml中加一段配置,用国内阿里云的镜像仓库可以去下载各种东西. <mirror> <id>nexus-aliyu ...

  10. Nginx实现负载均衡时常用的分配服务器策略

    场景 Nginx配置实例-负载均衡实例:平均访问多台服务器: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103019576 在 ...